From e6e36d38a3e5cf71eb2bb2e1354075be239acd1e Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 31 Mar 2023 11:48:37 +0800 Subject: [PATCH 1/2] translate mode, win, fix hotkeys Signed-off-by: fufesou --- src/keyboard.rs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index 294e058c5..e7de62329 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -843,7 +843,7 @@ pub fn map_keyboard_mode(_peer: &str, event: &Event, mut key_event: KeyEvent) -> } #[cfg(not(any(target_os = "android", target_os = "ios")))] -fn try_fill_unicode(event: &Event, key_event: &KeyEvent, events: &mut Vec) { +fn try_fill_unicode(peer: &str, event: &Event, key_event: &KeyEvent, events: &mut Vec) { match &event.unicode { Some(unicode_info) => { if let Some(name) = &unicode_info.name { @@ -857,11 +857,13 @@ fn try_fill_unicode(event: &Event, key_event: &KeyEvent, events: &mut Vec { #[cfg(target_os = "windows")] - if is_hot_key_modifiers_down() && unsafe { !IS_0X021D_DOWN } { - if let Some(chr) = get_char_by_vk(event.platform_code as u32) { - let mut evt = key_event.clone(); - evt.set_seq(chr.to_string()); - events.push(evt); + if peer == OS_LOWER_LINUX { + if is_hot_key_modifiers_down() && unsafe { !IS_0X021D_DOWN } { + if let Some(chr) = get_char_by_vk(event.platform_code as u32) { + let mut evt = key_event.clone(); + evt.set_seq(chr.to_string()); + events.push(evt); + } } } } @@ -886,7 +888,12 @@ fn is_hot_key_modifiers_down() -> 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.platform_code as u32) << 16)); + let chr = if peer == OS_LOWER_WINDOWS { + (key_event.chr() & 0x0000FFFF) | ((event.platform_code as u32) << 16) + } else { + key_event.chr() + }; + key_event.set_chr(chr); Some(key_event) } @@ -962,7 +969,7 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - #[cfg(any(target_os = "linux", target_os = "windows"))] if is_press(event) { - try_fill_unicode(event, &key_event, &mut events); + try_fill_unicode(peer, event, &key_event, &mut events); } #[cfg(target_os = "windows")] From 8cbb367b79d968b67a47c891d899d0e8cf173f71 Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 31 Mar 2023 12:13:50 +0800 Subject: [PATCH 2/2] fix build Signed-off-by: fufesou --- src/keyboard.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index e7de62329..93bcf7ff0 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -843,7 +843,7 @@ pub fn map_keyboard_mode(_peer: &str, event: &Event, mut key_event: KeyEvent) -> } #[cfg(not(any(target_os = "android", target_os = "ios")))] -fn try_fill_unicode(peer: &str, event: &Event, key_event: &KeyEvent, events: &mut Vec) { +fn try_fill_unicode(_peer: &str, event: &Event, key_event: &KeyEvent, events: &mut Vec) { match &event.unicode { Some(unicode_info) => { if let Some(name) = &unicode_info.name { @@ -857,7 +857,7 @@ fn try_fill_unicode(peer: &str, event: &Event, key_event: &KeyEvent, events: &mu None => { #[cfg(target_os = "windows")] - if peer == OS_LOWER_LINUX { + if _peer == OS_LOWER_LINUX { if is_hot_key_modifiers_down() && unsafe { !IS_0X021D_DOWN } { if let Some(chr) = get_char_by_vk(event.platform_code as u32) { let mut evt = key_event.clone(); @@ -981,7 +981,7 @@ pub fn translate_keyboard_mode(peer: &str, event: &Event, key_event: KeyEvent) - #[cfg(target_os = "macos")] if !unsafe { IS_LEFT_OPTION_DOWN } { - try_fill_unicode(event, &key_event, &mut events); + try_fill_unicode(peer, event, &key_event, &mut events); } if events.is_empty() {