mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
keyboard: add missing Hyper_ and Meta_ syms to modifier detection
This was forgotten in 65bd32d625
Reported-by: @jonhiggs (thanks)
Also stop treating the synthetic layout change sym as modifier
but still prevent it from being added to the set of pressed keys.
Additionally slightly reformat the code.
This commit is contained in:
parent
a105c8781a
commit
3aa3edd356
1 changed files with 25 additions and 20 deletions
|
|
@ -123,21 +123,23 @@ handle_keybinding(struct server *server, uint32_t modifiers, xkb_keysym_t sym, x
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool is_modifier_key(xkb_keysym_t sym)
|
||||
static bool
|
||||
is_modifier_key(xkb_keysym_t sym)
|
||||
{
|
||||
return sym == XKB_KEY_Shift_L
|
||||
|| sym == XKB_KEY_Shift_R
|
||||
|| sym == XKB_KEY_Alt_L
|
||||
|| sym == XKB_KEY_Alt_R
|
||||
|| sym == XKB_KEY_Control_L
|
||||
|| sym == XKB_KEY_Control_R
|
||||
|| sym == XKB_KEY_Super_L
|
||||
|| sym == XKB_KEY_Super_R
|
||||
/* Right hand Alt key for Mod5 */
|
||||
|| sym == XKB_KEY_Mode_switch
|
||||
|| sym == XKB_KEY_ISO_Level3_Shift
|
||||
/* Prevents storing layout change notifier in pressed */
|
||||
|| sym == XKB_KEY_ISO_Next_Group;
|
||||
switch (sym) {
|
||||
case XKB_KEY_Shift_L: case XKB_KEY_Shift_R:
|
||||
case XKB_KEY_Alt_L: case XKB_KEY_Alt_R:
|
||||
case XKB_KEY_Control_L: case XKB_KEY_Control_R:
|
||||
case XKB_KEY_Super_L: case XKB_KEY_Super_R:
|
||||
case XKB_KEY_Hyper_L: case XKB_KEY_Hyper_R:
|
||||
case XKB_KEY_Meta_L: case XKB_KEY_Meta_R:
|
||||
case XKB_KEY_Mode_switch:
|
||||
case XKB_KEY_ISO_Level3_Shift:
|
||||
case XKB_KEY_ISO_Level5_Shift:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
struct keysyms {
|
||||
|
|
@ -230,11 +232,16 @@ handle_compositor_keybindings(struct keyboard *keyboard,
|
|||
* }
|
||||
*/
|
||||
|
||||
bool ismodifier = false;
|
||||
bool is_modifier = false;
|
||||
bool is_layout_switch = false;
|
||||
uint32_t modifiers = wlr_keyboard_get_modifiers(wlr_keyboard);
|
||||
|
||||
for (int i = 0; i < translated.nr_syms; i++) {
|
||||
ismodifier |= is_modifier_key(translated.syms[i]);
|
||||
is_modifier |= is_modifier_key(translated.syms[i]);
|
||||
is_layout_switch |= translated.syms[i] == XKB_KEY_ISO_Next_Group;
|
||||
}
|
||||
if (!ismodifier) {
|
||||
|
||||
if (!is_modifier && !is_layout_switch) {
|
||||
key_state_set_pressed(event->keycode,
|
||||
event->state == WL_KEYBOARD_KEY_STATE_PRESSED);
|
||||
}
|
||||
|
|
@ -292,8 +299,6 @@ handle_compositor_keybindings(struct keyboard *keyboard,
|
|||
return false;
|
||||
}
|
||||
|
||||
uint32_t modifiers = wlr_keyboard_get_modifiers(wlr_keyboard);
|
||||
|
||||
if (server->input_mode == LAB_INPUT_STATE_MENU) {
|
||||
/*
|
||||
* Usually, release events are already caught via _press_event_was_bound().
|
||||
|
|
@ -326,7 +331,7 @@ handle_compositor_keybindings(struct keyboard *keyboard,
|
|||
|
||||
/* cycle to next */
|
||||
bool backwards = modifiers & WLR_MODIFIER_SHIFT;
|
||||
if (!ismodifier) {
|
||||
if (!is_modifier) {
|
||||
enum lab_cycle_dir dir = backwards
|
||||
? LAB_CYCLE_DIR_BACKWARD
|
||||
: LAB_CYCLE_DIR_FORWARD;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue