multi-screen management
Chani
chanika at gmail.com
Wed Aug 18 08:42:40 CEST 2010
so... we had planned to have a little tool for managing the containments of
multiple screens, in 4.5 - but there wasn't time. multiscreen has
improvements, but also regressions - well, *a* regression - you can't access
the containment of a screen that's not plugged in. the same applies to the
per-desktop view stuff (they have a lot in common).
anyways, jpwhiting said he might be willing to implement such a tool, and
yesterday I was inspired (compelled?) and found myself writing about how such
a tool may look and act: http://community.kde.org/Plasma/Multiscreen
feedback would be very welcome. :) and since I know many of us hate clicking
links, here's the current text copy&pasted:
Plasma/Multiscreen
With the death of the ZUI, managing multiple screens (or per-desktop views)
becomes... a little trickier. A UI for managing the containments ("widget
groups" in user-speak?) is needed.
Contents
[hide]
1 Manager Tool
1.1 UI
1.2 Under the Hood
2 Inactive Screens
[edit]Manager Tool
[edit]UI
I have a few ideas here, and would like feedback.
The general concept I've got is a grid of containments, with screens left to
right and (if PVD was ever enabled) desktops going top to bottom. If panels
are to be managed here too, they could be along the edges of the cells. Only
the current activity's containments would be used (no hypercubes plskthx).
There would be a visible difference between the rectangle of active views and
the inactive 'outside' ones. Containments could be dragged to other cells
(causing a swap with the containment they're dropped on) and ones outside the
active area could be deleted. Desktop containments would not be draggable to
empty cells, because that could leave a view without a containment (panels, on
the other hand, might have less restrictions).
Usual case mockup http://chani.ca/images/screenmanager-bestcase.png
Bad case mockup (it could be worse...)
http://chani.ca/images/screenmanager-worstcase.png
The UI ought to be something a user only needs occasionally, but it should
still be easy to use.
I considered doing just screens or just desktops, and trying to follow the
geometry those are displayed in in other places (pager, krandr) but when you
consider there will likely be leftover containments from old screenns and
desktops that gets awkward.
On the other hand, if there are both panels and PVD, that's also awkward:
would users understand that even if panels only appeared and were draggable
within the first row, that they still show up on all desktops? perhaps panels
could have their own special row in that case..?
Another tricky issue: how to represent the containments? If someone can get
thumbnails of containments working properly I will give them lots of beer and
hugs. :) Im the meantime... well, a grid of identical icons isn't very useful.
there probably ought to be something thing-like for the dragging... I'm not
sure how much trouble the user will have remembering which containment they
left where. if fact, if they drag one icon to another identical icon, what is
there to tell them the two containments were swapped at all?
I think that, assuming there are no thumbnails, live previews will be
important. The user will end up dragging an inactive containment to their
current screen/desktop just to remind themselves what containment it was. If
they have to hit apply every time that could get rather tedious.
On the other hand, it might be good to keep in mind that the *normal* case is
for a user to have PDV off, disconnect their one external monitor, and then
want to go check on a widget it had - or swap its containment over to the
remaining screen if they don't like which one their driver thinks belongs
there.
The (hopefully) less common, icky case is someone who has multiple screens and
lots of desktops, then turned on PVD and wants to purge all the old
containments (even though they ideally would be mere config data, not actually
*running*).
Oh, and as for where to go to open this UI: well, it has to run in-process,
but it's not common enough to warrant a toolbox entry, so I had a crazy idea:
what if whatever kcm is relevant to this stuff (plasma settings + wherever the
PDV setting lives?) had a button that sent a dbus signal to plasma-desktop to
show the UI?
TODO: clean up the above rambling into a more structured document. :)
[edit]Under the Hood
The UI would have to talk to plasma-desktop's current Activity (you can get
them via DesktopCorona), to ensure that the containment swaps happen smoothly.
Also because one or both containments involved may not be running, once that
stuff's implemented, so swapContainment might not be doable at all :)
[edit]Inactive Screens
When a screen is disconnected (or in PDV, a desktop removed) the associated
containment and view (for each running activity) should be automatically
stopped - and resumed again when the screen/desktop returns. We can migrate
panels, but not desktops, and it doesn't make sense to leave something running
and inaccessible (having to manually stop it would also be Wrong).
* When implementing this, be careful to check how it interacts with stopping
and starting activities. it'd suck to lose containments.
* I don't like how I ended up with two authorities on where a containment
belongs: there's both the lastScreen/lastDesktop settings in the containment,
and the place that running containment has in plasma-desktop's Activity class.
that ought to be rethought.
* Might it be easier to leave the config in plasma-desktop-appletsrc, and have
the startup loading skip containments assigned to nonexistant
screens/desktops?
* Once this is implemented, I believe panels should behave the same way,
instead of migrating. It's more consistent that way. thoughts?
* It'd be nice to investigate whether any delay would be helpful - is it
likely for several screen changes to happen within a few seconds? either from
drivers being fidgety or from a loose cable or something? I don't know enough
to be sure.
More information about the Plasma-devel
mailing list