parent
69eb4e966b
commit
74751fdfc3
@ -0,0 +1,127 @@
|
|||||||
|
From ceb84f777b217c4a25c0e2356ddab372fae6f562 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stefan Becker <chemobejk@gmail.com>
|
||||||
|
Date: Sat, 9 May 2015 17:16:27 +0300
|
||||||
|
Subject: [PATCH] Add KConfigGui::setSessionConfig()
|
||||||
|
|
||||||
|
When the application receives a saveState signal it needs to replace the
|
||||||
|
current KConfig object with a new one based on the QSessionManager
|
||||||
|
information. Add a new interface that accepts the new session id and key.
|
||||||
|
|
||||||
|
BUG: 346768
|
||||||
|
REVIEW: 123705
|
||||||
|
---
|
||||||
|
src/gui/kconfiggui.cpp | 41 ++++++++++++++++++++++++++++++++---------
|
||||||
|
src/gui/kconfiggui.h | 17 +++++++++++++++--
|
||||||
|
2 files changed, 47 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/gui/kconfiggui.cpp b/src/gui/kconfiggui.cpp
|
||||||
|
index 0048c60..67b6009 100644
|
||||||
|
--- a/src/gui/kconfiggui.cpp
|
||||||
|
+++ b/src/gui/kconfiggui.cpp
|
||||||
|
@@ -25,28 +25,51 @@
|
||||||
|
|
||||||
|
#include <kconfig.h>
|
||||||
|
|
||||||
|
+static QString configName(const QString &id, const QString &key)
|
||||||
|
+{
|
||||||
|
+ return(QLatin1String("session/") + QGuiApplication::applicationName() +
|
||||||
|
+ QLatin1Char('_') + id +
|
||||||
|
+ QLatin1Char('_') + key);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static KConfig *s_sessionConfig = Q_NULLPTR;
|
||||||
|
|
||||||
|
KConfig *KConfigGui::sessionConfig()
|
||||||
|
{
|
||||||
|
- if (!s_sessionConfig) { // create an instance specific config object
|
||||||
|
- s_sessionConfig = new KConfig(sessionConfigName(), KConfig::SimpleConfig);
|
||||||
|
+#ifdef QT_NO_SESSIONMANAGER
|
||||||
|
+#error QT_NO_SESSIONMANAGER was set, this will not compile. Reconfigure Qt with Session management support.
|
||||||
|
+#endif
|
||||||
|
+ if (!hasSessionConfig()) {
|
||||||
|
+ // create the default instance specific config object
|
||||||
|
+ // from applications' -session command line parameter
|
||||||
|
+ s_sessionConfig = new KConfig(configName(qApp->sessionId(),
|
||||||
|
+ qApp->sessionKey()),
|
||||||
|
+ KConfig::SimpleConfig);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
return s_sessionConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
+void KConfigGui::setSessionConfig(const QString &id, const QString &key)
|
||||||
|
+{
|
||||||
|
+ if (hasSessionConfig()) {
|
||||||
|
+ delete s_sessionConfig;
|
||||||
|
+ s_sessionConfig = Q_NULLPTR;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // create a new instance specific config object from supplied id & key
|
||||||
|
+ s_sessionConfig = new KConfig(configName(id, key),
|
||||||
|
+ KConfig::SimpleConfig);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
bool KConfigGui::hasSessionConfig()
|
||||||
|
{
|
||||||
|
return s_sessionConfig != Q_NULLPTR;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef KDE_NO_DEPRECATED
|
||||||
|
QString KConfigGui::sessionConfigName()
|
||||||
|
{
|
||||||
|
-#ifdef QT_NO_SESSIONMANAGER
|
||||||
|
-#error QT_NO_SESSIONMANAGER was set, this will not compile. Reconfigure Qt with Session management support.
|
||||||
|
-#endif
|
||||||
|
- const QString sessionKey = qApp->sessionKey();
|
||||||
|
- const QString sessionId = qApp->sessionId();
|
||||||
|
- return QString(QLatin1String("session/%1_%2_%3")).arg(QGuiApplication::applicationName()).arg(sessionId).arg(sessionKey);
|
||||||
|
+ return sessionConfig()->name();
|
||||||
|
}
|
||||||
|
-
|
||||||
|
+#endif
|
||||||
|
diff --git a/src/gui/kconfiggui.h b/src/gui/kconfiggui.h
|
||||||
|
index 173400f..fe1f820 100644
|
||||||
|
--- a/src/gui/kconfiggui.h
|
||||||
|
+++ b/src/gui/kconfiggui.h
|
||||||
|
@@ -31,7 +31,7 @@ class KConfig;
|
||||||
|
namespace KConfigGui
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
- * Returns the application session config object.
|
||||||
|
+ * Returns the current application session config object.
|
||||||
|
*
|
||||||
|
* @return A pointer to the application's instance specific
|
||||||
|
* KConfig object.
|
||||||
|
@@ -40,6 +40,16 @@ namespace KConfigGui
|
||||||
|
KCONFIGGUI_EXPORT KConfig *sessionConfig();
|
||||||
|
|
||||||
|
/**
|
||||||
|
+ * Replaces the current application session config object.
|
||||||
|
+ *
|
||||||
|
+ * @param id new session id
|
||||||
|
+ * @param key new session key
|
||||||
|
+ *
|
||||||
|
+ * @since 5.11
|
||||||
|
+ */
|
||||||
|
+KCONFIGGUI_EXPORT void setSessionConfig(const QString &id, const QString &key);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
* Indicates if a session config has been created for that application
|
||||||
|
* (ie. if sessionConfig() got called at least once)
|
||||||
|
*
|
||||||
|
@@ -51,8 +61,11 @@ KCONFIGGUI_EXPORT bool hasSessionConfig();
|
||||||
|
* Returns the name of the application session
|
||||||
|
*
|
||||||
|
* @return the application session name
|
||||||
|
+ * @deprecated since 5.11, use sessionConfig()->name()
|
||||||
|
*/
|
||||||
|
-KCONFIGGUI_EXPORT QString sessionConfigName();
|
||||||
|
+#ifndef KDE_NO_DEPRECATED
|
||||||
|
+KCONFIGGUI_DEPRECATED QString sessionConfigName();
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // KCONFIGGUI_H
|
||||||
|
--
|
||||||
|
2.4.0
|
||||||
|
|
@ -1,128 +0,0 @@
|
|||||||
From 62f448faf202a5a174f0e0bb3d3a80f3109d234f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stefan Becker <chemobejk@gmail.com>
|
|
||||||
Date: Sat, 9 May 2015 17:16:27 +0300
|
|
||||||
Subject: [PATCH] Add 2nd variant for KConfigGui::sessionConfig()
|
|
||||||
|
|
||||||
When application receives a saveState signal it needs to get a KConfig
|
|
||||||
object based on the QSessionManager information. Add a new variant that
|
|
||||||
accepts the session manager object.
|
|
||||||
|
|
||||||
BUG: 346768
|
|
||||||
---
|
|
||||||
src/gui/kconfiggui.cpp | 48 ++++++++++++++++++++++++++++++++++++++----------
|
|
||||||
src/gui/kconfiggui.h | 14 +++++++++++++-
|
|
||||||
2 files changed, 51 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/gui/kconfiggui.cpp b/src/gui/kconfiggui.cpp
|
|
||||||
index 0048c60..e1dcd09 100644
|
|
||||||
--- a/src/gui/kconfiggui.cpp
|
|
||||||
+++ b/src/gui/kconfiggui.cpp
|
|
||||||
@@ -22,19 +22,52 @@
|
|
||||||
#include "kconfiggui.h"
|
|
||||||
|
|
||||||
#include <QGuiApplication>
|
|
||||||
+#include <QSessionManager>
|
|
||||||
|
|
||||||
#include <kconfig.h>
|
|
||||||
|
|
||||||
+#define SESSION_TEMPLATE(id, key) \
|
|
||||||
+ QLatin1String("session/") + QGuiApplication::applicationName() + \
|
|
||||||
+ QLatin1Char('_') + (id) + \
|
|
||||||
+ QLatin1Char('_') + (key)
|
|
||||||
+
|
|
||||||
static KConfig *s_sessionConfig = Q_NULLPTR;
|
|
||||||
|
|
||||||
-KConfig *KConfigGui::sessionConfig()
|
|
||||||
+static void ensureSessionConfig(void)
|
|
||||||
{
|
|
||||||
- if (!s_sessionConfig) { // create an instance specific config object
|
|
||||||
- s_sessionConfig = new KConfig(sessionConfigName(), KConfig::SimpleConfig);
|
|
||||||
+#ifdef QT_NO_SESSIONMANAGER
|
|
||||||
+#error QT_NO_SESSIONMANAGER was set, this will not compile. Reconfigure Qt with Session management support.
|
|
||||||
+#endif
|
|
||||||
+ if (s_sessionConfig == Q_NULLPTR) {
|
|
||||||
+ // create an instance specific config object
|
|
||||||
+ s_sessionConfig = new KConfig(SESSION_TEMPLATE(qApp->sessionId(),
|
|
||||||
+ qApp->sessionKey()),
|
|
||||||
+ KConfig::SimpleConfig);
|
|
||||||
}
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+KConfig *KConfigGui::sessionConfig()
|
|
||||||
+{
|
|
||||||
+ ensureSessionConfig();
|
|
||||||
return s_sessionConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
+KConfig *KConfigGui::sessionConfig(const QSessionManager &sm)
|
|
||||||
+{
|
|
||||||
+ if (hasSessionConfig()) {
|
|
||||||
+ // delete old config object without storing it to disk
|
|
||||||
+ s_sessionConfig->markAsClean();
|
|
||||||
+ delete s_sessionConfig;
|
|
||||||
+ s_sessionConfig = Q_NULLPTR;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // create a new instance specific config object
|
|
||||||
+ s_sessionConfig = new KConfig(SESSION_TEMPLATE(sm.sessionId(),
|
|
||||||
+ sm.sessionKey()),
|
|
||||||
+ KConfig::SimpleConfig);
|
|
||||||
+ return(s_sessionConfig);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
bool KConfigGui::hasSessionConfig()
|
|
||||||
{
|
|
||||||
return s_sessionConfig != Q_NULLPTR;
|
|
||||||
@@ -42,11 +75,6 @@ bool KConfigGui::hasSessionConfig()
|
|
||||||
|
|
||||||
QString KConfigGui::sessionConfigName()
|
|
||||||
{
|
|
||||||
-#ifdef QT_NO_SESSIONMANAGER
|
|
||||||
-#error QT_NO_SESSIONMANAGER was set, this will not compile. Reconfigure Qt with Session management support.
|
|
||||||
-#endif
|
|
||||||
- const QString sessionKey = qApp->sessionKey();
|
|
||||||
- const QString sessionId = qApp->sessionId();
|
|
||||||
- return QString(QLatin1String("session/%1_%2_%3")).arg(QGuiApplication::applicationName()).arg(sessionId).arg(sessionKey);
|
|
||||||
+ ensureSessionConfig();
|
|
||||||
+ return s_sessionConfig->name();
|
|
||||||
}
|
|
||||||
-
|
|
||||||
diff --git a/src/gui/kconfiggui.h b/src/gui/kconfiggui.h
|
|
||||||
index 173400f..10083b2 100644
|
|
||||||
--- a/src/gui/kconfiggui.h
|
|
||||||
+++ b/src/gui/kconfiggui.h
|
|
||||||
@@ -27,11 +27,12 @@
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
class KConfig;
|
|
||||||
+class QSessionManager;
|
|
||||||
|
|
||||||
namespace KConfigGui
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
- * Returns the application session config object.
|
|
||||||
+ * Returns the current application session config object.
|
|
||||||
*
|
|
||||||
* @return A pointer to the application's instance specific
|
|
||||||
* KConfig object.
|
|
||||||
@@ -40,6 +41,17 @@ namespace KConfigGui
|
|
||||||
KCONFIGGUI_EXPORT KConfig *sessionConfig();
|
|
||||||
|
|
||||||
/**
|
|
||||||
+ * Updates application session config object.
|
|
||||||
+ *
|
|
||||||
+ * @param sm session manager object
|
|
||||||
+ *
|
|
||||||
+ * @return A pointer to the application's instance specific
|
|
||||||
+ * KConfig object.
|
|
||||||
+ * @see KConfig
|
|
||||||
+ */
|
|
||||||
+KCONFIGGUI_EXPORT KConfig *sessionConfig(const QSessionManager &sm);
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
* Indicates if a session config has been created for that application
|
|
||||||
* (ie. if sessionConfig() got called at least once)
|
|
||||||
*
|
|
||||||
--
|
|
||||||
2.4.0
|
|
||||||
|
|
Loading…
Reference in new issue