More porting away from _qtwidgets

This commit is contained in:
Sergio Martins
2022-04-03 21:09:37 +01:00
parent 79f9f72ef4
commit e9f287e2d7
11 changed files with 33 additions and 32 deletions

View File

@@ -34,9 +34,9 @@ using namespace KDDockWidgets;
class FocusScope::Private : public QObject // clazy:exclude=missing-qobject-macro (breaks unity build with earlier cmake due to including .moc here.)
{
public:
Private(FocusScope *qq, Views::View_qtwidgets<QWidget> *thisWidget)
Private(FocusScope *qq, View *thisView)
: q(qq)
, m_thisWidget(thisWidget)
, m_thisView(thisView)
{
connect(qApp, &QGuiApplication::focusObjectChanged,
this, &Private::onFocusObjectChanged);
@@ -68,7 +68,7 @@ public:
bool isInFocusScope(WidgetType *) const;
FocusScope *const q;
Views::View_qtwidgets<QWidget> *const m_thisWidget;
View *const m_thisView = nullptr;
bool m_isFocused = false;
bool m_inCtor = true;
QPointer<WidgetType> m_lastFocusedInScope;
@@ -78,8 +78,8 @@ FocusScope::Private::~Private()
{
}
FocusScope::FocusScope(Views::View_qtwidgets<QWidget> *thisWidget)
: d(new Private(this, thisWidget))
FocusScope::FocusScope(View *thisView)
: d(new Private(this, thisView))
{
}
@@ -106,7 +106,7 @@ void FocusScope::focus(Qt::FocusReason reason)
// very useful.
d->m_lastFocusedInScope->setFocus(reason);
} else {
if (auto frame = qobject_cast<Controllers::Frame *>(d->m_thisWidget)) {
if (auto frame = d->m_thisView->asFrameController()) {
if (auto dw = frame->currentDockWidget()) {
if (auto guest = dw->widget()) {
if (guest->focusPolicy() != Qt::NoFocus)
@@ -115,7 +115,7 @@ void FocusScope::focus(Qt::FocusReason reason)
}
} else {
// Not a use case right now
d->m_thisWidget->setFocus(reason);
d->m_thisView->setFocus(reason);
}
}
}
@@ -132,7 +132,7 @@ void FocusScope::Private::setIsFocused(bool is)
void FocusScope::Private::onFocusObjectChanged(QObject *obj)
{
auto widget = qobject_cast<WidgetType *>(obj);
auto widget = qobject_cast<QWidget *>(obj);
if (!widget) {
setIsFocused(false);
return;
@@ -152,7 +152,7 @@ bool FocusScope::Private::isInFocusScope(WidgetType *widget) const
{
WidgetType *p = widget;
while (p) {
if (p == m_thisWidget)
if (p == m_thisView->handle())
return true;
p = p->parentWidget();

View File

@@ -30,7 +30,7 @@ class DOCKS_EXPORT FocusScope
Q_DISABLE_COPY(FocusScope)
public:
///@brief constructor
explicit FocusScope(Views::View_qtwidgets<QWidget> *thisWidget);
explicit FocusScope(View *thisView);
virtual ~FocusScope();
///@brief Returns true if this FocusScope is focused.

View File

@@ -158,6 +158,7 @@ public:
virtual void grabMouse() = 0;
virtual void releaseMouse() = 0;
virtual QScreen *screen() const = 0;
virtual void setFocus(Qt::FocusReason) = 0;
// TODOv2: Check if these two should be in the controller or on view
virtual void onLayoutRequest()

View File

@@ -26,6 +26,8 @@
#include "Config.h"
#include "FrameworkWidgetFactory.h"
#include "views_qtwidgets/MainWindow_qtwidgets.h"
#include <QEvent>
#include <QCloseEvent>
#include <QTimer>

View File

@@ -18,8 +18,6 @@
#include "controllers/FloatingWindow.h"
#include "controllers/SideBar.h"
#include "views_qtwidgets/MainWindow_qtwidgets.h"
#include <QCoreApplication>
#include <QString>
#include <QSize>
@@ -65,15 +63,15 @@ public:
return nullptr;
// Note: Don't simply use window(), as the MainWindow might be embedded into something else
QWidgetOrQuick *p = q->view()->asQWidget()->parentWidget();
auto p = q->view()->parentView();
while (p) {
if (auto view = qobject_cast<Views::MainWindow_qtwidgets *>(p))
return view->mainWindow();
if (auto mw = p->asMainWindowController())
return mw;
if (p->isWindow())
return nullptr;
p = p->parentWidget();
p = p->parentView();
}
return nullptr;

View File

@@ -530,8 +530,8 @@ LayoutSaver::FloatingWindow FloatingWindow::serialize() const
fw.affinities = affinities();
fw.windowState = windowStateOverride();
auto mainWindow = qobject_cast<Views::MainWindow_qtwidgets *>(view()->asQWidget()->parentWidget());
fw.parentIndex = mainWindow ? DockRegistry::self()->mainwindows().indexOf(mainWindow->mainWindow())
auto mainWindow = view()->parentView()->asMainWindowController();
fw.parentIndex = mainWindow ? DockRegistry::self()->mainwindows().indexOf(mainWindow)
: -1;
return fw;
@@ -602,8 +602,7 @@ bool FloatingWindow::isWindow() const
MainWindow *FloatingWindow::mainWindow() const
{
auto view = qobject_cast<Views::MainWindow_qtwidgets *>(parent());
return view ? view->mainWindow() : nullptr;
return view()->parentView()->asMainWindowController();
}
QMargins FloatingWindow::contentMargins() const

View File

@@ -34,7 +34,6 @@
#include <QCloseEvent>
#include <QTimer>
#include <qobject.h>
#define MARGIN_THRESHOLD 100
@@ -67,7 +66,7 @@ static StackOptions tabWidgetOptions(FrameOptions options)
Frame::Frame(View *parent, FrameOptions options, int userType)
: Controller(Type::Frame, Config::self().frameworkWidgetFactory()->createFrame(this, parent))
, FocusScope(static_cast<Views::View_qtwidgets<QWidget> *>(view()->asQWidget())) // TODO
, FocusScope(view())
, m_tabWidget(new Controllers::Stack(this, tabWidgetOptions(options)))
, m_titleBar(new Controllers::TitleBar(this))
, m_options(actualOptions(options))
@@ -80,7 +79,7 @@ Frame::Frame(View *parent, FrameOptions options, int userType)
connect(m_tabWidget, &Controllers::Stack::currentTabChanged,
this, &Frame::onCurrentTabChanged);
setLayoutWidget(qobject_cast<LayoutWidget *>(parent ? parent->asQWidget() : nullptr)); // TODO
setLayoutWidget(qobject_cast<LayoutWidget *>(parent ? parent->asQObject() : nullptr)); // TODO
view()->init();

View File

@@ -19,14 +19,6 @@
#include <QString>
#include <QIcon>
namespace KDDockWidgets {
namespace Views {
class FloatingWindow_qtwidgets;
}
}
namespace KDDockWidgets::Controllers {
class Frame;
@@ -133,7 +125,6 @@ protected:
private:
friend class ::TestDocks;
friend class Views::FloatingWindow_qtwidgets;
void updateFloatButton();
void updateCloseButton();

View File

@@ -238,3 +238,8 @@ QScreen *ViewWrapper_qtwidgets::screen() const
{
return m_widget->screen();
}
void ViewWrapper_qtwidgets::setFocus(Qt::FocusReason reason)
{
m_widget->setFocus(reason);
}

View File

@@ -48,6 +48,7 @@ public:
void grabMouse() override;
void releaseMouse() override;
QScreen *screen() const override;
void setFocus(Qt::FocusReason) override;
private:
QWidget *const m_widget;

View File

@@ -352,6 +352,11 @@ public:
return QWidget::screen();
}
void setFocus(Qt::FocusReason reason) override
{
return QWidget::setFocus(reason);
}
protected:
bool event(QEvent *e) override
{