From f441d2fe5ec4fdc64ff45344ca5aa8f8e3c7aaca Mon Sep 17 00:00:00 2001 From: asur4s Date: Mon, 20 Mar 2023 23:58:10 -0700 Subject: [PATCH 01/10] fix rename event in linux --- src/keyboard.rs | 12 ++++++------ src/ui_session_interface.rs | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index 42cff9ce0..0f969181a 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -460,8 +460,8 @@ pub fn event_type_to_event(event_type: EventType) -> Event { event_type, time: SystemTime::now(), unicode: None, - code: 0, - scan_code: 0, + platform_code: 0, + position_code: 0, } } @@ -763,15 +763,15 @@ pub fn map_keyboard_mode(peer: &str, event: &Event, mut key_event: KeyEvent) -> }; #[cfg(target_os = "linux")] let keycode = match peer { - OS_LOWER_WINDOWS => rdev::linux_code_to_win_scancode(event.code as _)?, + OS_LOWER_WINDOWS => rdev::linux_code_to_win_scancode(event.position_code as _)?, OS_LOWER_MACOS => { if hbb_common::config::LocalConfig::get_kb_layout_type() == "ISO" { - rdev::linux_code_to_macos_iso_code(event.code as _)? + rdev::linux_code_to_macos_iso_code(event.position_code as _)? } else { - rdev::linux_code_to_macos_code(event.code as _)? + rdev::linux_code_to_macos_code(event.position_code as _)? } } - _ => event.code as _, + _ => event.position_code as _, }; #[cfg(any(target_os = "android", target_os = "ios"))] let keycode = 0; diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 2fd095347..8a1da6b8f 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -562,8 +562,8 @@ impl Session { let event = Event { time: SystemTime::now(), unicode: None, - code: keycode as _, - scan_code: scancode as _, + platform_code: keycode as _, + position_code: scancode as _, event_type: event_type, }; keyboard::client::process_event(&event, Some(lock_modes)); From f709118c69e0445e423d582a113a51a681783b88 Mon Sep 17 00:00:00 2001 From: asur4s Date: Tue, 21 Mar 2023 00:09:36 -0700 Subject: [PATCH 02/10] Check if event is altgr --- src/keyboard.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/keyboard.rs b/src/keyboard.rs index 0f969181a..3337ddf64 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -880,6 +880,10 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - } } + if event.platform_code == 0xFE03 { + return events; + } + #[cfg(target_os = "linux")] try_fill_unicode(event, &key_event, &mut events); From f35302b9f5aa8ad43ffe035e83254b400adb3153 Mon Sep 17 00:00:00 2001 From: asur4s Date: Tue, 21 Mar 2023 17:28:58 -0700 Subject: [PATCH 03/10] fix conflict --- flutter/lib/desktop/widgets/remote_toolbar.dart | 5 ----- 1 file changed, 5 deletions(-) diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index ec039b67c..804d74499 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -1688,11 +1688,6 @@ class _KeyboardMenu extends StatelessWidget { if (pi.is_wayland && mode.key != _kKeyMapMode) { continue; } - if (mode.key == _kKeyTranslateMode) { - if (Platform.isLinux) { - continue; - } - } var text = translate(mode.menu); if (mode.key == _kKeyTranslateMode) { text = '$text beta'; From e90ac742f4f9c77cc589caf9af89227cac25c5e2 Mon Sep 17 00:00:00 2001 From: chiehw Date: Tue, 21 Mar 2023 15:23:48 +0800 Subject: [PATCH 04/10] fix rename event in win --- src/keyboard.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index 3337ddf64..6cf61f2fd 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -227,8 +227,8 @@ pub fn start_grab_loop() { } let mut _keyboard_mode = KeyboardMode::Map; - let _scan_code = event.scan_code; - let _code = event.code; + let _scan_code = event.position_code; + let _code = event.platform_code; let res = if KEYBOARD_HOOKED.load(Ordering::SeqCst) { _keyboard_mode = client::process_event(&event, None); if is_press { @@ -546,7 +546,7 @@ pub fn legacy_keyboard_mode(event: &Event, mut key_event: KeyEvent) -> Vec> 8) == 0xE0 { + if (event.position_code >> 8) == 0xE0 { unsafe { IS_ALT_GR = true; } @@ -741,19 +741,19 @@ pub fn map_keyboard_mode(peer: &str, event: &Event, mut key_event: KeyEvent) -> OS_LOWER_WINDOWS => { // https://github.com/rustdesk/rustdesk/issues/1371 // Filter scancodes that are greater than 255 and the hight word is not 0xE0. - if event.scan_code > 255 && (event.scan_code >> 8) != 0xE0 { + if event.position_code > 255 && (event.position_code >> 8) != 0xE0 { return None; } - event.scan_code + event.position_code } OS_LOWER_MACOS => { if hbb_common::config::LocalConfig::get_kb_layout_type() == "ISO" { - rdev::win_scancode_to_macos_iso_code(event.scan_code)? + rdev::win_scancode_to_macos_iso_code(event.position_code)? } else { - rdev::win_scancode_to_macos_code(event.scan_code)? + rdev::win_scancode_to_macos_code(event.position_code)? } } - _ => rdev::win_scancode_to_linux_code(event.scan_code)?, + _ => rdev::win_scancode_to_linux_code(event.position_code)?, }; #[cfg(target_os = "macos")] let keycode = match peer { @@ -795,7 +795,7 @@ fn try_fill_unicode(event: &Event, key_event: &KeyEvent, events: &mut Vec bool { #[cfg(target_os = "windows")] pub fn translate_key_code(peer: &str, event: &Event, key_event: KeyEvent) -> Option { let mut key_event = map_keyboard_mode(peer, event, key_event)?; - key_event.set_chr((key_event.chr() & 0x0000FFFF) | ((event.code as u32) << 16)); + key_event.set_chr((key_event.chr() & 0x0000FFFF) | ((event.platform_code as u32) << 16)); Some(key_event) } @@ -857,12 +857,12 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - #[cfg(target_os = "windows")] unsafe { - if event.scan_code == 0x021D { + if event.position_code == 0x021D { return events; } if IS_0X021D_DOWN { - if event.scan_code == 0xE038 { + if event.position_code == 0xE038 { return events; } } From 5b6cf273934cd2caf453148183ddc4c0bae4efea Mon Sep 17 00:00:00 2001 From: Asura Date: Wed, 22 Mar 2023 06:38:42 +0800 Subject: [PATCH 05/10] fix rename event in macos --- src/keyboard.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index 6cf61f2fd..09d7f398b 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -757,9 +757,9 @@ pub fn map_keyboard_mode(peer: &str, event: &Event, mut key_event: KeyEvent) -> }; #[cfg(target_os = "macos")] let keycode = match peer { - OS_LOWER_WINDOWS => rdev::macos_code_to_win_scancode(event.code as _)?, - OS_LOWER_MACOS => event.code as _, - _ => rdev::macos_code_to_linux_code(event.code as _)?, + OS_LOWER_WINDOWS => rdev::macos_code_to_win_scancode(event.platform_code as _)?, + OS_LOWER_MACOS => event.platform_code as _, + _ => rdev::macos_code_to_linux_code(event.platform_code as _)?, }; #[cfg(target_os = "linux")] let keycode = match peer { @@ -851,7 +851,7 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - #[cfg(target_os = "macos")] // ignore right option key - if event.code as u32 == rdev::kVK_RightOption { + if event.platform_code as u32 == rdev::kVK_RightOption { return events; } From e99af2b0d4d54f80ac6d9bf217e71a8f73270145 Mon Sep 17 00:00:00 2001 From: chiehw Date: Wed, 22 Mar 2023 08:11:41 +0800 Subject: [PATCH 06/10] Refactor: is altgr --- src/keyboard.rs | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index 09d7f398b..b3d8e4211 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -833,6 +833,35 @@ pub fn translate_key_code(peer: &str, event: &Event, key_event: KeyEvent) -> Opt map_keyboard_mode(peer, event, key_event) } +#[inline] +fn is_altgr(event: &Event) -> bool { + #[cfg(target_os = "linux")] + if event.platform_code == 0xFE03 { + true + } else { + false + } + + #[cfg(target_os = "macos")] + // ignore right option key + if event.platform_code as u32 == rdev::kVK_RightOption { + true + } else { + false + } + + #[cfg(target_os = "windows")] + if unsafe { IS_0X021D_DOWN } { + if event.position_code == 0xE038 { + true + } else { + false + } + } else { + false + } +} + pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) -> Vec { let mut events: Vec = Vec::new(); if let Some(unicode_info) = &event.unicode { @@ -849,23 +878,13 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - } } - #[cfg(target_os = "macos")] - // ignore right option key - if event.platform_code as u32 == rdev::kVK_RightOption { + if is_altgr(event) { return events; } #[cfg(target_os = "windows")] - unsafe { - if event.position_code == 0x021D { - return events; - } - - if IS_0X021D_DOWN { - if event.position_code == 0xE038 { - return events; - } - } + if event.position_code == 0x021D { + return events; } #[cfg(target_os = "windows")] @@ -880,10 +899,6 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - } } - if event.platform_code == 0xFE03 { - return events; - } - #[cfg(target_os = "linux")] try_fill_unicode(event, &key_event, &mut events); From 8478c2ba48cfc32dea08209542349f9d2f6cc026 Mon Sep 17 00:00:00 2001 From: chiehw Date: Wed, 22 Mar 2023 08:17:11 +0800 Subject: [PATCH 07/10] Refactor: is press --- src/keyboard.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index b3d8e4211..2a131e13a 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -862,6 +862,10 @@ fn is_altgr(event: &Event) -> bool { } } +fn is_press(event: &Event) -> bool { + matches!(event.event_type, EventType::KeyPress(_)) +} + pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) -> Vec { let mut events: Vec = Vec::new(); if let Some(unicode_info) = &event.unicode { @@ -887,8 +891,8 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - return events; } - #[cfg(target_os = "windows")] - if matches!(event.event_type, EventType::KeyPress(_)) { + #[cfg(any(target_os = "linux", target_os = "windows"))] + if is_press(event) { try_fill_unicode(event, &key_event, &mut events); } @@ -899,9 +903,6 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - } } - #[cfg(target_os = "linux")] - try_fill_unicode(event, &key_event, &mut events); - #[cfg(target_os = "macos")] if !unsafe { IS_LEFT_OPTION_DOWN } { try_fill_unicode(event, &key_event, &mut events); From 33a1ab0d321eb3ba23247c2604eafe7cd2fb450f Mon Sep 17 00:00:00 2001 From: asur4s Date: Wed, 22 Mar 2023 05:09:02 -0700 Subject: [PATCH 08/10] Refactor is altgr for clearer expression --- src/keyboard.rs | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index 2a131e13a..55c30a3f3 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -842,21 +842,9 @@ fn is_altgr(event: &Event) -> bool { false } - #[cfg(target_os = "macos")] - // ignore right option key - if event.platform_code as u32 == rdev::kVK_RightOption { - true - } else { - false - } - #[cfg(target_os = "windows")] - if unsafe { IS_0X021D_DOWN } { - if event.position_code == 0xE038 { - true - } else { - false - } + if unsafe { IS_0X021D_DOWN } && event.position_code == 0xE038 { + true } else { false } @@ -882,6 +870,13 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - } } + #[cfg(target_os = "macos")] + // ignore right option key + if event.code as u32 == rdev::kVK_RightOption { + return events; + } + + #[cfg(not(target_os = "macos"))] if is_altgr(event) { return events; } From 0e49cd0f01cf83c623318e1148d71978fed4c279 Mon Sep 17 00:00:00 2001 From: asur4s Date: Wed, 22 Mar 2023 05:09:20 -0700 Subject: [PATCH 09/10] Update rdev --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index b80b4d924..b62f82745 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4721,7 +4721,7 @@ dependencies = [ [[package]] name = "rdev" version = "0.5.0-2" -source = "git+https://github.com/fufesou/rdev#25a99ce71ab42843ad253dd51e6a35e83e87a8a4" +source = "git+https://github.com/fufesou/rdev#eaa35ff9af22891b4aae3a0a5e83472c16177cd8" dependencies = [ "cocoa", "core-foundation 0.9.3", From 4d076988cd8d675aa72bab643900d1df04d6a856 Mon Sep 17 00:00:00 2001 From: asur4s Date: Wed, 22 Mar 2023 05:32:15 -0700 Subject: [PATCH 10/10] fix ci --- src/keyboard.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index 55c30a3f3..ce68657ea 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -834,6 +834,7 @@ pub fn translate_key_code(peer: &str, event: &Event, key_event: KeyEvent) -> Opt } #[inline] +#[cfg(any(target_os = "linux", target_os = "windows"))] fn is_altgr(event: &Event) -> bool { #[cfg(target_os = "linux")] if event.platform_code == 0xFE03 { @@ -872,11 +873,11 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - #[cfg(target_os = "macos")] // ignore right option key - if event.code as u32 == rdev::kVK_RightOption { + if event.platform_code as u32 == rdev::kVK_RightOption { return events; } - #[cfg(not(target_os = "macos"))] + #[cfg(any(target_os = "linux", target_os = "windows"))] if is_altgr(event) { return events; }