diff options
| -rw-r--r-- | src/gui/kconfiggui.cpp | 41 | ||||
| -rw-r--r-- | 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 0048c60a..67b6009a 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 173400fd..fe1f8200 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 | 
