@@ -161,6 +161,7 @@ void StateNone::onEntry()
161
161
q->m_pressPos = QPoint ();
162
162
q->m_offset = QPoint ();
163
163
q->m_draggable = nullptr ;
164
+ q->m_draggableGuard .clear ();
164
165
q->m_windowBeingDragged .reset ();
165
166
WidgetResizeHandler::s_disableAllHandlers = false ; // Re-enable resize handlers
166
167
@@ -174,12 +175,13 @@ void StateNone::onEntry()
174
175
bool StateNone::handleMouseButtonPress (Draggable *draggable, QPoint globalPos, QPoint pos)
175
176
{
176
177
qCDebug (state) << " StateNone::handleMouseButtonPress: draggable"
177
- << draggable << " ; globalPos" << globalPos;
178
+ << draggable-> asWidget () << " ; globalPos" << globalPos;
178
179
179
180
if (!draggable->isPositionDraggable (pos))
180
181
return false ;
181
182
182
183
q->m_draggable = draggable;
184
+ q->m_draggableGuard = draggable->asWidget ();
183
185
q->m_pressPos = globalPos;
184
186
q->m_offset = pos;
185
187
Q_EMIT q->mousePressed ();
@@ -198,12 +200,18 @@ StatePreDrag::~StatePreDrag() = default;
198
200
199
201
void StatePreDrag::onEntry ()
200
202
{
201
- qCDebug (state) << " StatePreDrag entered" ;
203
+ qCDebug (state) << " StatePreDrag entered" << q-> m_draggableGuard . data () ;
202
204
WidgetResizeHandler::s_disableAllHandlers = true ; // Disable the resize handler during dragging
203
205
}
204
206
205
207
bool StatePreDrag::handleMouseMove (QPoint globalPos)
206
208
{
209
+ if (!q->m_draggableGuard ) {
210
+ qWarning () << Q_FUNC_INFO << " Draggable was destroyed, canceling the drag" ;
211
+ Q_EMIT q->dragCanceled ();
212
+ return false ;
213
+ }
214
+
207
215
if (q->m_draggable ->dragCanStart (q->m_pressPos , globalPos)) {
208
216
Q_EMIT q->manhattanLengthMove ();
209
217
return true ;
@@ -259,7 +267,8 @@ void StateDragging::onEntry()
259
267
# endif
260
268
#endif
261
269
262
- qCDebug (state) << " StateDragging entered. m_draggable=" << q->m_draggable << " ; m_windowBeingDragged=" << q->m_windowBeingDragged ->floatingWindow ();
270
+ qCDebug (state) << " StateDragging entered. m_draggable=" << q->m_draggable ->asWidget ()
271
+ << " ; m_windowBeingDragged=" << q->m_windowBeingDragged ->floatingWindow ();
263
272
264
273
auto fw = q->m_windowBeingDragged ->floatingWindow ();
265
274
if (!fw->geometry ().contains (q->m_pressPos )) {
0 commit comments