From e0b9d5be84be1e1e5d44a2c449fceb24d649e5e9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Wed, 30 Apr 2014 13:45:49 -0700 Subject: [PATCH] xwayland: Make resizing work again 9c376b54ea6f60ae10d93653132e22ef66a536d7 fixed the crash when a client goes away during a resize grab. The shsurf->resource is set to NULL in that case and we were trying to send out events to a NULL resource. However, xwayland shell surfaces are created by the xwayland module and don't have a resource. We use a different function pointer for sending the configure events that handle the events inside xwayland instead of sending protocol events. To fix all this, we just move the check for a NULL resource into the functions that we use for sending configure events for wl_shell and xdg_shell. --- desktop-shell/shell.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index bb71436..8d169aa 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -1630,7 +1630,7 @@ resize_grab_motion(struct weston_pointer_grab *grab, uint32_t time, weston_pointer_move(pointer, x, y); - if (!shsurf || !shsurf->resource) + if (!shsurf) return; weston_view_from_global_fixed(shsurf->view, @@ -1665,8 +1665,9 @@ send_configure(struct weston_surface *surface, assert(shsurf); - wl_shell_surface_send_configure(shsurf->resource, - edges, width, height); + if (shsurf->resource) + wl_shell_surface_send_configure(shsurf->resource, + edges, width, height); } static const struct weston_shell_client shell_client = { @@ -3514,7 +3515,8 @@ xdg_send_configure(struct weston_surface *surface, assert(shsurf); - xdg_surface_send_configure(shsurf->resource, width, height); + if (shsurf->resource) + xdg_surface_send_configure(shsurf->resource, width, height); } static const struct weston_shell_client xdg_client = { -- 2.7.4