mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
righ key mapping and fix mac crash
This commit is contained in:
@@ -1068,7 +1068,7 @@ lazy_static::lazy_static! {
|
||||
("VK_RETURN", Key::ControlKey(ControlKey::Return)),
|
||||
("VK_SHIFT", Key::ControlKey(ControlKey::Shift)),
|
||||
("VK_CONTROL", Key::ControlKey(ControlKey::Control)),
|
||||
("VK_MENU", Key::ControlKey(ControlKey::Menu)),
|
||||
("VK_MENU", Key::ControlKey(ControlKey::Alt)),
|
||||
("VK_PAUSE", Key::ControlKey(ControlKey::Pause)),
|
||||
("VK_CAPITAL", Key::ControlKey(ControlKey::CapsLock)),
|
||||
("VK_KANA", Key::ControlKey(ControlKey::Kana)),
|
||||
@@ -1107,6 +1107,10 @@ lazy_static::lazy_static! {
|
||||
("VK_NUMPAD7", Key::ControlKey(ControlKey::Numpad7)),
|
||||
("VK_NUMPAD8", Key::ControlKey(ControlKey::Numpad8)),
|
||||
("VK_NUMPAD9", Key::ControlKey(ControlKey::Numpad9)),
|
||||
("RAlt", Key::ControlKey(ControlKey::RAlt)),
|
||||
("RWin", Key::ControlKey(ControlKey::RWin)),
|
||||
("RControl", Key::ControlKey(ControlKey::RControl)),
|
||||
("RShift", Key::ControlKey(ControlKey::RShift)),
|
||||
("CTRL_ALT_DEL", Key::ControlKey(ControlKey::CtrlAltDel)),
|
||||
("LOCK_SCREEN", Key::ControlKey(ControlKey::LockScreen)),
|
||||
].iter().cloned().collect();
|
||||
|
||||
@@ -174,7 +174,6 @@ pub fn is_left_up(evt: &MouseEvent) -> bool {
|
||||
|
||||
#[cfg(windows)]
|
||||
pub fn mouse_move_relative(x: i32, y: i32) {
|
||||
#[cfg(windows)]
|
||||
crate::platform::windows::try_change_desktop();
|
||||
let mut en = ENIGO.lock().unwrap();
|
||||
en.mouse_move_relative(x, y);
|
||||
@@ -340,7 +339,7 @@ lazy_static::lazy_static! {
|
||||
(ControlKey::Numpad9, enigo::Key::Numpad9),
|
||||
(ControlKey::Cancel, enigo::Key::Cancel),
|
||||
(ControlKey::Clear, enigo::Key::Clear),
|
||||
(ControlKey::Menu, enigo::Key::Menu),
|
||||
(ControlKey::Menu, enigo::Key::Alt),
|
||||
(ControlKey::Pause, enigo::Key::Pause),
|
||||
(ControlKey::Kana, enigo::Key::Kana),
|
||||
(ControlKey::Hangul, enigo::Key::Hangul),
|
||||
@@ -368,6 +367,10 @@ lazy_static::lazy_static! {
|
||||
(ControlKey::Divide, enigo::Key::Divide),
|
||||
(ControlKey::Equals, enigo::Key::Equals),
|
||||
(ControlKey::NumpadEnter, enigo::Key::NumpadEnter),
|
||||
(ControlKey::RAlt, enigo::Key::RightAlt),
|
||||
(ControlKey::RWin, enigo::Key::RWin),
|
||||
(ControlKey::RControl, enigo::Key::RightControl),
|
||||
(ControlKey::RShift, enigo::Key::RightShift),
|
||||
].iter().map(|(a, b)| (a.value(), b.clone())).collect();
|
||||
static ref NUMPAD_KEY_MAP: HashMap<i32, bool> =
|
||||
[
|
||||
|
||||
@@ -711,6 +711,7 @@ impl Handler {
|
||||
0x4C => key_event.set_control_key(ControlKey::NumpadEnter), // numpad enter
|
||||
0x69 => key_event.set_control_key(ControlKey::Snapshot),
|
||||
0x72 => key_event.set_control_key(ControlKey::Help),
|
||||
0x6E => key_event.set_control_key(ControlKey::Apps),
|
||||
0x47 => {
|
||||
key_event.set_control_key(if self.peer_platform() == "Mac OS" {
|
||||
ControlKey::Clear
|
||||
@@ -732,6 +733,7 @@ impl Handler {
|
||||
0x91 => key_event.set_control_key(ControlKey::Scroll),
|
||||
0x90 => key_event.set_control_key(ControlKey::NumLock),
|
||||
0x5C => key_event.set_control_key(ControlKey::RWin),
|
||||
0x5B => key_event.set_control_key(ControlKey::Meta),
|
||||
0x5D => key_event.set_control_key(ControlKey::Apps),
|
||||
0xBE => key_event.set_chr('.' as _),
|
||||
0xC0 => key_event.set_chr('`' as _),
|
||||
@@ -740,6 +742,44 @@ impl Handler {
|
||||
return None;
|
||||
}
|
||||
}
|
||||
} else if cfg!(target_os = "linux") {
|
||||
match code {
|
||||
65300 => key_event.set_control_key(ControlKey::Scroll),
|
||||
65421 => key_event.set_control_key(ControlKey::NumpadEnter), // numpad enter
|
||||
65407 => key_event.set_control_key(ControlKey::NumLock),
|
||||
65516 => key_event.set_control_key(ControlKey::RWin),
|
||||
65513 => key_event.set_control_key(ControlKey::Alt),
|
||||
65514 => key_event.set_control_key(ControlKey::RAlt),
|
||||
65508 => key_event.set_control_key(ControlKey::RControl),
|
||||
65506 => key_event.set_control_key(ControlKey::RShift),
|
||||
96 => key_event.set_chr('`' as _),
|
||||
46 => key_event.set_chr('.' as _),
|
||||
126 => key_event.set_chr('`' as _),
|
||||
33 => key_event.set_chr('1' as _),
|
||||
64 => key_event.set_chr('2' as _),
|
||||
35 => key_event.set_chr('3' as _),
|
||||
36 => key_event.set_chr('4' as _),
|
||||
37 => key_event.set_chr('5' as _),
|
||||
94 => key_event.set_chr('6' as _),
|
||||
38 => key_event.set_chr('7' as _),
|
||||
42 => key_event.set_chr('8' as _),
|
||||
40 => key_event.set_chr('9' as _),
|
||||
41 => key_event.set_chr('0' as _),
|
||||
95 => key_event.set_chr('-' as _),
|
||||
43 => key_event.set_chr('=' as _),
|
||||
123 => key_event.set_chr('[' as _),
|
||||
125 => key_event.set_chr(']' as _),
|
||||
124 => key_event.set_chr('\\' as _),
|
||||
58 => key_event.set_chr(';' as _),
|
||||
34 => key_event.set_chr('\'' as _),
|
||||
60 => key_event.set_chr(',' as _),
|
||||
62 => key_event.set_chr('.' as _),
|
||||
63 => key_event.set_chr('/' as _),
|
||||
_ => {
|
||||
log::error!("Unknown key code {}", code);
|
||||
return None;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log::error!("Unknown key code {}", code);
|
||||
return None;
|
||||
@@ -820,6 +860,17 @@ impl Handler {
|
||||
extended,
|
||||
);
|
||||
|
||||
let mut name = name;
|
||||
|
||||
if extended {
|
||||
match name.as_ref() {
|
||||
"VK_CONTROL" => name = "RControl".to_owned(),
|
||||
"VK_MENU" => name = "RAlt".to_owned(),
|
||||
"VK_SHIFT" => name = "RShift".to_owned(),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user