From 7d787e3072a309419fafcc7a8bfb279f35999e5e Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Mon, 29 Dec 2025 18:41:18 +0100 Subject: [PATCH] wl_keyboard: avoid sending leave during state change --- src/ifs/wl_seat/wl_keyboard.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ifs/wl_seat/wl_keyboard.rs b/src/ifs/wl_seat/wl_keyboard.rs index 8ef93455..e598f30b 100644 --- a/src/ifs/wl_seat/wl_keyboard.rs +++ b/src/ifs/wl_seat/wl_keyboard.rs @@ -60,14 +60,24 @@ impl WlKeyboard { serial: u64, kb_state: &KeyboardState, surface_id: WlSurfaceId, - send_leave: bool, + on_surface: bool, ) { self.kb_state_id.set(kb_state.id); - if send_leave { - self.send_leave(serial, surface_id); + let send_enter; + if on_surface { + if self.pressed_keys.borrow().is_empty() && kb_state.pressed_keys.is_empty() { + send_enter = false; + } else { + self.send_leave(serial, surface_id); + send_enter = true; + } + } else { + send_enter = true; } self.send_keymap(kb_state); - self.send_enter(serial, surface_id, &kb_state.pressed_keys); + if send_enter { + self.send_enter(serial, surface_id, &kb_state.pressed_keys); + } self.send_modifiers(serial, &kb_state.mods); }