summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--protocol/wayland.xml19
-rw-r--r--src/data-device.c9
-rw-r--r--src/wayland-server.c8
3 files changed, 30 insertions, 6 deletions
diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index eb09849..d9fb5c2 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -818,6 +818,15 @@
<arg name="surface_y" type="fixed"/>
</event>
+ <enum name="button_state">
+ <description summary="physical button state">
+ Describes the physical state of a button which provoked the button
+ event.
+ </description>
+ <entry name="released" value="0" summary="button is not pressed"/>
+ <entry name="pressed" value="1" summary="button is pressed"/>
+ </enum>
+
<event name="button">
<description summary="pointer button event">
Mouse button click and release notifications. The location
@@ -862,6 +871,16 @@
<arg name="surface" type="object" interface="wl_surface"/>
</event>
+ <enum name="key_state">
+ <description summary="physical key state">
+ Describes the physical state of a key which provoked the key event.
+ When a key repeats, the sequence is down -> repeat -> repeat -> up.
+ </description>
+ <entry name="released" value="0" summary="key is not pressed"/>
+ <entry name="pressed" value="1" summary="key is pressed"/>
+ <entry name="repeat" value="2" summary="key is pressed and repeating"/>
+ </enum>
+
<event name="key">
<description summary="key event">
A key was pressed or released.
diff --git a/src/data-device.c b/src/data-device.c
index a6d465f..60e7578 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 323d32d..ec0d0e8 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);
}