diff --git a/src/private/WindowBeingDragged.cpp b/src/private/WindowBeingDragged.cpp index c2cf49c9..767e77c3 100644 --- a/src/private/WindowBeingDragged.cpp +++ b/src/private/WindowBeingDragged.cpp @@ -166,6 +166,14 @@ bool WindowBeingDragged::contains(DropArea *dropArea) const return m_floatingWindow && m_floatingWindow->dropArea() == dropArea; } +QVector WindowBeingDragged::dockWidgets() const +{ + if (m_floatingWindow) + return m_floatingWindow->dockWidgets(); + + return {}; +} + Draggable *WindowBeingDragged::draggable() const { return m_draggable; @@ -227,6 +235,18 @@ QPixmap WindowBeingDraggedWayland::pixmap() const return pixmap; } +QVector WindowBeingDraggedWayland::dockWidgets() const +{ + if (m_floatingWindow) + return WindowBeingDragged::dockWidgets(); + else if (m_frame) + return m_frame->dockWidgets(); + else if (m_dockWidget) + return { m_dockWidget }; + + return {}; +} + QSize WindowBeingDraggedWayland::size() const { if (m_floatingWindow) diff --git a/src/private/WindowBeingDragged_p.h b/src/private/WindowBeingDragged_p.h index d4287a67..3131e3dd 100644 --- a/src/private/WindowBeingDragged_p.h +++ b/src/private/WindowBeingDragged_p.h @@ -64,6 +64,9 @@ public: /// @brief Returns a pixmap representing this Window. For purposes of QDrag. Wayland only. virtual QPixmap pixmap() const { return {}; } + /// @brief Returns the list of dock widgets being dragged + virtual QVector dockWidgets() const; + /// @brief Returns the draggable Draggable *draggable() const; protected: @@ -82,16 +85,17 @@ public: explicit WindowBeingDraggedWayland(Draggable *draggable); ~WindowBeingDraggedWayland() override; + QSize size() const override; + QSize minSize() const override; + QSize maxSize() const override; + QPixmap pixmap() 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) // So we're dragging either a frame with multiple dock widgets or a single tab, keep them here. // It's important to know what we're dragging, so drop rubber band respect min/max sizes. QPointer m_frame; QPointer m_dockWidget; - - QSize size() const override; - QSize minSize() const override; - QSize maxSize() const override; - QPixmap pixmap() const override; }; } diff --git a/src/private/indicators/ClassicIndicators.cpp b/src/private/indicators/ClassicIndicators.cpp index 1c120dde..22d7e1e4 100644 --- a/src/private/indicators/ClassicIndicators.cpp +++ b/src/private/indicators/ClassicIndicators.cpp @@ -105,7 +105,7 @@ void ClassicIndicators::updateIndicatorsVisibility(bool visible) m_tabIndicatorVisible = m_innerIndicatorsVisible && windowBeingDragged && DockRegistry::self()->affinitiesMatch(m_hoveredFrame->affinities(), windowBeingDragged->affinities()); if (m_tabIndicatorVisible && tabbingAllowedFunc) { - const DockWidgetBase::List source = windowBeingDragged->floatingWindow()->dockWidgets(); + const DockWidgetBase::List source = windowBeingDragged->dockWidgets(); const DockWidgetBase::List target = m_hoveredFrame->dockWidgets(); m_tabIndicatorVisible = tabbingAllowedFunc(source, target); }