[PATCH weston 6/8] window: Fix issue causing pointer to have the wrong sprite

Jonas Ådahl jadahl at gmail.com
Thu Sep 27 09:40:44 PDT 2012


There is no event notifying when a move is finished and if a window
requests to be moved but no move is performed and no enter/leave events
are received, the pointer gets stuck in a grab-state. To avoid this,
change the sprite to LEFT_PTR if an button-released event is received.

Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
---
 clients/window.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/clients/window.c b/clients/window.c
index 330d96f..4d31964 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -1798,6 +1798,9 @@ frame_button_handler(struct widget *widget,
 						display->serial, location);
 			break;
 		}
+	} else if (button == BTN_LEFT &&
+		   state == WL_POINTER_BUTTON_STATE_RELEASED) {
+		input_set_pointer_image(input, CURSOR_LEFT_PTR);
 	} else if (button == BTN_RIGHT &&
 		   state == WL_POINTER_BUTTON_STATE_PRESSED) {
 		window_show_frame_menu(window, input, time);
@@ -2033,12 +2036,15 @@ pointer_handle_button(void *data, struct wl_pointer *pointer, uint32_t serial,
 	    state == WL_POINTER_BUTTON_STATE_PRESSED)
 		input_grab(input, input->focus_widget, button);
 
-	widget = input->grab;
+	if (input->grab != NULL)
+		widget = input->grab;
+	else
+		widget = input->focus_widget;
 	if (widget && widget->button_handler)
 		(*widget->button_handler)(widget,
 					  input, time,
 					  button, state,
-					  input->grab->user_data);
+					  widget->user_data);
 
 	if (input->grab && input->grab_button == button &&
 	    state == WL_POINTER_BUTTON_STATE_RELEASED)
@@ -3216,7 +3222,7 @@ menu_motion_handler(struct widget *widget,
 {
 	struct menu *menu = data;
 
-	if (widget == menu->widget)
+	if (input->focus_widget == menu->widget)
 		menu_set_item(data, y);
 
 	return CURSOR_LEFT_PTR;
-- 
1.7.9.5



More information about the wayland-devel mailing list