summaryrefslogtreecommitdiff
path: root/gdk/wayland/gdkdevice-wayland.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2015-06-01 14:53:11 +0100
committerCarlos Garnacho <carlosg@gnome.org>2015-06-02 17:31:38 +0200
commitd34b1225eb294da71e84c391dc86cc8b2964383f (patch)
tree7eb1677515b2b3b97165a2046cf224752748a6b1 /gdk/wayland/gdkdevice-wayland.c
parent243cfd21a292ec4554d1aaf9e8839f4ca00083f9 (diff)
downloadgtk+-d34b1225eb294da71e84c391dc86cc8b2964383f.tar.gz
wayland: Split keyboard/button modifiers internally
On wl_keyboard.key/modifiers, we're just forgetting about currently pressed mouse buttons. Fix this by storing button and key modifiers separately, and put these together when creating the GdkEvents.
Diffstat (limited to 'gdk/wayland/gdkdevice-wayland.c')
-rw-r--r--gdk/wayland/gdkdevice-wayland.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 99658aeff8..23197ad54c 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -68,7 +68,8 @@ struct _GdkWaylandDeviceData
GHashTable *touches;
- GdkModifierType modifiers;
+ GdkModifierType key_modifiers;
+ GdkModifierType button_modifiers;
GdkWindow *pointer_focus;
GdkWindow *keyboard_focus;
struct wl_data_device *data_device;
@@ -347,7 +348,7 @@ gdk_wayland_device_query_state (GdkDevice *device,
if (child_window)
*child_window = wd->pointer_focus;
if (mask)
- *mask = wd->modifiers;
+ *mask = wd->button_modifiers | wd->key_modifiers;
get_coordinates (wd, win_x, win_y, root_x, root_y);
}
@@ -452,7 +453,7 @@ gdk_wayland_device_window_at_position (GdkDevice *device,
if (win_y)
*win_y = wd->surface_y;
if (mask)
- *mask = wd->modifiers;
+ *mask = wd->button_modifiers | wd->key_modifiers;
return wd->pointer_focus;
}
@@ -874,7 +875,7 @@ pointer_handle_motion (void *data,
gdk_event_set_source_device (event, device->pointer);
event->motion.time = time;
event->motion.axes = NULL;
- event->motion.state = device->modifiers;
+ event->motion.state = device->button_modifiers | device->key_modifiers;
event->motion.is_hint = 0;
gdk_event_set_screen (event, display->screen);
@@ -933,7 +934,7 @@ pointer_handle_button (void *data,
gdk_event_set_source_device (event, device->pointer);
event->button.time = time;
event->button.axes = NULL;
- event->button.state = device->modifiers;
+ event->button.state = device->button_modifiers | device->key_modifiers;
event->button.button = gdk_button;
gdk_event_set_screen (event, display->screen);
@@ -945,9 +946,9 @@ pointer_handle_button (void *data,
modifier = 1 << (8 + gdk_button - 1);
if (state)
- device->modifiers |= modifier;
+ device->button_modifiers |= modifier;
else
- device->modifiers &= ~modifier;
+ device->button_modifiers &= ~modifier;
GDK_NOTE (EVENTS,
g_message ("button %d %s, device %p state %d",
@@ -998,7 +999,7 @@ pointer_handle_axis (void *data,
event->scroll.direction = GDK_SCROLL_SMOOTH;
event->scroll.delta_x = delta_x;
event->scroll.delta_y = delta_y;
- event->scroll.state = device->modifiers;
+ event->scroll.state = device->button_modifiers | device->key_modifiers;
gdk_event_set_screen (event, display->screen);
get_coordinates (device,
@@ -1254,14 +1255,14 @@ deliver_key_event (GdkWaylandDeviceData *device,
sym = xkb_state_key_get_one_sym (xkb_state, key);
device->time = time_;
- device->modifiers = gdk_keymap_get_modifier_state (keymap);
+ device->key_modifiers = gdk_keymap_get_modifier_state (keymap);
event = gdk_event_new (state ? GDK_KEY_PRESS : GDK_KEY_RELEASE);
event->key.window = device->keyboard_focus ? g_object_ref (device->keyboard_focus) : NULL;
gdk_event_set_device (event, device->master_keyboard);
gdk_event_set_source_device (event, device->keyboard);
event->key.time = time_;
- event->key.state = device->modifiers;
+ event->key.state = device->button_modifiers | device->key_modifiers;
event->key.group = 0;
event->key.hardware_keycode = key;
event->key.keyval = sym;
@@ -1364,7 +1365,7 @@ keyboard_handle_modifiers (void *data,
keymap = device->keymap;
direction = gdk_keymap_get_direction (keymap);
xkb_state = _gdk_wayland_keymap_get_xkb_state (keymap);
- device->modifiers = mods_depressed | mods_latched | mods_locked;
+ device->key_modifiers = mods_depressed | mods_latched | mods_locked;
xkb_state_update_mask (xkb_state, mods_depressed, mods_latched, mods_locked, group, 0, 0);
@@ -1432,7 +1433,7 @@ _create_touch_event (GdkWaylandDeviceData *device,
gdk_event_set_device (event, device->master_pointer);
gdk_event_set_source_device (event, device->touch);
event->touch.time = time;
- event->touch.state = device->modifiers;
+ event->touch.state = device->button_modifiers | device->key_modifiers;
gdk_event_set_screen (event, display->screen);
event->touch.sequence = GDK_SLOT_TO_EVENT_SEQUENCE (touch->id);