Weston : ideas about xdg_sell, and implementation for a taskbar
Manuel Bachmann
manuel.bachmann at open.eurogiciel.org
Thu Jan 30 08:15:39 PST 2014
Hi folks,
Where I work, we need to have some logic to manage surfaces from a client
point of view (application or toolkit). For example, we need to be able to :
- minimize (hide/show or more) surfaces, just like most desktop
environments allow ;
- manage layers, by arranging surfaces by z-orders e.g. ;
- ...
Having searched a bit, and because the core Wayland protocol does not
provide this, it seems that the xdg_shell protocol would be the way to go.
I just looked in the current Weston codebase, and found there are already
stubbed implementations for xdg_shell_set_minimize() e.g.. I plan to write
a minimal implementation adding the call handling to shell.c, and a new
taskbar.c plugin eventually receiving calls.
-----
As a proof-of-concept, I just wrote a patch for weston 1.3.x that
implements all the logic needed for a graphical taskbar, and manages
minimization/raise events for surfaces.
Here's the patched version, which basically modifies shell, desktop_shell
and toytoolkit :
https://github.com/Tarnyko/weston-taskbar
Here are some screenshots :
http://www.tarnyko.net/repo/weston131-taskbar1.png
http://www.tarnyko.net/repo/weston131-taskbar2.png
And for the lazy ;-) , here is a video :
http://www.youtube.com/watch?v=7Svrb3iGBAs
-----
Here's how it works :
- When the compositor creates a shell_surface having the TOPLEVEL type,
it sets a numeral ID for it, and sends a "map" event to the desktop_shell
client ;
- the desktop_shell client receives the event, and then creates a
button on the taskbar associated with this ID. If the surface has a title
(typically set client-side with wl_shell_surface_set_title()), the button
will display it ; otherwise it will just contain "Default:<ID>".
- when the button is clicked, and the window is shown, it asks the
compositor
to hide it... or asks the contrary in the other case ;-) ;
- if it should be hidden, then the compositor sends the shell_surface to a
new
weston_layer named "taskbar_layer". This layer is not displayed at all. If
it
shouldn't, then it's moved back to the current workspace layer.
- lots of weston clients use the toytoolkit library ("weston-terminal"
e.g.).
When their "minimize" button is pressed, they now call a
taskbar_move_surface()
function which will do the former, and additionally send a hint to the
desktop_shell
that this has been done (so the corresponding taskbar button stays tuned).
---
As lots of code changed in 1.4, and xdg_shell interface is now implemented,
I will try to port it to git master along with xdg_shell additions.
Comments on this subject are very welcome !
PS : I will be at FOSDEM this w-e (
https://fosdem.org/2014/schedule/event/porting_legacy_x11_to_wayland/) if
anyone wants to discuss the subject with me.
--
Regards,
*Manuel BACHMANN Tizen Project VANNES-FR*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140130/b8e741d9/attachment.html>
More information about the wayland-devel
mailing list