rdieter pushed to kf5-kconfig (master). "pull in reviewed/upstreamed session management fixes (kde#346768)"

notifications at fedoraproject.org notifications at fedoraproject.org
Mon May 11 20:43:06 UTC 2015


From 74751fdfc3b43dbb2a8aa3dc94b462e994324885 Mon Sep 17 00:00:00 2001
From: Rex Dieter <rdieter at math.unl.edu>
Date: Mon, 11 May 2015 15:43:00 -0500
Subject: pull in reviewed/upstreamed session management fixes (kde#346768)


diff --git a/0001-Add-KConfigGui-setSessionConfig.patch b/0001-Add-KConfigGui-setSessionConfig.patch
new file mode 100644
index 0000000..7389d06
--- /dev/null
+++ b/0001-Add-KConfigGui-setSessionConfig.patch
@@ -0,0 +1,127 @@
+From ceb84f777b217c4a25c0e2356ddab372fae6f562 Mon Sep 17 00:00:00 2001
+From: Stefan Becker <chemobejk at 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
+
diff --git a/Add-2nd-variant-for-KConfigGui_sessionConfig.patch b/Add-2nd-variant-for-KConfigGui_sessionConfig.patch
deleted file mode 100644
index bce4ea8..0000000
--- a/Add-2nd-variant-for-KConfigGui_sessionConfig.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From 62f448faf202a5a174f0e0bb3d3a80f3109d234f Mon Sep 17 00:00:00 2001
-From: Stefan Becker <chemobejk at 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
-
diff --git a/kf5-kconfig.spec b/kf5-kconfig.spec
index b0364d6..c8dbe75 100644
--- a/kf5-kconfig.spec
+++ b/kf5-kconfig.spec
@@ -2,7 +2,7 @@
 
 Name:           kf5-%{framework}
 Version:        5.10.0
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        KDE Frameworks 5 Tier 1 addon with advanced configuration system
 
 License:        GPLv2+ and LGPLv2+ and MIT
@@ -17,9 +17,8 @@ URL:            http://www.kde.org
 %endif
 Source0:        http://download.kde.org/%{stable}/frameworks/%{versiondir}/%{framework}-%{version}.tar.xz
 
-## upstreamable patches
-# Candidate session management fixes
-# https://bugs.kde.org/show_bug.cgi?id=346768
+## upstream patches
+Patch1: 0001-Add-KConfigGui-setSessionConfig.patch
 
 BuildRequires:  kf5-rpm-macros
 BuildRequires:  extra-cmake-modules
@@ -113,6 +112,9 @@ make install/fast DESTDIR=%{buildroot} -C %{_target_platform}
 
 
 %changelog
+* Mon May 11 2015 Rex Dieter <rdieter at fedoraproject.org> 5.10.0-2
+- pull in reviewed/upstreamed session management fixes (kde#346768)
+
 * Mon May 11 2015 Daniel Vrátil <dvratil at redhat.com> - 5.10.0-1
 - KDE Frameworks 5.10.0
 
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/kf5-kconfig.git/commit/?h=master&id=74751fdfc3b43dbb2a8aa3dc94b462e994324885


More information about the scm-commits mailing list