fix: Prevent system hang on double Caps Lock press

This commit is contained in:
ZeusCraft10 2025-12-26 12:03:06 -05:00 committed by Jacob Kauffmann
parent fdf015cbcf
commit 21679f215a

View file

@ -1774,25 +1774,31 @@ impl State {
&& handle.modified_sym() == Keysym::Caps_Lock && handle.modified_sym() == Keysym::Caps_Lock
&& (modifiers.serialized.locked & 2) != 0 && (modifiers.serialized.locked & 2) != 0
{ {
let serial = SERIAL_COUNTER.next_serial(); let seat = seat.clone();
let time = self.common.clock.now().as_millis(); let key_code = event.key_code();
keyboard.input( self.common.event_loop_handle.insert_idle(move |state| {
self, if let Some(keyboard) = seat.get_keyboard() {
event.key_code(), let serial = SERIAL_COUNTER.next_serial();
KeyState::Pressed, let time = state.common.clock.now().as_millis();
serial, keyboard.input(
time, state,
|_, _, _| FilterResult::<()>::Forward, key_code,
); KeyState::Pressed,
let serial = SERIAL_COUNTER.next_serial(); serial,
keyboard.input( time,
self, |_, _, _| FilterResult::<()>::Forward,
event.key_code(), );
KeyState::Released, let serial = SERIAL_COUNTER.next_serial();
serial, keyboard.input(
time, state,
|_, _, _| FilterResult::<()>::Forward, key_code,
); KeyState::Released,
serial,
time,
|_, _, _| FilterResult::<()>::Forward,
);
}
});
} }
} else if event.state() == KeyState::Pressed } else if event.state() == KeyState::Pressed
&& self && self