diff --git a/protocol/wayland.xml b/protocol/wayland.xml index eb098494..d9fb5c2a 100644 --- a/protocol/wayland.xml +++ b/protocol/wayland.xml @@ -818,6 +818,15 @@ + + + Describes the physical state of a button which provoked the button + event. + + + + + Mouse button click and release notifications. The location @@ -862,6 +871,16 @@ + + + Describes the physical state of a key which provoked the key event. + When a key repeats, the sequence is down -> repeat -> repeat -> up. + + + + + + A key was pressed or released. diff --git a/src/data-device.c b/src/data-device.c index a6d465fc..60e75787 100644 --- a/src/data-device.c +++ b/src/data-device.c @@ -260,15 +260,18 @@ data_device_end_drag_grab(struct wl_seat *seat) static void drag_grab_button(struct wl_pointer_grab *grab, - uint32_t time, uint32_t button, uint32_t state) + uint32_t time, uint32_t button, uint32_t state_w) { struct wl_seat *seat = container_of(grab, struct wl_seat, drag_grab); + enum wl_pointer_button_state state = state_w; if (seat->drag_focus_resource && - seat->pointer->grab_button == button && state == 0) + seat->pointer->grab_button == button && + state == WL_POINTER_BUTTON_STATE_RELEASED) wl_data_device_send_drop(seat->drag_focus_resource); - if (seat->pointer->button_count == 0 && state == 0) { + if (seat->pointer->button_count == 0 && + state == WL_POINTER_BUTTON_STATE_RELEASED) { data_device_end_drag_grab(seat); if (seat->drag_data_source) wl_list_remove(&seat->drag_data_source_listener.link); diff --git a/src/wayland-server.c b/src/wayland-server.c index 323d32da..ec0d0e87 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -493,19 +493,21 @@ default_grab_motion(struct wl_pointer_grab *grab, static void default_grab_button(struct wl_pointer_grab *grab, - uint32_t time, uint32_t button, uint32_t state) + uint32_t time, uint32_t button, uint32_t state_w) { struct wl_pointer *pointer = grab->pointer; struct wl_resource *resource; uint32_t serial; + enum wl_pointer_button_state state = state_w; resource = pointer->focus_resource; if (resource) { serial = wl_display_next_serial(resource->client->display); - wl_pointer_send_button(resource, serial, time, button, state); + wl_pointer_send_button(resource, serial, time, button, state_w); } - if (pointer->button_count == 0 && state == 0) + if (pointer->button_count == 0 && + state == WL_POINTER_BUTTON_STATE_RELEASED) wl_pointer_set_focus(pointer, pointer->current, pointer->current_x, pointer->current_y); }