fix: skip auto-repeat only (value=2), not real key presses

- skip_count=3 applied only to auto-repeat events, never to press/release
- Prevents rrrrrrrrr while letting spacebar and real typing through
- Reverted broken drain approach that corrupted source file
This commit is contained in:
Khoa Vo 2026-06-26 16:16:09 +07:00
parent 4c9acfe772
commit ebfff3db11

View file

@ -831,11 +831,6 @@ fn run_with_evdev(
} }
for event in events { for event in events {
// Skip auto-repeat events that piled up during injection
if skip_count > 0 {
skip_count -= 1;
continue;
}
if let evdev::InputEventKind::Key(key) = event.kind() { if let evdev::InputEventKind::Key(key) = event.kind() {
let value = event.value(); let value = event.value();
let keycode = key.0; let keycode = key.0;
@ -908,7 +903,7 @@ fn run_with_evdev(
consumed_keys.insert(keycode); consumed_keys.insert(keycode);
execute_commands(&*injector, &commands, false); execute_commands(&*injector, &commands, false);
// Skip upcoming auto-repeat pile-up from injection delay // Skip upcoming auto-repeat pile-up from injection delay
skip_count = 10; skip_count = 3;
} else if is_vn_control_key(&daemon.config.input_method, ch) { } else if is_vn_control_key(&daemon.config.input_method, ch) {
// Tone/mark key with no effect — consume silently // Tone/mark key with no effect — consume silently
consumed_keys.insert(keycode); consumed_keys.insert(keycode);
@ -919,8 +914,9 @@ fn run_with_evdev(
injector.send_key_event(keycode, 1); injector.send_key_event(keycode, 1);
} }
} else if value == 2 { } else if value == 2 {
// Auto-repeat: skip if consumed, else forward // Auto-repeat: skip if consumed or during injection drain
if consumed_keys.contains(&keycode) { if consumed_keys.contains(&keycode) || skip_count > 0 {
if skip_count > 0 { skip_count -= 1; }
continue; continue;
} }
injector.send_key_event(keycode, 2); injector.send_key_event(keycode, 2);