[PATCH weston v2] shell: clear popup grab interface on remove_popup_grab and popup_grab_end

Philipp Brüschweiler blei42 at gmail.com
Mon Apr 15 12:09:54 PDT 2013


Fixes a segfault. Steps to reproduce:

* start weston with the x11 backend
* open a terminal
* click on the icon in the top left corner, choose close
* close the x11 window containing weston
---
 src/shell.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/shell.c b/src/shell.c
index de5d6f6..9d0ae02 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1986,6 +1986,8 @@ popup_grab_end(struct wl_pointer *pointer)
 	if (pointer->grab->interface == &popup_grab_interface) {
 		wl_pointer_end_grab(grab->pointer);
 		shseat->popup_grab.client = NULL;
+		shseat->popup_grab.grab.interface = NULL;
+		assert(!wl_list_empty(&shseat->popup_grab.surfaces_list));
 		/* Send the popup_done event to all the popups open */
 		wl_list_for_each(shsurf, &shseat->popup_grab.surfaces_list, popup.grab_link) {
 			wl_shell_surface_send_popup_done(&shsurf->resource);
@@ -2028,6 +2030,7 @@ remove_popup_grab(struct shell_surface *shsurf)
 	wl_list_init(&shsurf->popup.grab_link);
 	if (wl_list_empty(&shseat->popup_grab.surfaces_list)) {
 		wl_pointer_end_grab(shseat->popup_grab.grab.pointer);
+		shseat->popup_grab.grab.interface = NULL;
 	}
 }
 
-- 
1.8.2.1



More information about the wayland-devel mailing list