diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c b/src/lib/ecore_wl2/ecore_wl2_input.c index da6fe7cd59..d20849eda2 100644 --- a/src/lib/ecore_wl2/ecore_wl2_input.c +++ b/src/lib/ecore_wl2/ecore_wl2_input.c @@ -1152,14 +1152,23 @@ _keyboard_cb_modifiers(void *data, struct wl_keyboard *keyboard EINA_UNUSED, uns input->keyboard.modifiers |= ECORE_EVENT_MODIFIER_SHIFT; if (mask & input->xkb.win_mask) input->keyboard.modifiers |= ECORE_EVENT_MODIFIER_WIN; + if (mask & input->xkb.altgr_mask) + input->keyboard.modifiers |= ECORE_EVENT_MODIFIER_ALTGR; + if (mask & input->xkb.scroll_mask) + input->keyboard.modifiers |= ECORE_EVENT_MODIFIER_SCROLL; + if (mask & input->xkb.num_mask) + input->keyboard.modifiers |= ECORE_EVENT_MODIFIER_NUM; + if (mask & input->xkb.caps_mask) + input->keyboard.modifiers |= ECORE_EVENT_MODIFIER_CAPS; + + + mask = xkb_state_serialize_mods(input->xkb.state, XKB_STATE_MODS_LOCKED); if (mask & input->xkb.scroll_mask) input->keyboard.modifiers |= ECORE_EVENT_LOCK_SCROLL; if (mask & input->xkb.num_mask) input->keyboard.modifiers |= ECORE_EVENT_LOCK_NUM; if (mask & input->xkb.caps_mask) input->keyboard.modifiers |= ECORE_EVENT_LOCK_CAPS; - if (mask & input->xkb.altgr_mask) - input->keyboard.modifiers |= ECORE_EVENT_MODIFIER_ALTGR; } static void diff --git a/src/lib/elput/elput_evdev.c b/src/lib/elput/elput_evdev.c index 1199a09798..09d75932f8 100644 --- a/src/lib/elput/elput_evdev.c +++ b/src/lib/elput/elput_evdev.c @@ -82,6 +82,13 @@ _keyboard_modifiers_update(Elput_Keyboard *kbd, Elput_Seat *seat) seat->modifiers |= ECORE_EVENT_MODIFIER_ALTGR; if (mask & kbd->info->mods.caps) seat->modifiers |= ECORE_EVENT_MODIFIER_CAPS; + if (mask & kbd->info->mods.num) + seat->modifiers |= ECORE_EVENT_MODIFIER_NUM; + + if (kbd->mods.locked & kbd->info->mods.caps) + seat->modifiers |= ECORE_EVENT_LOCK_CAPS; + if (kbd->mods.locked & kbd->info->mods.num) + seat->modifiers |= ECORE_EVENT_LOCK_NUM; if (xkb_state_led_index_is_active(kbd->state, kbd->info->leds.num)) leds |= ELPUT_LED_NUM; @@ -121,6 +128,8 @@ _keyboard_info_create(struct xkb_keymap *keymap) 1 << xkb_keymap_mod_get_index(info->keymap.map, XKB_MOD_NAME_SHIFT); info->mods.caps = 1 << xkb_keymap_mod_get_index(info->keymap.map, XKB_MOD_NAME_CAPS); + info->mods.num = + 1 << xkb_keymap_mod_get_index(info->keymap.map, "Mod2"); info->mods.ctrl = 1 << xkb_keymap_mod_get_index(info->keymap.map, XKB_MOD_NAME_CTRL); info->mods.alt = diff --git a/src/lib/elput/elput_private.h b/src/lib/elput/elput_private.h index f5bc425182..a4ea37b8a1 100644 --- a/src/lib/elput/elput_private.h +++ b/src/lib/elput/elput_private.h @@ -106,6 +106,7 @@ typedef struct _Elput_Keyboard_Info { xkb_mod_index_t shift; xkb_mod_index_t caps; + xkb_mod_index_t num; xkb_mod_index_t ctrl; xkb_mod_index_t alt; xkb_mod_index_t altgr;