Review Request: activity sessions in ksmserver and kwin

Chani Armitage chanika at gmail.com
Mon Oct 18 14:20:20 CEST 2010


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://svn.reviewboard.kde.org/r/5638/
-----------------------------------------------------------

(Updated 2010-10-18 12:20:20.183265)


Review request for kwin, Plasma and Lubos Lunak.


Changes
-------

forgot about legacy sessions (what are they?)


Summary (updated)
-------

so, this is the activity session code.
it's not 100% complete, because kwin has to fake a few things until the activities service gets its new api - but ivan's working on that. :) there won't be any UI for it until that api's in anyways.

kwin handles the mapping from activity id -> windows -> session ids, because I had to call it anyways, and it's much easier to calculate from inside kwin.

The good:
it can save and restore processes and their windows' activity associations
all the regular xsmp stuff seems to be working, except cancel.
I've done it by merely adding a few dbus methods, no changes to xsmp itself
ksmserver doesn't know or care what activities are; even the kwin code is separated out into "find the clients for this activity" and "save a session for these clients"

The bad:
since ksmserver doesn't tell the wm or clients that anything special is happening, it can't tell kwin "save the subsession data", or tell clients "close only window foo". for kwin this is actually a nice excuse to have it do the mapping work, but for clients it means we can't close anything until we're ready to close everything. Clients would have to be made context-aware either way to react to such a request; for 4.7 I might see if I can do it by extending xsmp or augmenting it with more dbus (instead of having the client do all the work after the session's closed, as I originally planned).

kwrite's cancel button doesn't cancel the session-close. it works on logout, so there must be a bug in my code.

session data isn't deleted when an activity is deleted (I forgot). I'd like to get this patch in ASAP though, and add simple details like that later - the patch is already quite big enough ;)

there's some "legacy" session code, I haven't read it all and I haven't implemented support for it yet. are there any apps using it? does it matter? what *is* this legacy session thing?

The ugly:
there are some sync issues in here.
first of all, we have a conflict between save-on-close and save-regularly. all xsmp stuff is save-on-close, whereas the activity service and plasma (and other modern apps) save quite often. If you open an activity and then X crashes, you've lost all session data for that activity. :(

I'm planning to try fixing that by saving (but not quitting) the login session when an activity is opened/closed. I'm not sure how well it'd work, but it should at least keep the correct list of processes to start.

the second sync issue comes from the fact that a window can be open on a closed activity. I'll probably prevent the user from adding a window to a closed activity, but windows that are already shared across activities... well, they could behave in unexpected ways. I think I'd like to do more tests before deciding how to handle that - but one thing that could help, perhaps, is storing the kwin session info in one big pool for all closed activities instead of a separate group for each activity.


Diffs
-----

  trunk/KDE/kdebase/workspace/ksmserver/server.h 1186160 
  trunk/KDE/kdebase/workspace/ksmserver/legacy.cpp 1186160 
  trunk/KDE/kdebase/workspace/ksmserver/org.kde.KSMServerInterface.xml 1186160 
  trunk/KDE/kdebase/workspace/ksmserver/server.cpp 1186160 
  trunk/KDE/kdebase/workspace/ksmserver/shutdown.cpp 1186160 
  trunk/KDE/kdebase/workspace/ksmserver/startup.cpp 1186160 
  trunk/KDE/kdebase/workspace/kwin/org.kde.KWin.xml 1186160 
  trunk/KDE/kdebase/workspace/kwin/sm.cpp 1186160 
  trunk/KDE/kdebase/workspace/kwin/workspace.h 1186160 

Diff: http://svn.reviewboard.kde.org/r/5638/diff


Testing
-------

I can use dbus to save/restore an activity, like I showed in my screencast ( http://chani.wordpress.com/2010/10/04/activities-fun-with-screencast ). I haven't done much testing of multi-window processes, though, or saving and restoring multiple activities.


Thanks,

Chani

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/plasma-devel/attachments/20101018/80cc8ca1/attachment.htm 


More information about the Plasma-devel mailing list