devilhorns pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=eedd6c3159b7a1fa736cd727e808edb4bbc6b997
commit eedd6c3159b7a1fa736cd727e808edb4bbc6b997 Author: Chris Michael <cp.mich...@samsung.com> Date: Tue Feb 3 15:29:47 2015 -0500 ecore-wayland: Don't send key repeat events for keys which should not get them Summary: Some keys in certain keyboard layouts should not be repeated so add a test which uses xkb to inform us if this key supports repeating. @fix Signed-off-by: Chris Michael <cp.mich...@samsung.com> --- src/lib/ecore_wayland/ecore_wl_input.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lib/ecore_wayland/ecore_wl_input.c b/src/lib/ecore_wayland/ecore_wl_input.c index 76d115d..32f7e55 100644 --- a/src/lib/ecore_wayland/ecore_wl_input.c +++ b/src/lib/ecore_wayland/ecore_wl_input.c @@ -812,7 +812,6 @@ _ecore_wl_input_cb_keyboard_key(void *data, struct wl_keyboard *keyboard EINA_UN e->window = win->id; e->event_window = win->id; e->timestamp = timestamp; - e->modifiers = input->modifiers; if (state) @@ -820,6 +819,8 @@ _ecore_wl_input_cb_keyboard_key(void *data, struct wl_keyboard *keyboard EINA_UN else ecore_event_add(ECORE_EVENT_KEY_UP, e, NULL, NULL); + if (!xkb_keymap_key_repeats(input->xkb.keymap, keycode)) return; + if ((!state) && (keycode == input->repeat.key)) { input->repeat.sym = 0; @@ -854,13 +855,15 @@ _ecore_wl_input_cb_keyboard_modifiers(void *data, struct wl_keyboard *keyboard E if (!(input = data)) return; - input->modifiers = 0; - if (!input->xkb.state) return; + if (!input->xkb.keymap) return; xkb_state_update_mask(input->xkb.state, depressed, latched, 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 |= ECORE_EVENT_MODIFIER_CTRL; if (mask & input->xkb.alt_mask) --