From d56cf92794c311ac23807b87d006e687f613efb5 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Thu, 28 Sep 2023 20:44:57 +0100 Subject: [PATCH] keyboard: fix release event bug after session lock Do not withhold the release event associated with a keybind which executes a keyboard-input-inhibiting client like swaylock. In other words, make release-events of absorbed keys (those used up by a keybind) de-register as such even though session-lock or input-inhibit is in-force. Fixes: issue #1114 Helped-by: @Consolatis --- src/keyboard.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index b3d44766..3f954c7c 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -232,18 +232,6 @@ handle_compositor_keybindings(struct keyboard *keyboard, event->state == WL_KEYBOARD_KEY_STATE_PRESSED); } - /* - * Ignore labwc keybindings if input is inhibited - * It's important to do this after key_state_set_pressed() to ensure - * _all_ key press/releases are registered - */ - if (seat->active_client_while_inhibited) { - return false; - } - if (seat->server->session_lock) { - return false; - } - /* * If a user lets go of the modifier (e.g. alt) before the 'normal' key * (e.g. tab) when window-cycling, we do not end the cycling until both @@ -269,6 +257,18 @@ handle_compositor_keybindings(struct keyboard *keyboard, return true; } + /* + * Ignore labwc keybindings if input is inhibited + * It's important to do this after key_state_set_pressed() to ensure + * _all_ key press/releases are registered + */ + if (seat->active_client_while_inhibited) { + return false; + } + if (seat->server->session_lock) { + return false; + } + uint32_t modifiers = wlr_keyboard_get_modifiers(wlr_keyboard); /* Catch C-A-F1 to C-A-F12 to change tty */ -- 2.52.0