ksmserver: multiple sessions / checkpoints
Matthias Ettrich
ettrich at trolltech.com
Tue Apr 30 19:16:54 BST 2002
Hi,
Finally I came around doing some work on kapplication and ksmserver to support
both multiple sessions and checkpoints.
I haven't yet done anything to the GUI, because I believe this needs to be
done very carefully (meaning as little intrusive and confusing as possible).
Note that the renaming of sessions will not work properly for applications
using older Qt or KDE libraries. Futhermore Qt 3.0.x applications not using
KDE will have the same problem (for compatibility reasons I did the fix only
for the upcoming 3.1 as it introduced a new symbol). The problem is that
those application store their session data only tagged with the sessionId,
not tagged per saveYourself (we call that a sessionKey). This could and can
result in all sorts of confusing effects: Broken session data when a shutdown
was cancelled, missing session data when another session was discarded etc.
But those are problems of the past. Now everything is nice, beautiful and how
it should have been, at least once the bugs are out of my implementation :)
Kudos go to Havoc Pennington, who figured out this missinterpretation (or
rather simplification) of the XSMP specs in KDE.
Here's what's there yet:
ksmserver's default dcop interface looks like (only the new functions):
$ dcop ksmserver default
QStringList sessionList()
QString currentSession()
void saveCurrentSession()
void saveCurrentSessionAs(QString)
currentSession() typically returns "default". With
$ dcop ksmserver default saveCurrentSession
you can do a non-interactive checkpoint. This should probably be support
through the K menu.
With
$dcop ksmserver default saveCurrentSessionAs MyWorkSession
you do a checkpoint under the new name "MyWorkSession". If that was
successful, currentSession() will return "MyWorkSession" and sessionList()
will return { "default", "MyWorkSession" }
The session are stored in the ksmserverrc like this
[Session]
... // the default session, as before
[Session: MyWorkSession]
... // the work sessoin
Last but not least startkde now supports a command line argument: the session
name. It simply passes that on to ksmserver:
kwrapper ksmserver --restore "$1"
Now all we would need is to have some support in kdm to make not only "KDE"
(the default session) but also the other possible sessions available to the
user.
Having an extra GUI after kdm to select the session you want to restore is out
of the question in terms of usability, I think.
Enjoy,
Matthias
btw: Before somebody asks for it: switching session at runtime is not possible
for various reasons, the biggest problem being clients not participating in
the session and the different AutoStart phases during KDE's startup. But
since KDE 3 starts up as fast as it does, this isn't a problem, I hope. CDE
cannot do it either.
More information about the kde-core-devel
mailing list