saving/restoring session in kded module
Andriy Rysin
arysin at gmail.com
Fri Apr 15 23:09:29 BST 2011
On 03/05/2011 11:32 AM, Andriy Rysin wrote:
> There seems to be plenty info on saving/restoring sessions for
> applications (i.e. the features in KApplication and KMainWindow
> classes) but I'd like to save/restore some information in KDED module
> (keyboard layouts to be exact) but only if restore session on login is
> set to true (I'd like not to introduce another option in keyboard kcm
> but rather reuse system-wide session handing option).
>
> So far the solution I've found is this:
> save/restore session in module dtor/ctor checking if in "ksmserverrc"
> the "loginMode" parameter is set to "restoreSavedSession".
> This is not very nice as I have to read some other module's config and
> compare some string values, though I could not find an exposed native
> or DBUS API from ksmserver. Also I noticed that at least two plasma
> applets in kde-workspace do exactly that.
So I've ended up doing something like the code below, but I was
wandering if we should do this at KDEDModule level, i.e.
KDEDModule::saveSession()
KDEDModule::restoreSession()
which would be overridden if necessary and called if session is to be
restored so that kded daemons can easily save/restore state, and
something like
KDEDModule::getSessionStoreDir()
to return base directory to store kded module session info so that
there's some standard location for this and modules don't have to invent
things.
Regards,
Andriy
bool LayoutMemoryPersister::save(const QString& moduleName)
{
KConfigGroup c(KSharedConfig::openConfig("ksmserverrc",
KConfig::NoGlobals), "General");
kDebug() << "loginMode:" << c.readEntry("loginMode");
QString loginMode = c.readEntry("loginMode");
if ( loginMode != "default" && loginMode != "restoreSavedSession" )
{ // we don't know how to restore saved session - only previous one
QString relPath = moduleName + "/keyboard/layout_memory.xml";
QFile file(KStandardDirs::locateLocal("data", relPath));
return saveToFile(file);
}
return false;
}
bool LayoutMemoryPersister::restore(const QString& moduleName)
{
KConfigGroup c(KSharedConfig::openConfig("ksmserverrc",
KConfig::NoGlobals), "General");
kDebug() << "loginMode:" << c.readEntry("loginMode");
QString loginMode = c.readEntry("loginMode");
if ( loginMode != "default" && loginMode != "restoreSavedSession" )
{ // we don't know how to restore saved session - only previous one
QString relPath = moduleName + "/keyboard/layout_memory.xml";
QFile file(KStandardDirs::locateLocal("data", relPath));
return restoreFromFile(file);
}
return false;
}
More information about the kde-core-devel
mailing list