From 32dbecf2c6bbcbd0f0eff29a0a145506aeae362b Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 9 Dec 2022 10:19:13 +0200 Subject: [PATCH] kdeui: disable auto-restart when the application is about to quit Signed-off-by: Ivailo Monev --- kdeui/kernel/kapplication.cpp | 16 ++++++++++++---- kdeui/kernel/kapplication.h | 3 ++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/kdeui/kernel/kapplication.cpp b/kdeui/kernel/kapplication.cpp index fe9cadb9..8adb8384 100644 --- a/kdeui/kernel/kapplication.cpp +++ b/kdeui/kernel/kapplication.cpp @@ -150,7 +150,8 @@ public: void _k_x11FilterDestroyed(); void _k_checkAppStartedSlot(); - void _k_slot_KToolInvocation_hook(QStringList&, QByteArray&); + void _k_KToolInvocation_hook(QStringList&, QByteArray&); + void _k_disableAutorestartSlot(); QString sessionConfigName() const; void init(); @@ -455,9 +456,11 @@ void KApplicationPrivate::init() KCheckAccelerators::initiateIfNeeded(q); q->connect(KToolInvocation::self(), SIGNAL(kapplication_hook(QStringList&,QByteArray&)), - q, SLOT(_k_slot_KToolInvocation_hook(QStringList&,QByteArray&))); + q, SLOT(_k_KToolInvocation_hook(QStringList&,QByteArray&))); } - + // too late to restart if the application is about to quit (e.g. if QApplication::quit() was + // called or SIGTERM was received) + q->connect(q, SIGNAL(aboutToQuit()), SLOT(_k_disableAutorestartSlot())); qRegisterMetaType(); qRegisterMetaType(); @@ -880,7 +883,7 @@ void KApplicationPrivate::read_app_startup_id() } // Hook called by KToolInvocation -void KApplicationPrivate::_k_slot_KToolInvocation_hook(QStringList& envs,QByteArray& startup_id) +void KApplicationPrivate::_k_KToolInvocation_hook(QStringList& envs,QByteArray& startup_id) { #ifdef Q_WS_X11 if (QX11Info::display()) { @@ -900,6 +903,11 @@ void KApplicationPrivate::_k_slot_KToolInvocation_hook(QStringList& envs,QByteAr #endif } +void KApplicationPrivate::_k_disableAutorestartSlot() +{ + KCrash::setFlags(KCrash::flags() & ~KCrash::AutoRestart); +} + void KApplication::setSynchronizeClipboard(bool synchronize) { KClipboardSynchronizer::self()->setSynchronizing(synchronize); diff --git a/kdeui/kernel/kapplication.h b/kdeui/kernel/kapplication.h index 8236e180..5175e0b8 100644 --- a/kdeui/kernel/kapplication.h +++ b/kdeui/kernel/kapplication.h @@ -336,7 +336,8 @@ private: Q_PRIVATE_SLOT(d, void _k_x11FilterDestroyed()) Q_PRIVATE_SLOT(d, void _k_checkAppStartedSlot()) - Q_PRIVATE_SLOT(d, void _k_slot_KToolInvocation_hook(QStringList&, QByteArray&)) + Q_PRIVATE_SLOT(d, void _k_KToolInvocation_hook(QStringList&, QByteArray&)) + Q_PRIVATE_SLOT(d, void _k_disableAutorestartSlot()) }; #endif