From ccd1cab6bc0b9ca9a12fca36709eaf77ad4949a4 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 8 Aug 2021 17:29:39 +0800 Subject: [PATCH] down as press only for linux and non-modifier --- src/common.rs | 7 +++++-- src/server/connection.rs | 7 ++++++- src/server/input_service.rs | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/common.rs b/src/common.rs index 486579876..380b67b4a 100644 --- a/src/common.rs +++ b/src/common.rs @@ -150,8 +150,7 @@ pub fn resample_channels( if x.is_empty() { Vec::new() } else if x.len() == 2 { - x[0] - .chunks(1) + x[0].chunks(1) .zip(x[1].chunks(1)) .flat_map(|(a, b)| a.into_iter().chain(b)) .map(|x| *x as f32) @@ -395,6 +394,10 @@ pub fn is_modifier(evt: &KeyEvent) -> bool { || v == ControlKey::Shift.value() || v == ControlKey::Control.value() || v == ControlKey::Meta.value() + || v == ControlKey::RAlt.value() + || v == ControlKey::RShift.value() + || v == ControlKey::RControl.value() + || v == ControlKey::RWin.value() } else { false } diff --git a/src/server/connection.rs b/src/server/connection.rs index 3e7a1dc6a..8c366a604 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -647,7 +647,12 @@ impl Connection { // 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 { + let is_press = if cfg!(target_os = "linux") { + (me.press || me.down) && !crate::is_modifier(&me) + } else { + me.press + }; + if is_press { 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/server/input_service.rs b/src/server/input_service.rs index 3383b9a6b..17f73fe5f 100644 --- a/src/server/input_service.rs +++ b/src/server/input_service.rs @@ -305,10 +305,10 @@ fn handle_mouse_(evt: &MouseEvent, conn: i32) { let mut en = ENIGO.lock().unwrap(); #[cfg(not(target_os = "macos"))] let mut to_release = Vec::new(); + fix_modifiers(&evt.modifiers[..], &mut en, 0); if evt_type == 1 { #[cfg(target_os = "macos")] en.reset_flag(); - fix_modifiers(&evt.modifiers[..], &mut en, 0); for ref ck in evt.modifiers.iter() { if let Some(key) = KEY_MAP.get(&ck.value()) { #[cfg(target_os = "macos")]