From 11fecf0808602b0028122f11afb170ed36cec8dd Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Tue, 18 May 2021 17:21:42 +0100 Subject: xdg-shell: Make xdg_surface fail when surface has role It is illegal for a surface to have more than one role. The only thing which can be done with an xdg_surface (apart from destroying it) is to assign the surface a role with the get_toplevel, get_popup, etc requests. On Mutter, calling get_xdg_surface on a surface which already has an assigned role generates the 'role' protocol error. Weston will not send an error, however it may later abort on a failed assert during cleanup. wlroots allows this case, and only sends the role error when assigning an explicit role through creating a toplevel or popup. On the grounds that it makes no sense to create an xdg_surface for a wl_surface which already has a role, make it explicitly illegal. cf. wayland/weston!559, wayland/weston!627 Signed-off-by: Daniel Stone --- stable/xdg-shell/xdg-shell.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/stable/xdg-shell/xdg-shell.xml b/stable/xdg-shell/xdg-shell.xml index ae8ab67..364d130 100644 --- a/stable/xdg-shell/xdg-shell.xml +++ b/stable/xdg-shell/xdg-shell.xml @@ -75,7 +75,9 @@ This creates an xdg_surface for the given surface. While xdg_surface itself is not a role, the corresponding surface may only be assigned - a role extending xdg_surface, such as xdg_toplevel or xdg_popup. + a role extending xdg_surface, such as xdg_toplevel or xdg_popup. It is + illegal to create an xdg_surface for a wl_surface which already has an + assigned role and this will result in a protocol error. This creates an xdg_surface for the given surface. An xdg_surface is used as basis to define a role to a given surface, such as xdg_toplevel -- cgit v1.2.3