From 42595d4bae54860e9b043e0483e34eba938ed824 Mon Sep 17 00:00:00 2001 From: vndangkhoa Date: Wed, 24 Jun 2026 18:04:09 +0700 Subject: [PATCH] Fix backspace in grab mode: inject KEY_BACKSPACE via uinput MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When grab is enabled, the physical key is intercepted by evdev grab. The engine's pop() updates the buffer but the KEY_BACKSPACE was never injected — send_char('\x08') can't emit a keycode and fell through to paste_string. Now backspace injects KEY_BACKSPACE press+release via uinput directly. --- daemon/src/main.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/daemon/src/main.rs b/daemon/src/main.rs index 40144f5..71ea131 100644 --- a/daemon/src/main.rs +++ b/daemon/src/main.rs @@ -439,6 +439,19 @@ fn run_with_evdev( // as separate channels have no ordering guarantee. let keycode = key.0; + // Backspace in grab mode: pop engine, inject via uinput. + // send_char('\x08') can't emit a keycode and falls through + // to paste_string, which is wrong. + if key == evdev::Key::KEY_BACKSPACE && grabbed { + if value == 1 || value == 2 { + daemon.engine.process_key('\x08'); + injector.send_key_event(14, 1); + injector.send_key_event(14, 0); + } + consumed_keys.insert(keycode); + continue; + } + if value == 1 { // Press: process through engine if consumed_keys.contains(&keycode) {