From 21679f215acfa7ae86072362c5d91b0cc4ed1fcd Mon Sep 17 00:00:00 2001 From: ZeusCraft10 Date: Fri, 26 Dec 2025 12:03:06 -0500 Subject: [PATCH] fix: Prevent system hang on double Caps Lock press --- src/input/mod.rs | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/input/mod.rs b/src/input/mod.rs index b5dbd3b2..2a62947c 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -1774,25 +1774,31 @@ impl State { && handle.modified_sym() == Keysym::Caps_Lock && (modifiers.serialized.locked & 2) != 0 { - let serial = SERIAL_COUNTER.next_serial(); - let time = self.common.clock.now().as_millis(); - keyboard.input( - self, - event.key_code(), - KeyState::Pressed, - serial, - time, - |_, _, _| FilterResult::<()>::Forward, - ); - let serial = SERIAL_COUNTER.next_serial(); - keyboard.input( - self, - event.key_code(), - KeyState::Released, - serial, - time, - |_, _, _| FilterResult::<()>::Forward, - ); + let seat = seat.clone(); + let key_code = event.key_code(); + self.common.event_loop_handle.insert_idle(move |state| { + if let Some(keyboard) = seat.get_keyboard() { + let serial = SERIAL_COUNTER.next_serial(); + let time = state.common.clock.now().as_millis(); + keyboard.input( + state, + key_code, + KeyState::Pressed, + serial, + time, + |_, _, _| FilterResult::<()>::Forward, + ); + let serial = SERIAL_COUNTER.next_serial(); + keyboard.input( + state, + key_code, + KeyState::Released, + serial, + time, + |_, _, _| FilterResult::<()>::Forward, + ); + } + }); } } else if event.state() == KeyState::Pressed && self