Allow DragController views to have access to its controller

For consistency
This commit is contained in:
Sergio Martins
2022-07-20 13:12:52 +01:00
parent 013e390428
commit 36931e7c45
12 changed files with 17 additions and 11 deletions

View File

@@ -43,6 +43,7 @@ enum class Type {
DropArea = 4096, DropArea = 4096,
MDILayout = 8192, MDILayout = 8192,
RubberBand = 0x4000, RubberBand = 0x4000,
DropAreaIndicatorOverlay = 0x8000,
LAST = RubberBand // Keep last LAST = RubberBand // Keep last
}; };

View File

@@ -83,7 +83,7 @@ public:
/// @brief Create an empty view /// @brief Create an empty view
/// For Qt this would just returns a empty QWidget or QQuickItem /// For Qt this would just returns a empty QWidget or QQuickItem
/// other frontends can return something as basic. /// 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 /// @brief Returns whether this platform is QtWidgets
bool isQtWidgets() const; bool isQtWidgets() const;

View File

@@ -24,7 +24,7 @@ using namespace KDDockWidgets;
using namespace KDDockWidgets::Controllers; using namespace KDDockWidgets::Controllers;
DropIndicatorOverlay::DropIndicatorOverlay(Controllers::DropArea *dropArea) 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) , m_dropArea(dropArea)
{ {
view()->setVisible(false); view()->setVisible(false);

View File

@@ -117,7 +117,7 @@ QSize Platform_dummy::screenSizeFor(View *) const
return {}; return {};
} }
View *Platform_dummy::createView(View *) const View *Platform_dummy::createView(Controller *, View *) const
{ {
return nullptr; return nullptr;
} }

View File

@@ -34,7 +34,7 @@ public:
int screenNumberFor(View *) const override; int screenNumberFor(View *) const override;
QSize screenSizeFor(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 inDisallowedDragView(QPoint globalPos) const override;
bool usesFallbackMouseGrabber() const override; bool usesFallbackMouseGrabber() const override;
void ungrabMouse() override; void ungrabMouse() override;

View File

@@ -181,9 +181,9 @@ ViewFactory_qtquick *Platform_qtquick::viewFactory() const
return static_cast<ViewFactory_qtquick *>(Config::self().viewFactory()); return static_cast<ViewFactory_qtquick *>(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 */ /** static */

View File

@@ -46,7 +46,7 @@ public:
QSize screenSizeFor(View *) const override; QSize screenSizeFor(View *) const override;
void setQmlEngine(QQmlEngine *); void setQmlEngine(QQmlEngine *);
QQmlEngine *qmlEngine() const; QQmlEngine *qmlEngine() const;
View *createView(View *parent = nullptr) const override; View *createView(Controller *controller, View *parent = nullptr) const override;
bool usesFallbackMouseGrabber() const override; bool usesFallbackMouseGrabber() const override;
bool inDisallowedDragView(QPoint globalPos) const override; bool inDisallowedDragView(QPoint globalPos) const override;
void ungrabMouse() override; void ungrabMouse() override;

View File

@@ -95,6 +95,7 @@ static Controller *controllerForItem(QQuickItem *item)
case Type::RubberBand: case Type::RubberBand:
case Type::LayoutItem: case Type::LayoutItem:
case Type::ViewWrapper: case Type::ViewWrapper:
case Type::DropAreaIndicatorOverlay:
case Type::None: case Type::None:
// skip internal types // skip internal types
continue; continue;
@@ -285,6 +286,7 @@ bool ViewWrapper_qtquick::is(Type t) const
return false; // Not support by qtquick return false; // Not support by qtquick
case Type::LayoutItem: case Type::LayoutItem:
case Type::None: case Type::None:
case Type::DropAreaIndicatorOverlay:
qWarning() << Q_FUNC_INFO << "These are framework internals that are not wrapped"; qWarning() << Q_FUNC_INFO << "These are framework internals that are not wrapped";
return false; return false;
case Type::ViewWrapper: case Type::ViewWrapper:

View File

@@ -167,9 +167,9 @@ int Platform_qtwidgets::startDragDistance_impl() const
return QApplication::startDragDistance(); return QApplication::startDragDistance();
} }
View *Platform_qtwidgets::createView(View *parent) const View *Platform_qtwidgets::createView(Controller *controller, View *parent) const
{ {
return new Views::View_qtwidgets<QWidget>(nullptr, Type::None, Views::View_qt::asQWidget(parent)); return new Views::View_qtwidgets<QWidget>(controller, Type::None, Views::View_qt::asQWidget(parent));
} }
bool Platform_qtwidgets::usesFallbackMouseGrabber() const bool Platform_qtwidgets::usesFallbackMouseGrabber() const

View File

@@ -38,7 +38,7 @@ public:
QSize screenSizeFor(View *) const override; QSize screenSizeFor(View *) const override;
int startDragDistance_impl() 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 inDisallowedDragView(QPoint globalPos) const override;
bool usesFallbackMouseGrabber() const override; bool usesFallbackMouseGrabber() const override;
void ungrabMouse() override; void ungrabMouse() override;

View File

@@ -96,9 +96,11 @@ static Controller *controllerForWidget(QWidget *widget)
case Type::RubberBand: case Type::RubberBand:
case Type::LayoutItem: case Type::LayoutItem:
case Type::ViewWrapper: case Type::ViewWrapper:
case Type::DropAreaIndicatorOverlay:
case Type::None: case Type::None:
// skip internal types // skip internal types
continue; continue;
break;
} }
} }
@@ -243,6 +245,7 @@ bool ViewWrapper_qtwidgets::is(Type t) const
return qobject_cast<MDIArea_qtwidgets *>(m_widget); return qobject_cast<MDIArea_qtwidgets *>(m_widget);
case Type::LayoutItem: case Type::LayoutItem:
case Type::None: case Type::None:
case Type::DropAreaIndicatorOverlay:
qWarning() << Q_FUNC_INFO << "These are framework internals that are not wrapped"; qWarning() << Q_FUNC_INFO << "These are framework internals that are not wrapped";
return false; return false;
case Type::ViewWrapper: case Type::ViewWrapper:

View File

@@ -14,7 +14,7 @@
TEST_CASE("Separator Ctor") TEST_CASE("Separator Ctor")
{ {
auto hostView = Platform::instance()->createView(); auto hostView = Platform::instance()->createView(nullptr);
{ {
Controllers::Separator separator(hostView); Controllers::Separator separator(hostView);