From 3200002e52fad12d806eebc6d7083992bdc676b8 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 6 Aug 2021 14:23:50 +0800 Subject: [PATCH] fix unexpected repeating key input on remote linux https://github.com/rustdesk/rustdesk/issues/189 --- src/server/connection.rs | 5 ++++- src/ui/remote.rs | 27 --------------------------- 2 files changed, 4 insertions(+), 28 deletions(-) diff --git a/src/server/connection.rs b/src/server/connection.rs index 376c56c44..3e7a1dc6a 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -644,7 +644,10 @@ impl Connection { } Some(message::Union::key_event(mut me)) => { if self.keyboard { - if me.press { + // handle all down as press + // fix unexpected repeating key on remote linux, seems also fix abnormal alt/shift, which + // make sure all key are released + if me.press || me.down { if let Some(key_event::Union::unicode(_)) = me.union { handle_key(&me); } else if let Some(key_event::Union::seq(_)) = me.union { diff --git a/src/ui/remote.rs b/src/ui/remote.rs index 3d90603cf..0ac398222 100644 --- a/src/ui/remote.rs +++ b/src/ui/remote.rs @@ -901,33 +901,6 @@ impl Handler { } if let Some(mut key_event) = self.get_key_event(down_or_up, &name, code) { - // Linux has different repeated key down handling from mac and windows - /* // below cause hang some time, not find why, so disable. so shift + repeat char not work for mac->linux, win->linux works fine, linux->linux not test yet - if self.peer_platform() == "Linux" { - if down_or_up == 1 { - let mut is_repeat = false; - if let Some(x) = self.read().unwrap().last_down_key.as_ref() { - is_repeat = x.0 == name && x.1 == code && x.2 == extended; - } - if is_repeat { - self.key_down_or_up( - 0, - name.clone(), - code, - alt, - ctrl, - shift, - command, - extended, - ); - log::debug!("Repeated key down"); - } - self.write().unwrap().last_down_key = Some((name, code, extended)); - } else { - self.write().unwrap().last_down_key.take(); - } - } - */ if alt && !crate::is_control_key(&key_event, &ControlKey::Alt) && !crate::is_control_key(&key_event, &ControlKey::RAlt)