Skip to content

Commit d80325e

Browse files
committed
Merge branch '1.2' into master
2 parents 36eef80 + e992578 commit d80325e

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

src/private/DragController.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ void StateNone::onEntry()
161161
q->m_pressPos = QPoint();
162162
q->m_offset = QPoint();
163163
q->m_draggable = nullptr;
164+
q->m_draggableGuard.clear();
164165
q->m_windowBeingDragged.reset();
165166
WidgetResizeHandler::s_disableAllHandlers = false; // Re-enable resize handlers
166167

@@ -174,12 +175,13 @@ void StateNone::onEntry()
174175
bool StateNone::handleMouseButtonPress(Draggable *draggable, QPoint globalPos, QPoint pos)
175176
{
176177
qCDebug(state) << "StateNone::handleMouseButtonPress: draggable"
177-
<< draggable << "; globalPos" << globalPos;
178+
<< draggable->asWidget() << "; globalPos" << globalPos;
178179

179180
if (!draggable->isPositionDraggable(pos))
180181
return false;
181182

182183
q->m_draggable = draggable;
184+
q->m_draggableGuard = draggable->asWidget();
183185
q->m_pressPos = globalPos;
184186
q->m_offset = pos;
185187
Q_EMIT q->mousePressed();
@@ -198,12 +200,18 @@ StatePreDrag::~StatePreDrag() = default;
198200

199201
void StatePreDrag::onEntry()
200202
{
201-
qCDebug(state) << "StatePreDrag entered";
203+
qCDebug(state) << "StatePreDrag entered" << q->m_draggableGuard.data();
202204
WidgetResizeHandler::s_disableAllHandlers = true; // Disable the resize handler during dragging
203205
}
204206

205207
bool StatePreDrag::handleMouseMove(QPoint globalPos)
206208
{
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+
207215
if (q->m_draggable->dragCanStart(q->m_pressPos, globalPos)) {
208216
Q_EMIT q->manhattanLengthMove();
209217
return true;
@@ -259,7 +267,8 @@ void StateDragging::onEntry()
259267
# endif
260268
#endif
261269

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();
263272

264273
auto fw = q->m_windowBeingDragged->floatingWindow();
265274
if (!fw->geometry().contains(q->m_pressPos)) {

src/private/DragController_p.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ class DOCKS_EXPORT DragController : public MinimalStateMachine
118118

119119
Draggable::List m_draggables;
120120
Draggable *m_draggable = nullptr;
121+
QPointer<QWidget> m_draggableGuard; // Just so we know if the draggable was destroyed for some reason
121122
std::unique_ptr<WindowBeingDragged> m_windowBeingDragged;
122123
DropArea *m_currentDropArea = nullptr;
123124
bool m_nonClientDrag = false;

0 commit comments

Comments
 (0)