Window stacking

Bill Spitzak spitzak at gmail.com
Wed Sep 14 10:48:25 PDT 2011


dottomi at gmail.com wrote:

> Excuse me, I'm just a bystander, but is this list you speak of a list of
> all the windows registered by all of the connected clients?

Yes

> The main problem I have using GIMP is that when I focus a window, I
> don't want to focus on a /window/, I want to focus on an /application/.
> This means I want all of the application's windows to be moved to the
> top.

In my proposal this is done by the client (GIMP) raising all the windows 
in response to the compositor telling it to raise one of them. The 
compositor does not need to know anything about the fact that the 
windows are related.

There are also "invisible" windows. Their only purpose is to provide 
entries in a task-manager or panel type application. Attempts to raise 
these are also handled by the client. For the GIMP there may be a single 
"gimp" icon in the task manager. The fact that it raises all the image 
and toolbar windows is only known by GIMP.

  If there is a list with only the windows, it would require to move
> all of the windows one by one. You can also have a third-party window
> between your application's windows, and I think that's the part that
> should be avoided.
> 
>> 2. There is a *atomic* api by which a client can map, unmap, and
>> change the stacking order of it's own windows.
> 
> "Of it's own windows" in an absolute list, or in a client-only list?

It's own windows in an absolute list. This would be done by requesting 
that window a (belonging to the client) be placed above/below window b 
(which can be None or a client or other window). None is the most 
useful. Compositors could also provide place-holder invisible windows so 
a client can indicate what "layer" a window is in (compositors can also 
force windows to be in "layers" by not obeying the window stacking order).

> Personally, I'd want to have a client request for a "single window
> object", and for a "window group object". In the server there would be a
> single list containing both single window objects and window group
> objects. A window group is an object which is managed by the client
> (map, unmap, register, unregister, reordering - i.e. what you're talking
> about here) and the client can only operate on windows in its own group
> object.

The "window group" is what I was calling the invisible windows for the 
task managers. However the compositor does not have to know anything 
about the group, the client is supposed to respond to requests to raise 
the group by raising all the necessary windows.

> It makes things easier in the server to restack windows because
> you can move a whole group at once in the server-side list and you avoid
> having a client's window positioned between windows of another client,
> where the latter client does not want any third-party windows between.
> It also makes it impossible for a client to make changes to the absolute
> server-side list.

There will be a need to make a whole group of reorders "atomic". This 
will make it look to the user as though the whole group raised at once, 
and prevent other applications from inserting their windows between 
them. Also this is vital so that a video player can use a low-res YUV 
window below a higher-res "frame" with a transparent area, and the user 
never sees them come apart.


More information about the wayland-devel mailing list