diff --git a/src/private/WidgetResizeHandler.cpp b/src/private/WidgetResizeHandler.cpp index 0d7670b9..4d9c2e8d 100644 --- a/src/private/WidgetResizeHandler.cpp +++ b/src/private/WidgetResizeHandler.cpp @@ -57,6 +57,12 @@ void WidgetResizeHandler::setResizeGap(int gap) m_resizeGap = gap; } +bool WidgetResizeHandler::isMDI() const +{ + auto frame = qobject_cast(mTarget); + return frame && frame->isMDI(); +} + int WidgetResizeHandler::widgetResizeHandlerMargin() { return 4; // pixels @@ -68,11 +74,41 @@ bool WidgetResizeHandler::eventFilter(QObject *o, QEvent *e) return false; auto widget = qobject_cast(o); + +#ifdef KDDOCKWIDGETS_QTWIDGETS if (!widget) return false; if (!mFilterIsGlobal && (!widget->isTopLevel() || o != mTarget)) return false; +#else + + // The QtQuick case is a bit different, as the Frame QQuickItem doesn't receive the MouseMove + // events, the QWindow does. (The frame instead receives HoverMove). + // So, if widget is nullptr we still allow for the case of it being a mouse move event + // to the QWindow + + if (mFilterIsGlobal) { + if (!isMDI()) { + // For QtQuick we only support the MDI case + return false; + } + + if (!widget) { + auto qquickWindow = qobject_cast(o); + if (!(qquickWindow && e->type() == QEvent::MouseMove)) + return false; + } + + } else { + if (!widget) + return false; + + if (!widget->isTopLevel() || o != mTarget) + return false; + } + +#endif switch (e->type()) { case QEvent::MouseButtonPress: { diff --git a/src/private/WidgetResizeHandler_p.h b/src/private/WidgetResizeHandler_p.h index 7ef3a1e6..353aec0b 100644 --- a/src/private/WidgetResizeHandler_p.h +++ b/src/private/WidgetResizeHandler_p.h @@ -60,6 +60,8 @@ public: */ void setResizeGap(int); + bool isMDI() const; + static int widgetResizeHandlerMargin(); #ifdef Q_OS_WIN