From e9e8d67e31b8b6a8348b5dae3225be2dbd87ffd2 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Sun, 5 Sep 2021 23:47:52 +0200 Subject: Fix segfault when closing widget and destroying window in QDialog::done MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On OpenSUSE we seem to get an Enter event after or while the QWindow is closed, and that appears to reset the currentMouseWindow after we cleared it in QWindowPrivate::destroy. Apply a workaround similar to the focus_window to make sure that currentMouseWindow and currentMousePressWindow don't point to destroyed objects. Pick-to: 6.2 Change-Id: I61afdaa7d8d1d437058624012319460be2f2567f Reviewed-by: Tor Arne Vestbø --- src/gui/kernel/qwindow.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/gui/kernel/qwindow.cpp') diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 83c776a485..15fcceb9c1 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -223,11 +223,15 @@ QWindow::~QWindow() if (!QGuiApplicationPrivate::is_app_closing) QGuiApplicationPrivate::instance()->modalWindowList.removeOne(this); - // focus_window is normally cleared in destroy(), but the window may in - // some cases end up becoming the focus window again. Clear it again - // here as a workaround. See QTBUG-75326. + // thse are normally cleared in destroy(), but the window may in + // some cases end up becoming the focus window again, or receive an enter + // event. Clear it again here as a workaround. See QTBUG-75326. if (QGuiApplicationPrivate::focus_window == this) QGuiApplicationPrivate::focus_window = nullptr; + if (QGuiApplicationPrivate::currentMouseWindow == this) + QGuiApplicationPrivate::currentMouseWindow = nullptr; + if (QGuiApplicationPrivate::currentMousePressWindow == this) + QGuiApplicationPrivate::currentMousePressWindow = nullptr; } void QWindowPrivate::init(QScreen *targetScreen) -- cgit v1.2.3