forked from pool/kdelibs4support
124 lines
4.2 KiB
Diff
124 lines
4.2 KiB
Diff
From 58e49487aece3de19aae90bbb9b80cd5aab94d04 Mon Sep 17 00:00:00 2001
|
|
From: Andreas Hartmetz <ahartmetz@gmail.com>
|
|
Date: Fri, 19 Feb 2016 19:49:01 +0100
|
|
Subject: [PATCH 2/2] Fix session management for KApplication based
|
|
applications.
|
|
|
|
- Call QGuiApplication::setFallbackSessionManagementEnabled(false)
|
|
to prevent premature application exit
|
|
- Wire up the saveStateRequest() and commitDataRequest() signals
|
|
to the appropriate methods that had to be turned into slots first.
|
|
Those methods were never even called, they were not ported properly.
|
|
- Cancel logout when the user decides to do that. A comment in the
|
|
code was not sufficient to do that. (?!?!)
|
|
|
|
CCBUG: 354724
|
|
---
|
|
src/kdeui/kapplication.cpp | 17 ++++++++++++++++-
|
|
src/kdeui/kapplication.h | 29 +++++++++++++++--------------
|
|
2 files changed, 31 insertions(+), 15 deletions(-)
|
|
|
|
diff --git a/src/kdeui/kapplication.cpp b/src/kdeui/kapplication.cpp
|
|
index d78212a..54fd1de 100644
|
|
--- a/src/kdeui/kapplication.cpp
|
|
+++ b/src/kdeui/kapplication.cpp
|
|
@@ -380,6 +380,9 @@ void KApplicationPrivate::init(bool GUIenabled)
|
|
parseCommandLine();
|
|
|
|
QApplication::setDesktopSettingsAware(false);
|
|
+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
|
|
+ QGuiApplication::setFallbackSessionManagementEnabled(false);
|
|
+#endif
|
|
|
|
#if HAVE_X11
|
|
isX11 = (QGuiApplication::platformName() == QStringLiteral("xcb"));
|
|
@@ -472,6 +475,12 @@ void KApplicationPrivate::init(bool GUIenabled)
|
|
q->connect(KToolInvocation::self(), SIGNAL(kapplication_hook(QStringList&,QByteArray&)),
|
|
q, SLOT(_k_slot_KToolInvocation_hook(QStringList&,QByteArray&)));
|
|
|
|
+ q->connect(q, SIGNAL(commitDataRequest(QSessionManager&)),
|
|
+ q, SLOT(commitData(QSessionManager&)));
|
|
+ q->connect(q, SIGNAL(saveStateRequest(QSessionManager&)),
|
|
+ q, SLOT(saveState(QSessionManager&)));
|
|
+
|
|
+
|
|
#ifdef Q_OS_MAC
|
|
// This is a QSystemTrayIcon instead of K* because we can't be sure q is a QWidget
|
|
QSystemTrayIcon *trayIcon; //krazy:exclude=qclasses
|
|
@@ -577,11 +586,13 @@ void KApplication::commitData(QSessionManager &sm)
|
|
continue;
|
|
}
|
|
|
|
+ // leave KMainWindows alone because they are handled by KMWSessionManager
|
|
if (!w->isHidden() && !w->inherits("KMainWindow")) {
|
|
QCloseEvent e;
|
|
sendEvent(w, &e);
|
|
if (!e.isAccepted()) {
|
|
- break; //canceled
|
|
+ canceled = true;
|
|
+ break;
|
|
}
|
|
|
|
donelist.append(w);
|
|
@@ -597,6 +608,10 @@ void KApplication::commitData(QSessionManager &sm)
|
|
} else {
|
|
sm.setRestartHint(QSessionManager::RestartIfRunning);
|
|
}
|
|
+
|
|
+ if (canceled) {
|
|
+ sm.cancel();
|
|
+ }
|
|
d->session_save = false;
|
|
}
|
|
|
|
diff --git a/src/kdeui/kapplication.h b/src/kdeui/kapplication.h
|
|
index 2231084..c9b1cb6 100644
|
|
--- a/src/kdeui/kapplication.h
|
|
+++ b/src/kdeui/kapplication.h
|
|
@@ -155,20 +155,6 @@ public:
|
|
void enableSessionManagement();
|
|
|
|
/**
|
|
- * Reimplemented for internal purposes, mainly the highlevel
|
|
- * handling of session management with KSessionManager.
|
|
- * @internal
|
|
- */
|
|
- void commitData(QSessionManager &sm);
|
|
-
|
|
- /**
|
|
- * Reimplemented for internal purposes, mainly the highlevel
|
|
- * handling of session management with KSessionManager.
|
|
- * @internal
|
|
- */
|
|
- void saveState(QSessionManager &sm);
|
|
-
|
|
- /**
|
|
* @deprecated since 5.0, use QGuiApplication::isSavingSession()
|
|
*
|
|
* Returns true if the application is currently saving its session
|
|
@@ -359,6 +345,21 @@ public Q_SLOTS:
|
|
*/
|
|
Q_SCRIPTABLE void updateUserTimestamp(int time = 0);
|
|
|
|
+ /**
|
|
+ * Slot connected to QGuiApplication::commitDataRequest() to implement highlevel
|
|
+ * handling of session management with KSessionManager.
|
|
+ * @internal
|
|
+ */
|
|
+ void commitData(QSessionManager &sm);
|
|
+
|
|
+ /**
|
|
+ * Slot connected to QGuiApplication::saveStateRequest() to implement highlevel
|
|
+ * handling of session management with KSessionManager.
|
|
+ * @internal
|
|
+ */
|
|
+ void saveState(QSessionManager &sm);
|
|
+
|
|
+
|
|
// D-Bus Q_SLOTS:
|
|
Q_SCRIPTABLE void reparseConfiguration();
|
|
Q_SCRIPTABLE void quit();
|
|
--
|
|
2.6.2
|
|
|