summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel/qwidgetwindow.cpp
diff options
context:
space:
mode:
authorMiika Pernu <miika.pernu@qt.io>2020-05-14 15:26:51 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-06-10 04:08:19 +0000
commit1e42f022cc763a7fa67887bee078d37faa6c4a86 (patch)
treeddd1895f07f07a7ff67d2d1ec8eee7b20e6b6e34 /src/widgets/kernel/qwidgetwindow.cpp
parentf7f5919558a08e92db133580fff7b5cc3053a9ed (diff)
Fix to crash in QWindow::event when delete this called on closeEvent
Starting from Qt 5.11 QWindow::event is called after QDialog::closeEvent which would cause a crash if "delete this" was called on closeEvent. The commit that changed this was e0b5ff4ad583befbecbcbe462998e3ed80899531. Added a check before QWindow::event call utilizing QPointer to prevent the function call in case object is destroyed by a user in close event handler. Change-Id: I64a4a0f3271714e55bf7e806177f0d8b39b67fa3 Fixes: QTBUG-84222 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 036c3c19e7da5f1a280750d3c68a0cff38678029) (cherry picked from commit 710777d5d32ef13f2037cfe58e40ff2343355759) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/widgets/kernel/qwidgetwindow.cpp')
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index c3f570ce4f..e74243203a 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -243,10 +243,14 @@ bool QWidgetWindow::event(QEvent *event)
}
switch (event->type()) {
- case QEvent::Close:
+ case QEvent::Close: {
+ // The widget might be deleted in the close event handler.
+ QPointer<QObject> guard = this;
handleCloseEvent(static_cast<QCloseEvent *>(event));
- QWindow::event(event);
+ if (guard)
+ QWindow::event(event);
return true;
+ }
case QEvent::Enter:
case QEvent::Leave: