Add a QPointer guard for the draggable

So we can detect if it was deleted meanwhile
This commit is contained in:
Sergio Martins
2021-01-10 23:00:19 +00:00
parent 3b1158b82f
commit 81efda2d11
2 changed files with 7 additions and 3 deletions

View File

@@ -161,6 +161,7 @@ void StateNone::onEntry()
q->m_pressPos = QPoint();
q->m_offset = QPoint();
q->m_draggable = nullptr;
q->m_draggableGuard.clear();
q->m_windowBeingDragged.reset();
WidgetResizeHandler::s_disableAllHandlers = false; // Re-enable resize handlers
@@ -174,12 +175,13 @@ void StateNone::onEntry()
bool StateNone::handleMouseButtonPress(Draggable *draggable, QPoint globalPos, QPoint pos)
{
qCDebug(state) << "StateNone::handleMouseButtonPress: draggable"
<< draggable << "; globalPos" << globalPos;
<< draggable->asWidget() << "; globalPos" << globalPos;
if (!draggable->isPositionDraggable(pos))
return false;
q->m_draggable = draggable;
q->m_draggableGuard = draggable->asWidget();
q->m_pressPos = globalPos;
q->m_offset = pos;
Q_EMIT q->mousePressed();
@@ -198,7 +200,7 @@ StatePreDrag::~StatePreDrag() = default;
void StatePreDrag::onEntry()
{
qCDebug(state) << "StatePreDrag entered";
qCDebug(state) << "StatePreDrag entered" << q->m_draggableGuard.data();
WidgetResizeHandler::s_disableAllHandlers = true; // Disable the resize handler during dragging
}
@@ -264,7 +266,8 @@ void StateDragging::onEntry()
# endif
#endif
qCDebug(state) << "StateDragging entered. m_draggable=" << q->m_draggable << "; m_windowBeingDragged=" << q->m_windowBeingDragged->floatingWindow();
qCDebug(state) << "StateDragging entered. m_draggable=" << q->m_draggable->asWidget()
<< "; m_windowBeingDragged=" << q->m_windowBeingDragged->floatingWindow();
auto fw = q->m_windowBeingDragged->floatingWindow();
if (!fw->geometry().contains(q->m_pressPos)) {