From dfe310512b4ed8f5dd591611b61a5dfd114403b0 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Wed, 26 Jun 2013 19:49:11 +0100 Subject: [PATCH] shell: Allow ending of popup grabs from within the starting of the grab Calling weston_pointer_start_grab can lead to a code path (in this case when the shell surface is unresponsive) that can try and remove the popup grab to setup a shell grab. Ending the popup grab requires removing the surface from the grab's surfaces list - however the grab had not yet been fully setup so the grabbed surface was not yet in this list. With this change we ensure we add the surface to the list before setting up the pointer grab. https://bugs.freedesktop.org/show_bug.cgi?id=66167 --- src/shell.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/shell.c b/src/shell.c index 4f93d3b6..3b6ac42c 100644 --- a/src/shell.c +++ b/src/shell.c @@ -2122,9 +2122,11 @@ add_popup_grab(struct shell_surface *shsurf, struct shell_seat *shseat) if (shseat->seat->pointer->button_count > 0) shseat->popup_grab.initial_up = 0; + wl_list_insert(&shseat->popup_grab.surfaces_list, &shsurf->popup.grab_link); weston_pointer_start_grab(seat->pointer, &shseat->popup_grab.grab); + } else { + wl_list_insert(&shseat->popup_grab.surfaces_list, &shsurf->popup.grab_link); } - wl_list_insert(&shseat->popup_grab.surfaces_list, &shsurf->popup.grab_link); } static void