[PATCH wayland] protocol: define the concept of wl_surface role
Jasper St. Pierre
jstpierre at mecheye.net
Mon Aug 18 07:32:28 PDT 2014
On Mon, Aug 18, 2014 at 10:14 AM, Pekka Paalanen <ppaalanen at gmail.com>
wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>
> Define what a role is, and what restrictions there are.
>
> A change to existing behaviour is that a role cannot be changed at all
> once set. However, this is unlikely to cause problems, as there is no
> reason to re-use wl_surfaces in clients.
>
Thanks for this. I was going to add it in the Publican docs, but those are
significantly out of date and I spent more time laughing at them than
writing things in them. We should fix that. :(
Looks good overall. I'm going to be a terrible person and nitpick your
grammar. Sorry about that in advance!
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> ---
> protocol/wayland.xml | 20 ++++++++++++++++++--
> 1 file changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/protocol/wayland.xml b/protocol/wayland.xml
> index 2d57f69..39af61f 100644
> --- a/protocol/wayland.xml
> +++ b/protocol/wayland.xml
> @@ -973,8 +973,24 @@
> local coordinates of the pixel content, in case a buffer_transform
> or a buffer_scale is used.
>
> - Surfaces are also used for some special purposes, e.g. as
> - cursor images for pointers, drag icons, etc.
> + A surface without a "role" is fairly useless, a compositor does not
> + know where, when or how to present it. The role is the purpose of a
> + wl_surface. Examples of roles are a cursor for a pointer, a drag
> icon,
> + a sub-surface, and a window as defined by a shell protocol.
>
I'd give more concrete examples. "Examples of surface roles include the
pointer icon (as set by wl_pointer.set_cursor), a drag icon (as set by
wl_data_device.start_drag), ..."
+ A surface can have only one role at a time. Initially a wl_surface
> + does not have a role. Once a role is set, it can never be set to a
> + different role again.
>
There is an important clarification here. If I have two surfaces like
"pointer cursor", "I-beam cursor", I can call wl_pointer.set_cursor on
either of them in succession. I could imagine someone being confused that
"the pointer icon" role is a singleton, and when the I-beam cursor gains
it, the pointer cursor loses it, and she might think that you would have to
create a new wl_surface since it's illegal to set the wl_pointer.set_cursor
role on the pointer cursor surface again.
What we're trying to do is prevent surface reuse, so you can't transform
something that was once a pointer cursor into a wl_subsurface or anything
like that.
I'm not really sure how to describe this, though. I'm not too happy with
this, but it's the best I came up with.
"A surface can only have one role at a time. When you first make a request
to set a surface's role, the surface can then only have that role forever,
even if it loses the role. For instance, if somebody sets the 'subsurface'
role on a wl_surface, then it can only ever be a subsurface, even if you
destroy the associated wl_subsurface object"
We should probably describe the concept of "losing the role" from e.g.
wl_subsurface.destroy, wl_pointer.set_cursor above.
+ A role is set by a request in another interface than wl_surface
> + itself. The protocol specification of the other interface
> + defines, that the request gives a specific role to a wl_surface.
> + Often, this request also creates a new protocol object, that
> + represents the role and extends the interface to the wl_surface.
> + If such a new protocol object is created, clients are
> + recommended to destroy it before they destroy the wl_surface.
> + Whether destroying the wl_surface first is legal, depends on the
> + protocol interface related to the role.
>
I know you're a non-native speaker, so I won't bash your grammar in-depth.
I'll just offer a replacement paragraph with everything fixed up. I'm also
going to strengthen up the wording here a bit.
"Surface roles are set by requests in other interfaces such as
wl_pointer.set_cursor. The request should explicitly mention that this
request gives a role to a wl_surface. Often, this request also creates a
new protocol object that represents the role and adds additional
functionality to wl_surface. When clients want to destroy a surface, they
must destroy this 'role object' before the wl_surface, except when
specified otherwise."
We should also change the description of wl_subsurface to say that
destroying the wl_surface before the role object is an exception to this
rule, and is considered legacy behavior, so clients should try not to do it.
</description>
>
> <enum name="error">
> --
> 1.8.5.5
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
--
Jasper
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140818/48c8abd3/attachment-0001.html>
More information about the wayland-devel
mailing list