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
wilder
Stefan Becker 11 years ago committed by Rex Dieter
parent a9d71364dc
commit 9978cfd5cc
  1. 41
      src/gui/kconfiggui.cpp
  2. 17
      src/gui/kconfiggui.h

@ -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

@ -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.
@ -39,6 +39,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

Loading…
Cancel
Save