diff --git a/src/Controller.h b/src/Controller.h index 97200925..317981c0 100644 --- a/src/Controller.h +++ b/src/Controller.h @@ -43,6 +43,7 @@ enum class Type { DropArea = 4096, MDILayout = 8192, RubberBand = 0x4000, + DropAreaIndicatorOverlay = 0x8000, LAST = RubberBand // Keep last }; diff --git a/src/Platform.h b/src/Platform.h index 039b927e..04804aa4 100644 --- a/src/Platform.h +++ b/src/Platform.h @@ -83,7 +83,7 @@ public: /// @brief Create an empty view /// For Qt this would just returns a empty QWidget or QQuickItem /// other frontends can return something as basic. - virtual View *createView(View *parent = nullptr) const = 0; + virtual View *createView(Controller *, View *parent = nullptr) const = 0; /// @brief Returns whether this platform is QtWidgets bool isQtWidgets() const; diff --git a/src/controllers/DropIndicatorOverlay.cpp b/src/controllers/DropIndicatorOverlay.cpp index 2ce88506..3b9de769 100644 --- a/src/controllers/DropIndicatorOverlay.cpp +++ b/src/controllers/DropIndicatorOverlay.cpp @@ -24,7 +24,7 @@ using namespace KDDockWidgets; using namespace KDDockWidgets::Controllers; DropIndicatorOverlay::DropIndicatorOverlay(Controllers::DropArea *dropArea) - : Controller(Type::None, Platform::instance()->createView(dropArea->view())) + : Controller(Type::DropAreaIndicatorOverlay, Platform::instance()->createView(this, dropArea->view())) , m_dropArea(dropArea) { view()->setVisible(false); diff --git a/src/dummy/Platform_dummy.cpp b/src/dummy/Platform_dummy.cpp index 214c5ef9..d9812dfc 100644 --- a/src/dummy/Platform_dummy.cpp +++ b/src/dummy/Platform_dummy.cpp @@ -117,7 +117,7 @@ QSize Platform_dummy::screenSizeFor(View *) const return {}; } -View *Platform_dummy::createView(View *) const +View *Platform_dummy::createView(Controller *, View *) const { return nullptr; } diff --git a/src/dummy/Platform_dummy.h b/src/dummy/Platform_dummy.h index 41038b96..a0dd17dd 100644 --- a/src/dummy/Platform_dummy.h +++ b/src/dummy/Platform_dummy.h @@ -34,7 +34,7 @@ public: int screenNumberFor(View *) const override; QSize screenSizeFor(View *) const override; - View *createView(View *parent = nullptr) const override; + View *createView(Controller *controller, View *parent = nullptr) const override; bool inDisallowedDragView(QPoint globalPos) const override; bool usesFallbackMouseGrabber() const override; void ungrabMouse() override; diff --git a/src/qtquick/Platform_qtquick.cpp b/src/qtquick/Platform_qtquick.cpp index b5c3e191..0909c183 100644 --- a/src/qtquick/Platform_qtquick.cpp +++ b/src/qtquick/Platform_qtquick.cpp @@ -181,9 +181,9 @@ ViewFactory_qtquick *Platform_qtquick::viewFactory() const return static_cast(Config::self().viewFactory()); } -View *Platform_qtquick::createView(View *parent) const +View *Platform_qtquick::createView(Controller *controller, View *parent) const { - return new Views::View_qtquick(nullptr, Type::None, Views::asQQuickItem(parent)); + return new Views::View_qtquick(controller, Type::None, Views::asQQuickItem(parent)); } /** static */ diff --git a/src/qtquick/Platform_qtquick.h b/src/qtquick/Platform_qtquick.h index f0f5e384..1940dfaa 100644 --- a/src/qtquick/Platform_qtquick.h +++ b/src/qtquick/Platform_qtquick.h @@ -46,7 +46,7 @@ public: QSize screenSizeFor(View *) const override; void setQmlEngine(QQmlEngine *); QQmlEngine *qmlEngine() const; - View *createView(View *parent = nullptr) const override; + View *createView(Controller *controller, View *parent = nullptr) const override; bool usesFallbackMouseGrabber() const override; bool inDisallowedDragView(QPoint globalPos) const override; void ungrabMouse() override; diff --git a/src/qtquick/views/ViewWrapper_qtquick.cpp b/src/qtquick/views/ViewWrapper_qtquick.cpp index 2fbc0c9b..43c5db57 100644 --- a/src/qtquick/views/ViewWrapper_qtquick.cpp +++ b/src/qtquick/views/ViewWrapper_qtquick.cpp @@ -95,6 +95,7 @@ static Controller *controllerForItem(QQuickItem *item) case Type::RubberBand: case Type::LayoutItem: case Type::ViewWrapper: + case Type::DropAreaIndicatorOverlay: case Type::None: // skip internal types continue; @@ -285,6 +286,7 @@ bool ViewWrapper_qtquick::is(Type t) const return false; // Not support by qtquick case Type::LayoutItem: case Type::None: + case Type::DropAreaIndicatorOverlay: qWarning() << Q_FUNC_INFO << "These are framework internals that are not wrapped"; return false; case Type::ViewWrapper: diff --git a/src/qtwidgets/Platform_qtwidgets.cpp b/src/qtwidgets/Platform_qtwidgets.cpp index 40849773..c307c549 100644 --- a/src/qtwidgets/Platform_qtwidgets.cpp +++ b/src/qtwidgets/Platform_qtwidgets.cpp @@ -167,9 +167,9 @@ int Platform_qtwidgets::startDragDistance_impl() const return QApplication::startDragDistance(); } -View *Platform_qtwidgets::createView(View *parent) const +View *Platform_qtwidgets::createView(Controller *controller, View *parent) const { - return new Views::View_qtwidgets(nullptr, Type::None, Views::View_qt::asQWidget(parent)); + return new Views::View_qtwidgets(controller, Type::None, Views::View_qt::asQWidget(parent)); } bool Platform_qtwidgets::usesFallbackMouseGrabber() const diff --git a/src/qtwidgets/Platform_qtwidgets.h b/src/qtwidgets/Platform_qtwidgets.h index ec0b1139..652393a1 100644 --- a/src/qtwidgets/Platform_qtwidgets.h +++ b/src/qtwidgets/Platform_qtwidgets.h @@ -38,7 +38,7 @@ public: QSize screenSizeFor(View *) const override; int startDragDistance_impl() const override; - View *createView(View *parent = nullptr) const override; + View *createView(Controller *controller, View *parent = nullptr) const override; bool inDisallowedDragView(QPoint globalPos) const override; bool usesFallbackMouseGrabber() const override; void ungrabMouse() override; diff --git a/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp b/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp index 571bc48e..e19bbdc2 100644 --- a/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp +++ b/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp @@ -96,9 +96,11 @@ static Controller *controllerForWidget(QWidget *widget) case Type::RubberBand: case Type::LayoutItem: case Type::ViewWrapper: + case Type::DropAreaIndicatorOverlay: case Type::None: // skip internal types continue; + break; } } @@ -243,6 +245,7 @@ bool ViewWrapper_qtwidgets::is(Type t) const return qobject_cast(m_widget); case Type::LayoutItem: case Type::None: + case Type::DropAreaIndicatorOverlay: qWarning() << Q_FUNC_INFO << "These are framework internals that are not wrapped"; return false; case Type::ViewWrapper: diff --git a/tests/controllers/tst_separator.cpp b/tests/controllers/tst_separator.cpp index 00961699..ac1a9e05 100644 --- a/tests/controllers/tst_separator.cpp +++ b/tests/controllers/tst_separator.cpp @@ -14,7 +14,7 @@ TEST_CASE("Separator Ctor") { - auto hostView = Platform::instance()->createView(); + auto hostView = Platform::instance()->createView(nullptr); { Controllers::Separator separator(hostView);