summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qwindow.cpp
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2020-04-29 14:39:49 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2020-05-05 13:34:15 +0000
commit7db59f458b96342f762a0bd9f5218907c026019a (patch)
treed28e8cc7dfc8fd4759520a9e1a2cd71c567faad0 /src/gui/kernel/qwindow.cpp
parentb8668257e6a6fadf429f65b3bcc6aff0cce063ec (diff)
Add virtual QWindow::closeEvent handler
The default implementation does nothing; the processing of accepted close events remains in the QWidget::event handler, so that subclasses don't have to call the super class in order to free window system resources and emit lastWindowClosed signals. QWidgetWindow::event is reimplemented to handle QEvent::Close as well, calling QWidgetPrivate::close_helper, which then delivers a separate QCloseEvent to the widget. The order of execution for widgets is after this change: 1) QWidgetWindow::event 2) QWidgetWindow::handleCloseEvent (calls QWidget::event/closeEvent) 3) QWindow::event 4) QWindow::closeEvent <- does nothing, not overridden 5) default cleanup handling in QWindow::event and for Qt Quick after the corresponding change in qtdeclarative: 1) QQuickWindow::event 2) QWindow::event 3) QQuickWindow::closeEvent <- emits closed 4) default cleanup handling in QWindow::event [ChangeLog][QtGui][QWindow] closeEvent has been added as a virtual function. Task-number: QTBUG-31019 Change-Id: I201f5ee9c6a73b949986648e3bd288d2c7898f28 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/gui/kernel/qwindow.cpp')
-rw-r--r--src/gui/kernel/qwindow.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index fd89e479b8..1b154770f8 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -2234,7 +2234,7 @@ void QWindow::showNormal()
quitting the application. Returns \c true on success, false if it has a parent
window (in which case the top level window should be closed instead).
- \sa destroy(), QGuiApplication::quitOnLastWindowClosed()
+ \sa destroy(), QGuiApplication::quitOnLastWindowClosed(), closeEvent()
*/
bool QWindow::close()
{
@@ -2320,6 +2320,19 @@ void QWindow::hideEvent(QHideEvent *ev)
}
/*!
+ Override this to handle close events (\a ev).
+
+ The function is called when the window is requested to close. Call \l{QEvent::ignore()}
+ on the event if you want to prevent the window from being closed.
+
+ \sa close()
+*/
+void QWindow::closeEvent(QCloseEvent *ev)
+{
+ Q_UNUSED(ev);
+}
+
+/*!
Override this to handle any event (\a ev) sent to the window.
Return \c true if the event was recognized and processed.
@@ -2395,6 +2408,7 @@ bool QWindow::event(QEvent *ev)
#endif
case QEvent::Close:
+ closeEvent(static_cast<QCloseEvent*>(ev));
if (ev->isAccepted()) {
Q_D(QWindow);
bool wasVisible = isVisible();