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.
dev
Kristian Høgsberg 11 years ago
parent 49fcd001b1
commit 0b7d9958a8
  1. 9
      desktop-shell/shell.c

@ -3138,7 +3138,11 @@ shell_get_shell_surface(struct wl_client *client,
static bool static bool
shell_surface_is_wl_shell_surface(struct shell_surface *shsurf) shell_surface_is_wl_shell_surface(struct shell_surface *shsurf)
{ {
return wl_resource_instance_of(shsurf->resource, /* 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, &wl_shell_surface_interface,
&shell_surface_implementation); &shell_surface_implementation);
} }
@ -3395,7 +3399,8 @@ xdg_get_xdg_surface(struct wl_client *client,
static bool static bool
shell_surface_is_xdg_surface(struct shell_surface *shsurf) shell_surface_is_xdg_surface(struct shell_surface *shsurf)
{ {
return wl_resource_instance_of(shsurf->resource, return shsurf->resource &&
wl_resource_instance_of(shsurf->resource,
&xdg_surface_interface, &xdg_surface_interface,
&xdg_surface_implementation); &xdg_surface_implementation);
} }

Loading…
Cancel
Save