diff --git a/libweston/input.c b/libweston/input.c index b774d56d..d98cc557 100644 --- a/libweston/input.c +++ b/libweston/input.c @@ -380,31 +380,42 @@ default_grab_pointer_motion(struct weston_pointer_grab *grab, uint32_t time, } static void -default_grab_pointer_button(struct weston_pointer_grab *grab, - uint32_t time, uint32_t button, uint32_t state_w) +weston_pointer_send_button(struct weston_pointer *pointer, + uint32_t time, uint32_t button, uint32_t state_w) { - struct weston_pointer *pointer = grab->pointer; - struct weston_compositor *compositor = pointer->seat->compositor; - struct weston_view *view; + struct wl_display *display = pointer->seat->compositor->wl_display; + struct wl_list *resource_list; struct wl_resource *resource; uint32_t serial; - enum wl_pointer_button_state state = state_w; - struct wl_display *display = compositor->wl_display; - wl_fixed_t sx, sy; - struct wl_list *resource_list = NULL; - if (pointer->focus_client) - resource_list = &pointer->focus_client->pointer_resources; + if (!pointer->focus_client) + return; + + resource_list = &pointer->focus_client->pointer_resources; if (resource_list && !wl_list_empty(resource_list)) { resource_list = &pointer->focus_client->pointer_resources; serial = wl_display_next_serial(display); - wl_resource_for_each(resource, resource_list) + wl_resource_for_each(resource, resource_list) { wl_pointer_send_button(resource, serial, time, button, state_w); + } } +} + +static void +default_grab_pointer_button(struct weston_pointer_grab *grab, + uint32_t time, uint32_t button, uint32_t state_w) +{ + struct weston_pointer *pointer = grab->pointer; + struct weston_compositor *compositor = pointer->seat->compositor; + struct weston_view *view; + enum wl_pointer_button_state state = state_w; + wl_fixed_t sx, sy; + + weston_pointer_send_button(pointer, time, button, state_w); if (pointer->button_count == 0 && state == WL_POINTER_BUTTON_STATE_RELEASED) {