[PATCH weston 7/8] window: Update modifier state directly after receiving a modifier event
Jonas Ådahl
jadahl at gmail.com
Thu Sep 27 09:40:45 PDT 2012
If the keyboard modifier event was received after the key event the
modifier state would end up incorrect.
Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
---
clients/window.c | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/clients/window.c b/clients/window.c
index 4d31964..55e7d14 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -2211,7 +2211,6 @@ keyboard_handle_key(void *data, struct wl_keyboard *keyboard,
enum wl_keyboard_key_state state = state_w;
const xkb_keysym_t *syms;
xkb_keysym_t sym;
- xkb_mod_mask_t mask;
struct itimerspec its;
input->display->serial = serial;
@@ -2221,17 +2220,6 @@ keyboard_handle_key(void *data, struct wl_keyboard *keyboard,
num_syms = xkb_key_get_syms(input->xkb.state, code, &syms);
- mask = xkb_state_serialize_mods(input->xkb.state,
- XKB_STATE_DEPRESSED |
- XKB_STATE_LATCHED);
- input->modifiers = 0;
- if (mask & input->xkb.control_mask)
- input->modifiers |= MOD_CONTROL_MASK;
- if (mask & input->xkb.alt_mask)
- input->modifiers |= MOD_ALT_MASK;
- if (mask & input->xkb.shift_mask)
- input->modifiers |= MOD_SHIFT_MASK;
-
sym = XKB_KEY_NoSymbol;
if (num_syms == 1)
sym = syms[0];
@@ -2283,9 +2271,20 @@ keyboard_handle_modifiers(void *data, struct wl_keyboard *keyboard,
uint32_t group)
{
struct input *input = data;
+ xkb_mod_mask_t mask;
xkb_state_update_mask(input->xkb.state, mods_depressed, mods_latched,
mods_locked, 0, 0, group);
+ mask = xkb_state_serialize_mods(input->xkb.state,
+ XKB_STATE_DEPRESSED |
+ XKB_STATE_LATCHED);
+ input->modifiers = 0;
+ if (mask & input->xkb.control_mask)
+ input->modifiers |= MOD_CONTROL_MASK;
+ if (mask & input->xkb.alt_mask)
+ input->modifiers |= MOD_ALT_MASK;
+ if (mask & input->xkb.shift_mask)
+ input->modifiers |= MOD_SHIFT_MASK;
}
static const struct wl_keyboard_listener keyboard_listener = {
--
1.7.9.5
More information about the wayland-devel
mailing list