From 0b7d9958a8dfdac47bca6b3d08ec46f2ee48b9ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Mon, 3 Feb 2014 15:50:38 -0800 Subject: [PATCH] shell: Handle wl_shell surfaces created by xwayland correctly When xwayland creates a shell surface we don't have a resource. The recently added shell_surface_is_wl_shell/xdg_surface() tests don't handle that very well. For now, we assume that a surface without a resource is created from xwayland and is a wl_shell surface. We'll want to modify that to be a xdg surface eventually, but for now this stops weston from crashing. --- desktop-shell/shell.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 6a43e178..27a9ef5c 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -3138,9 +3138,13 @@ shell_get_shell_surface(struct wl_client *client, static bool shell_surface_is_wl_shell_surface(struct shell_surface *shsurf) { - return wl_resource_instance_of(shsurf->resource, - &wl_shell_surface_interface, - &shell_surface_implementation); + /* A shell surface without a resource is created from xwayland + * and is considered a wl_shell surface for now. */ + + return shsurf->resource == NULL || + wl_resource_instance_of(shsurf->resource, + &wl_shell_surface_interface, + &shell_surface_implementation); } static const struct wl_shell_interface shell_implementation = { @@ -3395,9 +3399,10 @@ xdg_get_xdg_surface(struct wl_client *client, static bool shell_surface_is_xdg_surface(struct shell_surface *shsurf) { - return wl_resource_instance_of(shsurf->resource, - &xdg_surface_interface, - &xdg_surface_implementation); + return shsurf->resource && + wl_resource_instance_of(shsurf->resource, + &xdg_surface_interface, + &xdg_surface_implementation); } /* xdg-popup implementation */