[PATCH weston v3] desktop-shell: Fail if get_xdg_surface is called on an xdg_surface
Jonas Ådahl
jadahl at gmail.com
Thu Feb 5 18:15:28 PST 2015
If a client calls xdg_shell.get_xdg_surface on a surface that is already
an xdg_surface would, prior to this patch, succeed, but cause weston to
crash later when trying to configure. This patch instead sends a role
error to the client complaining that it already is an xdg_surface.
Note that .._set_role() only fails when changing roles, not when setting
the same role twice.
The same is done for xdg_popup.
Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
Reviewed-by: Daniel Stone <daniels at collabora.com>
Reviewed-by: Bryce Harrington <bryce at osg.samsung.com>
---
Changed since v2:
Fixed typo in commit message.
desktop-shell/shell.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index a7514f7..d4407d0 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -3959,6 +3959,14 @@ xdg_get_xdg_surface(struct wl_client *client,
struct desktop_shell *shell = sc->shell;
struct shell_surface *shsurf;
+ shsurf = get_shell_surface(surface);
+ if (shsurf && shell_surface_is_xdg_surface(shsurf)) {
+ wl_resource_post_error(resource, XDG_SHELL_ERROR_ROLE,
+ "This wl_surface is already an "
+ "xdg_surface");
+ return;
+ }
+
if (weston_surface_set_role(surface, "xdg_surface",
resource, XDG_SHELL_ERROR_ROLE) < 0)
return;
@@ -4052,6 +4060,14 @@ xdg_get_xdg_popup(struct wl_client *client,
struct weston_surface *parent;
struct shell_seat *seat;
+ shsurf = get_shell_surface(surface);
+ if (shsurf && shell_surface_is_xdg_popup(shsurf)) {
+ wl_resource_post_error(resource, XDG_SHELL_ERROR_ROLE,
+ "This wl_surface is already an "
+ "xdg_popup");
+ return;
+ }
+
if (weston_surface_set_role(surface, "xdg_popup",
resource, XDG_SHELL_ERROR_ROLE) < 0)
return;
--
2.1.0
More information about the wayland-devel
mailing list