[PATCH weston] shell: Allow ending of popup grabs from within the starting of the grab

Rob Bradford robert.bradford at intel.com
Wed Jun 26 11:49:11 PDT 2013


From: Rob Bradford <rob at linux.intel.com>

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 9869db5..b20b1e1 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -2121,9 +2121,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
-- 
1.8.3.1



More information about the wayland-devel mailing list