forked from enlightenment/efl
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.michael@samsung.com>
This commit is contained in:
parent
1097a82365
commit
eedd6c3159
|
@ -812,7 +812,6 @@ _ecore_wl_input_cb_keyboard_key(void *data, struct wl_keyboard *keyboard EINA_UN
|
||||||
e->window = win->id;
|
e->window = win->id;
|
||||||
e->event_window = win->id;
|
e->event_window = win->id;
|
||||||
e->timestamp = timestamp;
|
e->timestamp = timestamp;
|
||||||
|
|
||||||
e->modifiers = input->modifiers;
|
e->modifiers = input->modifiers;
|
||||||
|
|
||||||
if (state)
|
if (state)
|
||||||
|
@ -820,6 +819,8 @@ _ecore_wl_input_cb_keyboard_key(void *data, struct wl_keyboard *keyboard EINA_UN
|
||||||
else
|
else
|
||||||
ecore_event_add(ECORE_EVENT_KEY_UP, e, NULL, NULL);
|
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))
|
if ((!state) && (keycode == input->repeat.key))
|
||||||
{
|
{
|
||||||
input->repeat.sym = 0;
|
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;
|
if (!(input = data)) return;
|
||||||
|
|
||||||
input->modifiers = 0;
|
if (!input->xkb.keymap) return;
|
||||||
if (!input->xkb.state) return;
|
|
||||||
|
|
||||||
xkb_state_update_mask(input->xkb.state,
|
xkb_state_update_mask(input->xkb.state,
|
||||||
depressed, latched, locked, 0, 0, group);
|
depressed, latched, locked, 0, 0, group);
|
||||||
|
|
||||||
mask = xkb_state_serialize_mods(input->xkb.state,
|
mask = xkb_state_serialize_mods(input->xkb.state,
|
||||||
(XKB_STATE_DEPRESSED | XKB_STATE_LATCHED));
|
(XKB_STATE_DEPRESSED | XKB_STATE_LATCHED));
|
||||||
|
|
||||||
|
input->modifiers = 0;
|
||||||
if (mask & input->xkb.control_mask)
|
if (mask & input->xkb.control_mask)
|
||||||
input->modifiers |= ECORE_EVENT_MODIFIER_CTRL;
|
input->modifiers |= ECORE_EVENT_MODIFIER_CTRL;
|
||||||
if (mask & input->xkb.alt_mask)
|
if (mask & input->xkb.alt_mask)
|
||||||
|
|
Loading…
Reference in New Issue