mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-04 04:06:06 -05:00
input: track meta modifier
This commit is contained in:
parent
c5747fbd7d
commit
9ca01436ee
3 changed files with 10 additions and 2 deletions
9
input.c
9
input.c
|
|
@ -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
|
||||
|
|
|
|||
1
keymap.h
1
keymap.h
|
|
@ -11,6 +11,7 @@ enum modifier {
|
|||
MOD_SHIFT = 0x2,
|
||||
MOD_ALT = 0x4,
|
||||
MOD_CTRL = 0x8,
|
||||
MOD_META = 0x10,
|
||||
};
|
||||
|
||||
struct key_data {
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue