[PATCH weston v2] shell: set the popup grab button as pressed only if it actually is

Giulio Camuffo giuliocamuffo at gmail.com
Wed Mar 27 10:05:26 PDT 2013


This ensures the popup_grab.initial_up field isn't reset to 0
if the popup was not opened because of a mouse press but because
of moving the mouse with a popup already open. Not doing so will
make the first click outside the client area go ignored.
---
 src/shell.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/shell.c b/src/shell.c
index da9193c..c6ff300 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -2008,7 +2008,11 @@ add_popup_grab(struct shell_surface *shsurf, struct shell_seat *shseat)
 	if (wl_list_empty(&shseat->popup_grab.surfaces_list)) {
 		shseat->popup_grab.client = shsurf->surface->surface.resource.client;
 		shseat->popup_grab.grab.interface = &popup_grab_interface;
-		shseat->popup_grab.initial_up = 0;
+		/* We must make sure here that this popup was opened after
+		 * a mouse press, and not just by moving around with other
+		 * popups already open. */
+		if (shseat->seat->pointer.button_count > 0)
+			shseat->popup_grab.initial_up = 0;
 
 		wl_pointer_start_grab(seat->pointer, &shseat->popup_grab.grab);
 	}
-- 
1.8.2



More information about the wayland-devel mailing list