input: track meta modifier

This commit is contained in:
Daniel Eklöf 2019-08-15 19:38:28 +02:00
parent c5747fbd7d
commit 9ca01436ee
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 10 additions and 2 deletions

View file

@ -66,6 +66,7 @@ keyboard_keymap(void *data, struct wl_keyboard *wl_keyboard,
term->kbd.mod_shift = xkb_keymap_mod_get_index(term->kbd.xkb_keymap, "Shift");
term->kbd.mod_alt = xkb_keymap_mod_get_index(term->kbd.xkb_keymap, "Mod1") ;
term->kbd.mod_ctrl = xkb_keymap_mod_get_index(term->kbd.xkb_keymap, "Control");
term->kbd.mod_meta = xkb_keymap_mod_get_index(term->kbd.xkb_keymap, "Mod4");
/* Compose (dead keys) */
term->kbd.xkb_compose_table = xkb_compose_table_new_from_locale(
@ -147,6 +148,7 @@ keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial,
const xkb_mod_mask_t ctrl = 1 << term->kbd.mod_ctrl;
const xkb_mod_mask_t alt = 1 << term->kbd.mod_alt;
const xkb_mod_mask_t shift = 1 << term->kbd.mod_shift;
const xkb_mod_mask_t meta = 1 << term->kbd.mod_meta;
if (state == XKB_KEY_UP) {
stop_repeater(term, key);
@ -173,13 +175,13 @@ keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial,
term->kbd.xkb_state, XKB_STATE_MODS_DEPRESSED);
//xkb_mod_mask_t consumed = xkb_state_key_get_consumed_mods(term->kbd.xkb_state, key);
xkb_mod_mask_t consumed = 0x0;
xkb_mod_mask_t significant = ctrl | alt | shift;
xkb_mod_mask_t significant = ctrl | alt | shift | meta;
xkb_mod_mask_t effective_mods = mods & ~consumed & significant;
#if 0
for (size_t i = 0; i < 32; i++) {
if (mods & (1 << i)) {
LOG_DBG("%s", xkb_keymap_mod_get_name(term->kbd.xkb_keymap, i));
LOG_INFO("%s", xkb_keymap_mod_get_name(term->kbd.xkb_keymap, i));
}
}
#endif
@ -194,6 +196,7 @@ keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial,
keymap_mods |= term->kbd.shift ? MOD_SHIFT : MOD_NONE;
keymap_mods |= term->kbd.alt ? MOD_ALT : MOD_NONE;
keymap_mods |= term->kbd.ctrl ? MOD_CTRL : MOD_NONE;
keymap_mods |= term->kbd.meta ? MOD_META : MOD_NONE;
if (effective_mods == shift) {
if (sym == XKB_KEY_Page_Up) {
@ -329,6 +332,8 @@ keyboard_modifiers(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial,
term->kbd.xkb_state, term->kbd.mod_alt, XKB_STATE_MODS_DEPRESSED);
term->kbd.ctrl = xkb_state_mod_index_is_active(
term->kbd.xkb_state, term->kbd.mod_ctrl, XKB_STATE_MODS_DEPRESSED);
term->kbd.meta = xkb_state_mod_index_is_active(
term->kbd.xkb_state, term->kbd.mod_meta, XKB_STATE_MODS_DEPRESSED);
}
static void

View file

@ -11,6 +11,7 @@ enum modifier {
MOD_SHIFT = 0x2,
MOD_ALT = 0x4,
MOD_CTRL = 0x8,
MOD_META = 0x10,
};
struct key_data {

View file

@ -188,11 +188,13 @@ struct kbd {
xkb_mod_index_t mod_shift;
xkb_mod_index_t mod_alt;
xkb_mod_index_t mod_ctrl;
xkb_mod_index_t mod_meta;
/* Enabled modifiers */
bool shift;
bool alt;
bool ctrl;
bool meta;
};
enum cursor_keys { CURSOR_KEYS_DONTCARE, CURSOR_KEYS_NORMAL, CURSOR_KEYS_APPLICATION};