wayland: fix num/caps lock handling in events

locks are not the same as modifiers, and the corresponding event flag must
be set based on whichever value(s) are set instead of yolo mixing and matching

@fix

ref T5737
This commit is contained in:
Mike Blumenkrantz 2017-08-18 15:24:51 -04:00
parent dae39821d9
commit dc073c1ea3
3 changed files with 21 additions and 2 deletions

View File

@ -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

View File

@ -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 =

View File

@ -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;