diff --git a/src/private/WindowBeingDragged.cpp b/src/private/WindowBeingDragged.cpp index 767e77c3..fb16dfa0 100644 --- a/src/private/WindowBeingDragged.cpp +++ b/src/private/WindowBeingDragged.cpp @@ -59,7 +59,6 @@ WindowBeingDragged::WindowBeingDragged(FloatingWindow *fw, Draggable *draggable) : m_floatingWindow(fw) , m_draggable(bestDraggable(draggable)) , m_draggableWidget(m_draggable ? m_draggable->asWidget() : nullptr) - , m_affinities(fw->affinities()) { init(); @@ -88,7 +87,6 @@ WindowBeingDragged::WindowBeingDragged(Draggable *draggable) WindowBeingDragged::WindowBeingDragged(FloatingWindow *fw) : m_floatingWindow(fw) , m_draggable(nullptr) - , m_affinities(fw->affinities()) { } @@ -127,7 +125,8 @@ void WindowBeingDragged::grabMouse(bool grab) QStringList WindowBeingDragged::affinities() const { - return m_affinities; + return m_floatingWindow ? m_floatingWindow->affinities() + : QStringList(); } QSize WindowBeingDragged::size() const @@ -235,6 +234,18 @@ QPixmap WindowBeingDraggedWayland::pixmap() const return pixmap; } +QStringList WindowBeingDraggedWayland::affinities() const +{ + if (m_floatingWindow) + return WindowBeingDragged::affinities(); + else if (m_frame) + return m_frame->affinities(); + else if (m_dockWidget) + return { m_dockWidget->affinities() }; + + return {}; +} + QVector WindowBeingDraggedWayland::dockWidgets() const { if (m_floatingWindow) diff --git a/src/private/WindowBeingDragged_p.h b/src/private/WindowBeingDragged_p.h index 3131e3dd..90079a22 100644 --- a/src/private/WindowBeingDragged_p.h +++ b/src/private/WindowBeingDragged_p.h @@ -46,7 +46,7 @@ public: void grabMouse(bool grab); ///@brief returns the affinities of the window being dragged - QStringList affinities() const; + virtual QStringList affinities() const; ///@brief size of the window being dragged contents virtual QSize size() const; @@ -75,8 +75,6 @@ protected: QPointer m_floatingWindow; Draggable *const m_draggable; QPointer m_draggableWidget; // Just to have a QPointer on it - - const QStringList m_affinities; }; struct WindowBeingDraggedWayland : public WindowBeingDragged @@ -89,6 +87,7 @@ public: QSize minSize() const override; QSize maxSize() const override; QPixmap pixmap() const override; + QStringList affinities() const override; QVector dockWidgets() const override; // These two are set for Wayland only, where we can't make the floating window immediately (no way to position it)