<div dir="ltr"><div>Hi folks,<br><br></div><div>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 :<br></div><div>- minimize (hide/show or more) surfaces, just like most desktop environments allow ;<br>
</div><div>- manage layers, by arranging surfaces by z-orders e.g. ;<br>- ...<br></div><div><br></div><div>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.<br>
<br></div><div>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.<br>
</div><div>-----<br></div><div>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.</div><div><br> Here's the patched version, which basically modifies shell, desktop_shell and toytoolkit :<br>
<a href="https://github.com/Tarnyko/weston-taskbar">https://github.com/Tarnyko/weston-taskbar</a></div><div><br> Here are some screenshots :<br><a href="http://www.tarnyko.net/repo/weston131-taskbar1.png">http://www.tarnyko.net/repo/weston131-taskbar1.png</a><br>
<a href="http://www.tarnyko.net/repo/weston131-taskbar2.png">http://www.tarnyko.net/repo/weston131-taskbar2.png</a></div><div><br> And for the lazy ;-) , here is a video :<br><a href="http://www.youtube.com/watch?v=7Svrb3iGBAs">http://www.youtube.com/watch?v=7Svrb3iGBAs</a></div>

<div>-----<br>Here's how it works :</div><div><br>- When the compositor creates a shell_surface having the TOPLEVEL type,<br>it sets a numeral ID for it, and sends a "map" event to the desktop_shell client ;</div>

<div><br>- the desktop_shell client receives the event, and then creates
 a<br>button on the taskbar associated with this ID. If the surface has a title<br>(typically set client-side with wl_shell_surface_set_title()), the button<br>will display it ; otherwise it will just contain "Default:<ID>".</div>

<div><br>- when the button is clicked, and the window is shown, it asks the compositor<br>to hide it... or asks the contrary in the other case ;-) ;<br><br></div><div>
- if it should be hidden, then the compositor sends the shell_surface to a new<br>weston_layer named "taskbar_layer". This layer is not displayed at all. If it<br>shouldn't, then it's moved back to the current workspace layer.</div>

<div><br>- lots of weston clients use the toytoolkit library ("weston-terminal" e.g.).<br>When their "minimize" button is pressed, they now call a taskbar_move_surface()<br>
function which will do the former, and additionally send a hint to the desktop_shell<br>that this has been done (so the corresponding taskbar button stays
 tuned).<br>---<br><br></div><div>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.<br></div><div>
<br></div><div>Comments on this subject are very welcome !<br></div><div><br></div>PS : I will be at FOSDEM this w-e (<a href="https://fosdem.org/2014/schedule/event/porting_legacy_x11_to_wayland/" target="_blank">https://fosdem.org/2014/schedule/event/porting_legacy_x11_to_wayland/</a>) if anyone wants to discuss the subject with me.<br clear="all">
<br>-- <br><div dir="ltr"><font>Regards,<br>
<br>
<i><b>Manuel BACHMANN</b><br>
Tizen Project<br>
VANNES-FR</i><br>
</font></div>
</div>