[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