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_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_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_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) */ /* Compose (dead keys) */
term->kbd.xkb_compose_table = xkb_compose_table_new_from_locale( 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 ctrl = 1 << term->kbd.mod_ctrl;
const xkb_mod_mask_t alt = 1 << term->kbd.mod_alt; 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 shift = 1 << term->kbd.mod_shift;
const xkb_mod_mask_t meta = 1 << term->kbd.mod_meta;
if (state == XKB_KEY_UP) { if (state == XKB_KEY_UP) {
stop_repeater(term, key); 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); 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 = xkb_state_key_get_consumed_mods(term->kbd.xkb_state, key);
xkb_mod_mask_t consumed = 0x0; 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; xkb_mod_mask_t effective_mods = mods & ~consumed & significant;
#if 0 #if 0
for (size_t i = 0; i < 32; i++) { for (size_t i = 0; i < 32; i++) {
if (mods & (1 << 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 #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.shift ? MOD_SHIFT : MOD_NONE;
keymap_mods |= term->kbd.alt ? MOD_ALT : MOD_NONE; keymap_mods |= term->kbd.alt ? MOD_ALT : MOD_NONE;
keymap_mods |= term->kbd.ctrl ? MOD_CTRL : 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 (effective_mods == shift) {
if (sym == XKB_KEY_Page_Up) { 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.xkb_state, term->kbd.mod_alt, XKB_STATE_MODS_DEPRESSED);
term->kbd.ctrl = xkb_state_mod_index_is_active( term->kbd.ctrl = xkb_state_mod_index_is_active(
term->kbd.xkb_state, term->kbd.mod_ctrl, XKB_STATE_MODS_DEPRESSED); 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 static void

View file

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

View file

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