diff options
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 8 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication_p.h | 1 | ||||
-rw-r--r-- | src/gui/kernel/qplatformintegration.cpp | 14 | ||||
-rw-r--r-- | src/gui/kernel/qplatformintegration.h | 1 |
4 files changed, 24 insertions, 0 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 37e8edb6f7..15955e2287 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -3641,6 +3641,14 @@ bool QGuiApplicationPrivate::shouldQuitInternal(const QWindowList &processedWind return true; } +void QGuiApplicationPrivate::quit() +{ + if (auto *platformIntegration = QGuiApplicationPrivate::platformIntegration()) + platformIntegration->quit(); + else + QCoreApplicationPrivate::quit(); +} + void QGuiApplicationPrivate::processApplicationTermination(QWindowSystemInterfacePrivate::WindowSystemEvent *windowSystemEvent) { QEvent event(QEvent::Quit); diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h index 2bbb5ae9a6..7e3c2931f3 100644 --- a/src/gui/kernel/qguiapplication_p.h +++ b/src/gui/kernel/qguiapplication_p.h @@ -105,6 +105,7 @@ public: void addQtOptions(QList<QCommandLineOption> *options) override; #endif virtual bool shouldQuit() override; + void quit() override; bool shouldQuitInternal(const QWindowList &processedWindows); diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp index 1127ab43d2..634a04b791 100644 --- a/src/gui/kernel/qplatformintegration.cpp +++ b/src/gui/kernel/qplatformintegration.cpp @@ -529,6 +529,20 @@ void QPlatformIntegration::beep() const { } +/*! + \since 6.0 + + Asks the platform to terminate the application. + + Overrides should ensure there's a callback into the QWSI + function handleApplicationTermination so that the quit can + be propagated to QtGui and the application. +*/ +void QPlatformIntegration::quit() const +{ + QWindowSystemInterface::handleApplicationTermination<QWindowSystemInterface::SynchronousDelivery>(); +} + #ifndef QT_NO_OPENGL /*! Platform integration function for querying the OpenGL implementation type. diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h index 638d373c3c..5083542e12 100644 --- a/src/gui/kernel/qplatformintegration.h +++ b/src/gui/kernel/qplatformintegration.h @@ -220,6 +220,7 @@ public: virtual void setApplicationIcon(const QIcon &icon) const; virtual void beep() const; + virtual void quit() const; #if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC) virtual QPlatformVulkanInstance *createPlatformVulkanInstance(QVulkanInstance *instance) const; |