[PATCH weston 5/6] xdg-shell: Rewrite documentation

Pekka Paalanen ppaalanen at gmail.com
Mon Nov 24 05:27:50 PST 2014


On Sat, 22 Nov 2014 12:28:29 -0800
"Jasper St. Pierre" <jstpierre at mecheye.net> wrote:

> This rewrites basically all of the text inside xdg-shell to be up to
> date, clearer, and rid of wl_shell and X11 terminology.
> ---
>  protocol/xdg-shell.xml | 256 ++++++++++++++++++++++++++++++-------------------
>  1 file changed, 156 insertions(+), 100 deletions(-)
> 
> diff --git a/protocol/xdg-shell.xml b/protocol/xdg-shell.xml
> index 360179d..3359cf7 100644
> --- a/protocol/xdg-shell.xml
> +++ b/protocol/xdg-shell.xml
> @@ -31,11 +31,15 @@
>  
>    <interface name="xdg_shell" version="1">
>      <description summary="create desktop-style surfaces">
> -      This interface is implemented by servers that provide
> -      desktop-style user interfaces.
> -
> -      It allows clients to associate a xdg_surface with
> -      a basic surface.
> +      xdg_shell allows clients to turn a wl_surface into a "real window"
> +      which can be dragged, resized, stacked, and moved around by the
> +      user. Everything about this interface is suited towards traditional
> +      desktop environments.
> +
> +      Destroying a bound xdg_shell object while there are surfaces
> +      still alive with roles from this interface is illegal and will
> +      result in a protocol error. Make sure to destroy all surfaces
> +      before destroying this object.

Ok. We don't have a destroy request on xdg_shell interface currently,
and you are not adding one in this series, so this cannot be enforced.
Is that intentional, or should there be a destroy request?

I think having a destroy request on global interfaces should be
mandatory, so I'd recommend adding one.

What about clients that create multiple xdg_shell objects and then
further xdg_* objects from each? Do xdg_shell objects track which xdg_*
objects have been created from them?


>      </description>
>  
>      <enum name="version">
> @@ -65,33 +69,26 @@
>  
>      <request name="get_xdg_surface">
>        <description summary="create a shell surface from a surface">
> -	Create a shell surface for an existing surface.
> -
> -	This request gives the surface the role of xdg_surface. If the
> -	surface already has another role, it raises a protocol error.
> -
> -	Only one shell or popup surface can be associated with a given
> -	surface.
> +	This creates an xdg_surface for the given surface and gives it the
> +	xdg_surface role. See the documentation of xdg_surface for more details.
>        </description>
>        <arg name="id" type="new_id" interface="xdg_surface"/>
>        <arg name="surface" type="object" interface="wl_surface"/>
>      </request>
>  
>      <request name="get_xdg_popup">
> -      <description summary="create a shell surface from a surface">
> -	Create a popup surface for an existing surface.
> -
> -	This request gives the surface the role of xdg_popup. If the
> -	surface already has another role, it raises a protocol error.
> +      <description summary="create a popup for a surface">
> +	This creates an xdg_popup for the given surface and gives it the
> +	xdg_popup role. See the documentation of xdg_surface for more details.

ITYM xdg_popup instead of xdg_surface.

>  
> -	Only one shell or popup surface can be associated with a given
> -	surface.
> +	This request must be used in response to some sort of user action
> +	like a button press, key press, or touch down event.
>        </description>
>        <arg name="id" type="new_id" interface="xdg_popup"/>
>        <arg name="surface" type="object" interface="wl_surface"/>
>        <arg name="parent" type="object" interface="wl_surface"/>
> -      <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/>
> -      <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/>
> +      <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat of the user event"/>
> +      <arg name="serial" type="uint" summary="the serial of the user event"/>
>        <arg name="x" type="int"/>
>        <arg name="y" type="int"/>
>      </request>
> @@ -107,7 +104,7 @@
>          respond to the ping request, or in what timeframe. Clients should
>          try to respond in a reasonable amount of time.
>        </description>
> -      <arg name="serial" type="uint" summary="pass this to the callback"/>
> +      <arg name="serial" type="uint" summary="pass this to the pong request"/>
>      </event>
>  
>      <request name="pong">
> @@ -120,8 +117,7 @@
>    </interface>
>  
>    <interface name="xdg_surface" version="1">
> -
> -    <description summary="desktop-style metadata interface">
> +    <description summary="A desktop window">
>        An interface that may be implemented by a wl_surface, for
>        implementations that provide a desktop-style user interface.
>  
> @@ -136,20 +132,22 @@
>      </description>
>  
>      <request name="destroy" type="destructor">
> -      <description summary="remove xdg_surface interface">
> -	The xdg_surface interface is removed from the wl_surface object
> -	that was turned into a xdg_surface with
> -	xdg_shell.get_xdg_surface request. The xdg_surface properties,
> -	like maximized and fullscreen, are lost. The wl_surface loses
> -	its role as a xdg_surface. The wl_surface is unmapped.
> +      <description summary="Destroy the xdg_surface">
> +	Unmap and destroy the window. The window will be effectively
> +	hidden from the user's point of view, and all state like
> +	maximization, fullscreen, and so on, will be lost.

This is ok, but above this there is a paragraph that says:

	"On the server side the object is automatically destroyed when
	the related wl_surface is destroyed.  On client side,
	xdg_surface.destroy() must be called before destroying
	the wl_surface object."

I think that paragraph needs to have "On the server side the object is
automatically destroyed when the related wl_surface is destroyed."
deleted, because it contradicts with the existence of the destroy
request. This is likely a left-over from wl_shell_surface, where there
is no destroy request.


>        </description>
>      </request>
>  
>      <request name="set_parent">
> -      <description summary="surface is a child of another surface">
> -	Child surfaces are stacked above their parents, and will be
> -	unmapped if the parent is unmapped too. They should not appear
> -	on task bars and alt+tab.
> +      <description summary="set the parent of this surface">
> +	Set the "parent" of this surface. This window should be stacked
> +	above a parent. The parent surface must be mapped as long as this
> +	surface is mapped.
> +
> +	Parent windows should be set on dialogs, toolboxes, or other
> +	"auxilliary" surfaces, so that the parent is raised when the dialog
> +	is raised.
>        </description>
>        <arg name="parent" type="object" interface="xdg_surface" allow-null="true"/>
>      </request>

...

> @@ -311,14 +324,20 @@
>  
>      <request name="ack_configure">
>        <description summary="ack a configure event">
> -        When a configure event is received, a client should then ack it
> -        using the ack_configure request to ensure that the compositor
> -        knows the client has seen the event.
> -
> -        By this point, the state is confirmed, and the next attach should
> -        contain the buffer drawn for the configure event you are acking.
> +        When a configure event is received, if a client is updating
> +        and redrawing its state in response to the configure event,
> +        then the client needs to make an ack_configure request before
> +        point the commit to mark this next commit as being a
> +        reaction to the configure.

"...an ack_configure request before point the commit to mark this next
commit..." I feel there is something odd in that sentence. s/point// maybe?


> +
> +        The compositor might use this information to move a surface
> +        to the top left only when the client has drawn itself for
> +        the maximized or fullscreen state.
> +
> +        If the client receives multiple configure events before it
> +        can respond to one, it only has to ack the last configure event.
>        </description>
> -      <arg name="serial" type="uint" summary="a serial to configure for"/>
> +      <arg name="serial" type="uint" summary="the serial from the configure event"/>
>      </request>

No other comments to this patch, but I think should dig up my old
review of the whole xdg_shell.xml file, and check what comments I
would like to restate after these changes. I'll try to do that "soon".


Thanks,
pq


More information about the wayland-devel mailing list