From bd8454d3bc0ff8753b278e031ebf865a38ad0f7c Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sat, 15 Feb 2025 01:13:15 +0900 Subject: [PATCH] Revert "wlr_keyboard: don't emit key event for duplicated keycodes" This reverts commit 86eaa44a3a9f5ee315aa1a6a676aeeb911942fd8. That commit caused a regression for IME users in many compositors: when a input_method is activated while a key is pressed, and a virtual keyboard is created by IME, the following key-release event via the virtual keyboard is missed since the key in the virtual keyboard haven't been pressed. For example, pressing and releasing Ctrl+F in Firefox with fcitx5 running triggered repeated keys (ffffff...) in the opened input box. --- include/types/wlr_keyboard.h | 2 +- types/wlr_keyboard.c | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/include/types/wlr_keyboard.h b/include/types/wlr_keyboard.h index bdae09bdd..7cd26e8a5 100644 --- a/include/types/wlr_keyboard.h +++ b/include/types/wlr_keyboard.h @@ -1,6 +1,6 @@ #include -bool keyboard_key_update(struct wlr_keyboard *keyboard, +void keyboard_key_update(struct wlr_keyboard *keyboard, struct wlr_keyboard_key_event *event); bool keyboard_modifier_update(struct wlr_keyboard *keyboard); diff --git a/types/wlr_keyboard.c b/types/wlr_keyboard.c index edf0d3ecb..613b4e841 100644 --- a/types/wlr_keyboard.c +++ b/types/wlr_keyboard.c @@ -66,9 +66,8 @@ bool keyboard_modifier_update(struct wlr_keyboard *keyboard) { return true; } -bool keyboard_key_update(struct wlr_keyboard *keyboard, +void keyboard_key_update(struct wlr_keyboard *keyboard, struct wlr_keyboard_key_event *event) { - size_t old_num_keycodes = keyboard->num_keycodes; if (event->state == WL_KEYBOARD_KEY_STATE_PRESSED) { set_add(keyboard->keycodes, &keyboard->num_keycodes, WLR_KEYBOARD_KEYS_CAP, event->keycode); @@ -79,8 +78,6 @@ bool keyboard_key_update(struct wlr_keyboard *keyboard, } assert(keyboard->num_keycodes <= WLR_KEYBOARD_KEYS_CAP); - - return old_num_keycodes != keyboard->num_keycodes; } void wlr_keyboard_notify_modifiers(struct wlr_keyboard *keyboard, @@ -102,9 +99,8 @@ void wlr_keyboard_notify_modifiers(struct wlr_keyboard *keyboard, void wlr_keyboard_notify_key(struct wlr_keyboard *keyboard, struct wlr_keyboard_key_event *event) { - if (keyboard_key_update(keyboard, event)) { - wl_signal_emit_mutable(&keyboard->events.key, event); - } + keyboard_key_update(keyboard, event); + wl_signal_emit_mutable(&keyboard->events.key, event); if (keyboard->xkb_state == NULL) { return;