From 2dd9fc17c17cbc9b09f8a364682c5759d6539a8d Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Tue, 17 Apr 2018 14:03:12 +0200 Subject: [PATCH] clutter/evdev: Don't ignore CAPS lock as modifier Mark CAPS lock as a modifier (as it should) so that when using XKB options to change the default behaviour of CAPS lock, the new assigned key can by used as a sticky key as well. Closes: https://gitlab.gnome.org/GNOME/mutter/issues/112 (cherry picked from commit 6df2b7af556bf01f8d564b86c66c293678ab6b90) --- clutter/clutter/evdev/clutter-input-device-evdev.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/clutter/clutter/evdev/clutter-input-device-evdev.c b/clutter/clutter/evdev/clutter-input-device-evdev.c index e5dee650f..51c7e942c 100644 --- a/clutter/clutter/evdev/clutter-input-device-evdev.c +++ b/clutter/clutter/evdev/clutter-input-device-evdev.c @@ -433,6 +433,8 @@ key_event_is_modifier (ClutterEvent *event) case XKB_KEY_Super_R: case XKB_KEY_Hyper_L: case XKB_KEY_Hyper_R: + case XKB_KEY_Caps_Lock: + case XKB_KEY_Shift_Lock: return TRUE; default: return FALSE; @@ -584,6 +586,12 @@ handle_stickykeys_press (ClutterEvent *event, } depressed_mods = xkb_state_serialize_mods (seat->xkb, XKB_STATE_MODS_DEPRESSED); + /* Ignore the lock modifier mask, that one cannot be sticky, yet the + * CAPS_LOCK key itself counts as a modifier as it might be remapped + * to some other modifier which can be sticky. + */ + depressed_mods &= ~CLUTTER_LOCK_MASK; + new_latched_mask = device->stickykeys_latched_mask; new_locked_mask = device->stickykeys_locked_mask;