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,
MDILayout = 8192,
RubberBand = 0x4000,
DropAreaIndicatorOverlay = 0x8000,
LAST = RubberBand // Keep last
};

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -181,9 +181,9 @@ ViewFactory_qtquick *Platform_qtquick::viewFactory() const
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 */

View File

@@ -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;

View File

@@ -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:

View File

@@ -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<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

View File

@@ -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;

View File

@@ -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<MDIArea_qtwidgets *>(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:

View File

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