Weston : ideas about xdg_sell, and implementation for a taskbar

Bill Spitzak spitzak at gmail.com
Tue Feb 11 12:26:30 PST 2014

sardemff7+wayland at sardemff7.net wrote:

>> I was suggesting that one method of minimizing multiple surfaces
>> would be for the client to arrange them all as children of one of
>> them and then minimize the parent. The primary purpose is so the
>> compositor/taskbar knows all those windows are "related", for
>> instance to produce on a single taskbar entry.
> All scenarii are supported. You can reparent or simply minimize everyone.

I was thinking the compositor would need the parent information. For 
instance if may show one taskbar entry per minimize request. But there 
may be other methods of doing this.

>> No, because if the client wants to redraw or raise or show or hide
>> any other surface as a side-effect of the minimize, these changes
>> will not be atomic with the minimize, resulting in unwanted
>> flickering of an intermediate display. There has to be a way for the
>> minimized window to not disappear until the client does some kind of
>> commit.
> The commit *is* the .set_minimized. You can raise, draw everything you
> want *then* send the .set_minimized request. It is the last step of the
> minimization process. In the scenario of multiple .set_minimized
> requests, the last one must be the “main” one (either the one requested
> by the compositor or the one triggered by client UI).

Okay this is an interesting method for making atomic minimization 
without having to send a parent tree to the compositor.

My main concern is that I think the parent tree is going to be needed 
anyway so I'm not sure this adds anything.

Also I am unsure how a client indicates which minimize is the "main" 
one, as the compositor can't tell if another minimize is coming. This is 
a problem even for compositor-generated minimizes as the client may want 
to respond to a minimize request in a dialog box by minimizing the 
entire application, not just the dialog box.

> I mean “unfocus”. There is no reason to treat the minimized with a
> special event. The client already reparented surfaces and raised
> everything relevant.

As long as the client is in charge of mimimizing itself (which it now 
sounds like you are proposing and is exactly what I was trying to 
propose originally) then this is ok.

In fact the client could even assume that it loses the focus so no 
unfocus event is needed (but it appears a Wayland design criteria is to 
ensure pairing of events so it should be sent, though IMHO this enforced 
pairing is a waste of time as no sane client will rely on it).

A surface without focus can be minimized, it's just that the client will 
be unable to tell if it worked.

It is true that a client may display incorrect graphics if the 
set_minimized is ignored. If it expects an unfocus it could detect this 
after a delay but even then the drawing will blink. But I don't think 
this is a major concern.

> No, I am describing a .request_set_minimized/.set_minimized use case:
> 1a. The compositor send the .request_set_minimized event.
> 1b. The client “minimize” button is pressed.
> 2. The client reparent, draw, raise, do whatever it needs to keep the UI
> consistent.
> 3. The client send the .set_minimized request.
> 4. The relevant surfaces are hidden by the compositor.
> In case 1b with a compositor not supporting minimization, the client
> will just looks a bit weird. But:
> 1. I believe that a user will not expect anything better when using such
> a compositor.
> 2. Using flags in the configure event to inform the client which actions
> are supported will just remove such a weird case.

Okay, that sounds exactly like what I proposed, which is the client is 
in final control over the minimization. Nothing happens until the client 
sends the set_minimized request. I definately prefer this but I must 
have misread your description as it sure sounded like you wanted 
communication after the compositor minimized the window, not before.

More information about the wayland-devel mailing list