You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kf5-kconfig/0001-Add-KConfigGui-setSess...

128 lines
4.0 KiB

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