1
0
kdelibs4support/fix-session-saving.patch

113 lines
3.7 KiB
Diff

diff --git a/src/kdeui/kapplication.cpp b/src/kdeui/kapplication.cpp
index 6ffaf6e..dc73b12 100644
--- a/src/kdeui/kapplication.cpp
+++ b/src/kdeui/kapplication.cpp
@@ -472,6 +472,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
@@ -550,6 +556,8 @@ void KApplication::commitData(QSessionManager &sm)
d->session_save = true;
bool canceled = false;
+ sm.setAutoCloseWindowsEnabled(false);
+
foreach (KSessionManager *it, KSessionManager::sessionClients()) {
if ((canceled = !it->commitData(sm))) {
break;
@@ -577,11 +585,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 +607,10 @@ void KApplication::commitData(QSessionManager &sm)
} else {
sm.setRestartHint(QSessionManager::RestartIfRunning);
}
+
+ if (canceled) {
+ sm.cancel();
+ }
d->session_save = false;
}
@@ -638,6 +652,7 @@ static void checkRestartVersion(QSessionManager &sm)
void KApplication::saveState(QSessionManager &sm)
{
d->session_save = true;
+ sm.setAutoCloseWindowsEnabled(false);
#ifdef __GNUC__
#warning TODO: QSessionManager::handle() is gone in Qt5!
#endif
@@ -988,4 +1003,3 @@ void KApplicationPrivate::_k_slot_KToolInvocation_hook(QStringList &envs, QByteA
}
#include "moc_kapplication.cpp"
-
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();