From c514812aaffd5c652db0c8972ee8327607df5927 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Fri, 1 Jul 2022 15:20:08 +0200 Subject: [PATCH] Be more graceful when objects die by the time the dnd loop exits The main issue fixed in 7f23dd963536eb8123ee4c5c22bf43b6f866d008 can manifest in another form on platforms where QBasicDrag is used (xcb). Make sure that we recognize if an object (e.g. a QWidgetWindow) is destroyed by the time the nested event loop exits. Task-number: QTBUG-104596 Change-Id: Ib82dd8230cb6f13d804bd992234b2a3ce85a7061 Reviewed-by: Shawn Rutledge (cherry picked from commit 742ae9ea1cadbb438e2d02bb58ae900c676dc41c) Reviewed-by: Qt Cherry-pick Bot --- src/gui/kernel/qsimpledrag.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/kernel/qsimpledrag.cpp b/src/gui/kernel/qsimpledrag.cpp index a88955b99a9..71cf3f04397 100644 --- a/src/gui/kernel/qsimpledrag.cpp +++ b/src/gui/kernel/qsimpledrag.cpp @@ -124,6 +124,7 @@ bool QBasicDrag::eventFilter(QObject *o, QEvent *e) } case QEvent::MouseButtonRelease: { + QPointer objGuard(o); disableEventFilter(); if (canDrop()) { QPoint nativePosition = getNativeMousePos(e, m_drag_icon_window); @@ -133,6 +134,8 @@ bool QBasicDrag::eventFilter(QObject *o, QEvent *e) cancel(); } exitDndEventLoop(); + if (!objGuard) + return true; // If a QShapedPixmapWindow (drag feedback) is being dragged along, the // mouse event's localPos() will be relative to that, which is useless.