From 23eebad85d6a58307145b861df02ce57de07a2cf Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 27 Jun 2012 13:11:23 +0300 Subject: [PATCH] xkb: only repeat keys when they're supposed to repeat Support for this was added upstream, we can use it now. This mostly means that modifiers won't repeat anymore. Signed-off-by: Ran Benita Signed-off-by: David Herrmann --- src/uterm_input_xkb.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/uterm_input_xkb.c b/src/uterm_input_xkb.c index 536d1c8..ce2f1ef 100644 --- a/src/uterm_input_xkb.c +++ b/src/uterm_input_xkb.c @@ -126,6 +126,7 @@ int kbd_dev_process_key(struct kbd_dev *kbd, struct uterm_input_event *out) { struct xkb_state *state; + struct xkb_keymap *keymap; xkb_keycode_t keycode; const xkb_keysym_t *keysyms; int num_keysyms; @@ -134,6 +135,7 @@ int kbd_dev_process_key(struct kbd_dev *kbd, return -EINVAL; state = kbd->state; + keymap = xkb_state_get_map(state); keycode = code + EVDEV_KEYCODE_OFFSET; if (key_state == KEY_PRESSED) @@ -141,13 +143,12 @@ int kbd_dev_process_key(struct kbd_dev *kbd, else if (key_state == KEY_RELEASED) xkb_state_update_key(state, keycode, XKB_KEY_UP); - /* - * TODO: Add support in xkbcommon to query whether the key - * should repeat or not. - */ if (key_state == KEY_RELEASED) return -ENOKEY; + if (key_state == KEY_REPEATED && !xkb_key_repeats(keymap, keycode)) + return -ENOKEY; + num_keysyms = xkb_key_get_syms(state, keycode, &keysyms); if (num_keysyms < 0) return -ENOKEY;