[PATCH wayland] protocol: Clarify semantics of sub-surface placement requests

Jonas Ådahl jadahl at gmail.com
Fri Jan 17 03:37:18 PST 2014


On Fri, Jan 17, 2014 at 12:20:17PM +0200, Pekka Paalanen wrote:
> Hi Jonas
> 
> On Thu, 16 Jan 2014 23:27:07 +0100
> Jonas Ådahl <jadahl at gmail.com> wrote:
> 
> > Clarify some semantics of wl_subsurface.place_below and
> > wl_subsurface.place_below that were not specified.
> 
> Below and below. ;-)
> 
> > 
> > Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
> > ---
> > 
> > Hi,
> > 
> > Implementing support for sub-surfaces in mutter we ran in to some
> > unspecified behaviour in the subsurface placement protocol.
> > 
> > I have documented what I understand is how the implementation in weston
> > works (please correct me if I'm wrong). Is this the intended semantics?
> > 
> > Jonas
> > 
> >  protocol/wayland.xml | 6 ++++++
> >  1 file changed, 6 insertions(+)
> > 
> > diff --git a/protocol/wayland.xml b/protocol/wayland.xml
> > index 61fde84..619567c 100644
> > --- a/protocol/wayland.xml
> > +++ b/protocol/wayland.xml
> > @@ -1952,6 +1952,12 @@
> >  
> >  	A new sub-surface is initially added as the top-most in the stack
> >  	of its siblings and parent.
> > +
> > +	Between two sub-surface parent commits, the stacking of surfaces in a
> > +	sub-surface tree are executed as operations in the same order as the
> > +	requests were made. A placement request may alter two surfaces relative
> > +	placement by placing itself in-between. A subsequent placement request
> > +	to a sub-surface replaces any previous requests.
> >        </description>
> >  
> >        <arg name="sibling" type="object" interface="wl_surface"
> 
> Hmm, I guess, but I am not sure I understand this description at all.
> 
> The intention, and how the code works, is that each change is executed
> in the order the place_above/below requests are sent, and each request
> operates on the outcome of the previous. Whether there is a parent
> commit in between or not makes no difference.
> 
> The code has two lists: the effective ordering, and the pending
> ordering. These requests directly affect the pending ordering as they
> are received. When the parent surface is committed, the pending
> ordering overwrites the effective ordering, making them equal. The
> effective ordering is what is composited on screen.
> 
> In essence, you can think of the place_above/below operating
> immediately, and parent commits just publish the whole ordering.
> 
> Does this help? Can you rephrase the protocol documentation?

This is how I understood it, but I'll try to rephrase it some,
given your explanation, and send a v2.

> 
> What was the unspecified behaviour here? I'm not sure how else you
> could understand place_above/below, but then again I'm the original
> author so it's far too obvious to me. :-)

For example one could queue the operations until commit, having a
subsequent request replace a previous one, instead of executing
them immediately relying on commit to take a snapshot.

It could also be read as a subsequent request that now replaces a
previous request to be invalid. This should also be clarified in
set_position so I'll send a patch for that too.

Thanks for the review!


Jonas


More information about the wayland-devel mailing list