summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qwindow.cpp
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2021-09-02 13:21:46 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2021-09-02 20:34:48 +0200
commit7ba75d088c3eba81a1d2bb708119442991d9f30b (patch)
treeef80a127f9d8d9d6c3ee40a4dacae2f9b2ddf0fb /src/gui/kernel/qwindow.cpp
parentf10ec04a6c9249ec7fad1d661bbb85610dd6d6f1 (diff)
QWidget: close the QWindow in QWidget::close
We want to close the window, end full screen mode on macOS, and free platform resources. This is all done by QWindow::close. QWindow::close closes the platform window, triggering a closeEvent to QWidgetWindow, which then calls QWidgetPrivate::close_helper. This way, closing a window via QWidget::close, QWindow::close, or interactively by the user are all equivalent. The QCloseEvent generated by the widget needs to be spontaneous for window-system generated events (i.e. the user clicked the close button), and non-spontaneous if the window closes because of a call to QWindow::close. To keep track of whether the event originated in an explicit call to QWindow::close, add a boolean to the QWindowPrivate. Add a test case that verifies that the window resources is destroyed, and that events are delivered as they should. Done-with: Morten Johan Sørvig <morten.sorvig@qt.io> Fixes: QTBUG-46701 Pick-to: 6.2 Change-Id: Iacb6a2c8d5e880b16b0c8f0c9257ed94bed36f5b Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/gui/kernel/qwindow.cpp')
-rw-r--r--src/gui/kernel/qwindow.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index 7f6e5044cb..845627756e 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -2254,6 +2254,7 @@ bool QWindow::close()
if (!d->platformWindow)
return true;
+ QBoolBlocker inCloseReset(d->inClose);
return d->platformWindow->close();
}