Stacking subsurface siblings

Pekka Paalanen ppaalanen at gmail.com
Wed Jun 17 07:20:15 PDT 2015


On Tue, 16 Jun 2015 23:47:03 +0800
Jonas Ã…dahl <jadahl at gmail.com> wrote:

> On Tue, Jun 16, 2015 at 04:46:55PM +0200, Arnaud Vrac wrote:
> > Hi,
> > 
> > I'm wondering if a behaviour of weston related to subsurfaces is either a
> > bug or intended. The protocol description is not clear on what happens in
> > the following cases:
> > 
> > Suppose I have a shell surface (BLUE) and two subsurfaces (RED, GREEN). I
> > want to stack them to I get RED, GREEN, BLUE from bottom to top.
> > 
> > If I do:
> > 
> > wl_subsurface_place_below(GREEN->subsurface, BLUE->surface);
> > wl_subsurface_place_below(RED->subsurface, GREEN->surface);
> > 
> > It works, but if I do:
> > 
> > wl_subsurface_place_below(RED->subsurface, GREEN->surface);
> > wl_subsurface_place_below(GREEN->subsurface, BLUE->surface);
> > 
> > The order is GREEN, RED, BLUE instead.
> > 
> > Logically the sibling relative order should be kept in the second case, but
> > it's not. The protocol is not clear on what should happen, what is the
> > expected result ?
> 
> The protocol says "This sub-surface is taken from the stack, and put
> back just above the reference surface, changing the z-order of the
> sub-surfaces." Considering this, if you first placed a surface below
> another, placing again, that relationship may have been broken by the
> new operation. In other words, the "tree" is not moved, just the
> subsurface you placed.

Something here makes my brain hurt...

Let's start with a stack from bottom to top:
B, R, G (or equally: B, G, R)

> > wl_subsurface_place_below(RED->subsurface, GREEN->surface);

Take R out:
B, G
Put R below G:
B, R, G

> > wl_subsurface_place_below(GREEN->subsurface, BLUE->surface);

Take G out:
B, R
Put G below B:
G, B, R

But that's not what you got.

I used to think of the stacking of parent with its immediate children
as an ordered list of { parent, immediate children }. I can't recall
the design discussion since it was years ago, but that's what we ended
up with.

http://cgit.freedesktop.org/wayland/weston/tree/src/compositor.h#n945

Unfortunately I don't think I can dive into this right now.


Thanks,
pq


More information about the wayland-devel mailing list