diff --git a/src/private/DragController.cpp b/src/private/DragController.cpp index c5e31e39..432b8596 100644 --- a/src/private/DragController.cpp +++ b/src/private/DragController.cpp @@ -592,26 +592,26 @@ DragController::DragController(QObject *parent) { qCDebug(creation) << "DragController()"; - auto stateNone = new StateNone(this); + m_stateNone = new StateNone(this); auto statepreDrag = new StatePreDrag(this); auto stateDragging = isWayland() ? new StateDraggingWayland(this) : new StateDragging(this); m_stateDraggingMDI = new StateInternalMDIDragging(this); - stateNone->addTransition(this, &DragController::mousePressed, statepreDrag); - statepreDrag->addTransition(this, &DragController::dragCanceled, stateNone); + m_stateNone->addTransition(this, &DragController::mousePressed, statepreDrag); + statepreDrag->addTransition(this, &DragController::dragCanceled, m_stateNone); statepreDrag->addTransition(this, &DragController::manhattanLengthMove, stateDragging); statepreDrag->addTransition(this, &DragController::manhattanLengthMoveMDI, m_stateDraggingMDI); - stateDragging->addTransition(this, &DragController::dragCanceled, stateNone); - stateDragging->addTransition(this, &DragController::dropped, stateNone); + stateDragging->addTransition(this, &DragController::dragCanceled, m_stateNone); + stateDragging->addTransition(this, &DragController::dropped, m_stateNone); - m_stateDraggingMDI->addTransition(this, &DragController::dragCanceled, stateNone); + m_stateDraggingMDI->addTransition(this, &DragController::dragCanceled, m_stateNone); m_stateDraggingMDI->addTransition(this, &DragController::mdiPopOut, stateDragging); if (usesFallbackMouseGrabber()) enableFallbackMouseGrabber(); - setCurrentState(stateNone); + setCurrentState(m_stateNone); } DragController *DragController::instance() @@ -647,6 +647,11 @@ bool DragController::isInClientDrag() const return isDragging() && !m_nonClientDrag; } +bool DragController::isIdle() const +{ + return activeState() == m_stateNone; +} + void DragController::grabMouseFor(QWidgetOrQuick *target) { if (isWayland()) diff --git a/src/private/DragController_p.h b/src/private/DragController_p.h index d92b5bd6..b033ab97 100644 --- a/src/private/DragController_p.h +++ b/src/private/DragController_p.h @@ -26,6 +26,7 @@ namespace KDDockWidgets { class StateBase; +class StateNone; class StateInternalMDIDragging; class DropArea; class Draggable; @@ -85,6 +86,7 @@ public: bool isDragging() const; bool isInNonClientDrag() const; bool isInClientDrag() const; + bool isIdle() const; void grabMouseFor(QWidgetOrQuick *); void releaseMouse(QWidgetOrQuick *); @@ -133,6 +135,7 @@ private: DropArea *m_currentDropArea = nullptr; bool m_nonClientDrag = false; FallbackMouseGrabber *m_fallbackMouseGrabber = nullptr; + StateNone *m_stateNone = nullptr; StateInternalMDIDragging *m_stateDraggingMDI = nullptr; };