author | Antonio Rojas
<arojas@archlinux.org> 2015-05-16 07:38:58 UTC |
committer | Antonio Rojas
<arojas@archlinux.org> 2015-05-16 07:38:58 UTC |
parent | 9c50f136fd0452a86c06837ae1202723509ebfaf |
PKGBUILD | +9 | -3 |
session-restore.patch | +127 | -0 |
diff --git a/PKGBUILD b/PKGBUILD index cf6f1c8..31896d0 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -3,7 +3,7 @@ pkgname=kconfig pkgver=5.10.0 -pkgrel=1 +pkgrel=2 pkgdesc='Configuration system' arch=('i686' 'x86_64') url='https://projects.kde.org/projects/frameworks/kconfig' @@ -11,11 +11,17 @@ license=('LGPL') depends=('qt5-base') makedepends=('extra-cmake-modules' 'qt5-tools') groups=('kf5') -source=("http://download.kde.org/stable/frameworks/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz") -md5sums=('0c762fbe3b98fede3e8a7af3e18e71bb') +source=("http://download.kde.org/stable/frameworks/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz" +'session-restore.patch') +md5sums=('0c762fbe3b98fede3e8a7af3e18e71bb' + 'c10f5b9293bb2736d3f7f411005dd60a') prepare() { mkdir -p build + +# Fix session restore https://bugs.kde.org/show_bug.cgi?id=346768 + cd $pkgname-$pkgver + patch -p1 -i "$srcdir"/session-restore.patch } build() { diff --git a/session-restore.patch b/session-restore.patch new file mode 100644 index 0000000..532ba44 --- /dev/null +++ b/session-restore.patch @@ -0,0 +1,127 @@ +From 9978cfd5ccd18509dd514b3a7ada8c158c209de1 Mon Sep 17 00:00:00 2001 +From: Stefan Becker <chemobejk@gmail.com> +Date: Sat, 9 May 2015 17:16:27 +0300 +Subject: [PATCH 1/3] 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.1 +