diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2019-10-15 14:18:40 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-09-14 12:41:00 +0200 |
commit | 0c02f133f3daee146b805149e69bba8cee6727b2 (patch) | |
tree | c013e3a10a6ae804f33c05e077dcf8b346a4eea7 /src/plugins/platforms | |
parent | cc570ce2fe22e6314d378d3f2d6e4ae1a08df3a2 (diff) |
Plumb application quit through platform plugin
If we have a platform plugin we ask the platform to quit, and if
not we fall back to the base implementation of QCoreApplication
that sends Quit events directly.
This allows the platform to involve the rest of the system in the
process. The platform will then come back with a spontaneous quit
via QWSI::handleApplicationTermination(), which will then send
the corresponding Quit even from QGuiApplication like normal.
Task-number: QTBUG-45262
Task-number: QTBUG-33235
Task-number: QTBUG-72013
Task-number: QTBUG-59782
Change-Id: I0000aaf7192e4b905933c5da0e53901c6c88f26a
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/plugins/platforms')
5 files changed, 9 insertions, 4 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm index 62f2cc30e0..e6e46cda81 100644 --- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm @@ -92,10 +92,6 @@ #include <qpa/qwindowsysteminterface.h> #include <qwindowdefs.h> -QT_BEGIN_NAMESPACE -Q_LOGGING_CATEGORY(lcQpaApplication, "qt.qpa.application"); -QT_END_NAMESPACE - QT_USE_NAMESPACE @implementation QCocoaApplicationDelegate { diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.h b/src/plugins/platforms/cocoa/qcocoahelpers.h index d78aaadd4e..883c409924 100644 --- a/src/plugins/platforms/cocoa/qcocoahelpers.h +++ b/src/plugins/platforms/cocoa/qcocoahelpers.h @@ -72,6 +72,7 @@ Q_DECLARE_LOGGING_CATEGORY(lcQpaWindow) Q_DECLARE_LOGGING_CATEGORY(lcQpaDrawing) Q_DECLARE_LOGGING_CATEGORY(lcQpaMouse) Q_DECLARE_LOGGING_CATEGORY(lcQpaScreen) +Q_DECLARE_LOGGING_CATEGORY(lcQpaApplication) class QPixmap; class QString; diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm index 3e37010497..389766fdc7 100644 --- a/src/plugins/platforms/cocoa/qcocoahelpers.mm +++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm @@ -59,6 +59,7 @@ Q_LOGGING_CATEGORY(lcQpaWindow, "qt.qpa.window"); Q_LOGGING_CATEGORY(lcQpaDrawing, "qt.qpa.drawing"); Q_LOGGING_CATEGORY(lcQpaMouse, "qt.qpa.input.mouse", QtCriticalMsg); Q_LOGGING_CATEGORY(lcQpaScreen, "qt.qpa.screen", QtCriticalMsg); +Q_LOGGING_CATEGORY(lcQpaApplication, "qt.qpa.application"); // // Conversion Functions diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h index f8b9e9fc12..1e330344af 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.h +++ b/src/plugins/platforms/cocoa/qcocoaintegration.h @@ -132,6 +132,7 @@ public: void setApplicationIcon(const QIcon &icon) const override; void beep() const override; + void quit() const override; void closePopups(QWindow *forWindow = nullptr); diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index 250d9fc6e5..872d9bb7f1 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -488,6 +488,12 @@ void QCocoaIntegration::beep() const NSBeep(); } +void QCocoaIntegration::quit() const +{ + qCDebug(lcQpaApplication) << "Terminating application"; + [NSApp terminate:nil]; +} + void QCocoaIntegration::closePopups(QWindow *forWindow) { for (auto it = m_popupWindowStack.begin(); it != m_popupWindowStack.end();) { |