parent
768c8b59a4
commit
918729072d
@ -0,0 +1,56 @@
|
|||||||
|
From c36189b575bef885aeb005f3f1c472ec8e48aacf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stefan Becker <chemobejk@gmail.com>
|
||||||
|
Date: Sat, 9 May 2015 17:17:25 +0300
|
||||||
|
Subject: [PATCH] Add session management for KMainWindow
|
||||||
|
|
||||||
|
- replace the KConfig object in KConfigGui with a new one using the
|
||||||
|
session id and key from the QSessionManager object
|
||||||
|
- make sure that the data is stored after the application has update it
|
||||||
|
- if the KConfig object is represented by a local file then add a
|
||||||
|
discard command to the session manager object
|
||||||
|
|
||||||
|
BUG: 346768
|
||||||
|
REVIEW: 123706
|
||||||
|
---
|
||||||
|
src/kmainwindow.cpp | 17 ++++++++++++++++-
|
||||||
|
1 file changed, 16 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/kmainwindow.cpp b/src/kmainwindow.cpp
|
||||||
|
index 15eecb7..7c86841 100644
|
||||||
|
--- a/src/kmainwindow.cpp
|
||||||
|
+++ b/src/kmainwindow.cpp
|
||||||
|
@@ -127,8 +127,10 @@ KMWSessionManager::~KMWSessionManager()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
-bool KMWSessionManager::saveState(QSessionManager &)
|
||||||
|
+bool KMWSessionManager::saveState(QSessionManager &sm)
|
||||||
|
{
|
||||||
|
+ KConfigGui::setSessionConfig(sm.sessionId(), sm.sessionKey());
|
||||||
|
+
|
||||||
|
KConfig *config = KConfigGui::sessionConfig();
|
||||||
|
if (KMainWindow::memberList().count()) {
|
||||||
|
// According to Jochen Wilhelmy <digisnap@cs.tu-berlin.de>, this
|
||||||
|
@@ -144,6 +146,19 @@ bool KMWSessionManager::saveState(QSessionManager &)
|
||||||
|
|
||||||
|
KConfigGroup group(config, "Number");
|
||||||
|
group.writeEntry("NumberOfWindows", n);
|
||||||
|
+
|
||||||
|
+ // store new status to disk
|
||||||
|
+ config->sync();
|
||||||
|
+
|
||||||
|
+ // generate discard command for new file
|
||||||
|
+ QString localFilePath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + config->name();
|
||||||
|
+ if (QFile::exists(localFilePath)) {
|
||||||
|
+ QStringList discard;
|
||||||
|
+ discard << QLatin1String("rm");
|
||||||
|
+ discard << localFilePath;
|
||||||
|
+ sm.setDiscardCommand(discard);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.4.0
|
||||||
|
|
@ -1,76 +0,0 @@
|
|||||||
From bf8b2f52392c97bc6acf1a5b5aedb735b9380655 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stefan Becker <chemobejk@gmail.com>
|
|
||||||
Date: Sat, 9 May 2015 17:17:25 +0300
|
|
||||||
Subject: [PATCH] Forward QSessionManager to KConfigGui
|
|
||||||
|
|
||||||
Get a KConfig object that corresponds to the QSessionManager object that
|
|
||||||
is passed in with the saveStateRequest signal.
|
|
||||||
|
|
||||||
To make sure that the data is stored to disk we have to call sync() on
|
|
||||||
the object after the application has updated it. As the session manager
|
|
||||||
always emits a saveStateRequest after starting the application we need
|
|
||||||
to skip the sync() for the first request.
|
|
||||||
|
|
||||||
BUG: 346768
|
|
||||||
---
|
|
||||||
src/kmainwindow.cpp | 14 ++++++++++++--
|
|
||||||
src/kmainwindow_p.h | 3 +++
|
|
||||||
2 files changed, 15 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/kmainwindow.cpp b/src/kmainwindow.cpp
|
|
||||||
index 15eecb7..95b01fd 100644
|
|
||||||
--- a/src/kmainwindow.cpp
|
|
||||||
+++ b/src/kmainwindow.cpp
|
|
||||||
@@ -119,6 +119,7 @@ bool DockResizeListener::eventFilter(QObject *watched, QEvent *event)
|
|
||||||
|
|
||||||
KMWSessionManager::KMWSessionManager()
|
|
||||||
{
|
|
||||||
+ initial = true;
|
|
||||||
connect(qApp, SIGNAL(saveStateRequest(QSessionManager&)),
|
|
||||||
this, SLOT(saveState(QSessionManager&)));
|
|
||||||
}
|
|
||||||
@@ -127,9 +128,10 @@ KMWSessionManager::~KMWSessionManager()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
-bool KMWSessionManager::saveState(QSessionManager &)
|
|
||||||
+bool KMWSessionManager::saveState(QSessionManager &sm)
|
|
||||||
{
|
|
||||||
- KConfig *config = KConfigGui::sessionConfig();
|
|
||||||
+ KConfig *config = KConfigGui::sessionConfig(sm);
|
|
||||||
+
|
|
||||||
if (KMainWindow::memberList().count()) {
|
|
||||||
// According to Jochen Wilhelmy <digisnap@cs.tu-berlin.de>, this
|
|
||||||
// hook is useful for better document orientation
|
|
||||||
@@ -144,6 +146,14 @@ bool KMWSessionManager::saveState(QSessionManager &)
|
|
||||||
|
|
||||||
KConfigGroup group(config, "Number");
|
|
||||||
group.writeEntry("NumberOfWindows", n);
|
|
||||||
+
|
|
||||||
+ // The session manager emits a saveStateRequest after application start.
|
|
||||||
+ // Skip storing data collected from this initial request.
|
|
||||||
+ if (!initial) {
|
|
||||||
+ config->sync();
|
|
||||||
+ }
|
|
||||||
+ initial = false;
|
|
||||||
+
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/kmainwindow_p.h b/src/kmainwindow_p.h
|
|
||||||
index 8204ce1..2c90bf4 100644
|
|
||||||
--- a/src/kmainwindow_p.h
|
|
||||||
+++ b/src/kmainwindow_p.h
|
|
||||||
@@ -80,6 +80,9 @@ public:
|
|
||||||
KMWSessionManager();
|
|
||||||
~KMWSessionManager();
|
|
||||||
|
|
||||||
+private:
|
|
||||||
+ bool initial;
|
|
||||||
+
|
|
||||||
private Q_SLOTS:
|
|
||||||
bool saveState(QSessionManager &);
|
|
||||||
};
|
|
||||||
--
|
|
||||||
2.4.0
|
|
||||||
|
|
Loading…
Reference in new issue