rustdesk 2021-12-24 00:27:27 +08:00
parent 0e8fc4a815
commit 885d8a4586

View File

@ -195,15 +195,20 @@ fn modifier_sleep() {
std::thread::sleep(std::time::Duration::from_nanos(1)); std::thread::sleep(std::time::Duration::from_nanos(1));
} }
#[cfg(not(target_os = "macos"))]
#[inline] #[inline]
fn get_modifier_state(key: Key, en: &mut Enigo) -> bool { fn get_modifier_state(key: Key, en: &mut Enigo) -> bool {
// on Linux, if RightAlt is down, RightAlt status is false, Alt status is true
// but on Windows, both are true
let x = en.get_key_state(key.clone()); let x = en.get_key_state(key.clone());
match key { match key {
Key::Shift => x || en.get_key_state(Key::RightShift), Key::Shift => x || en.get_key_state(Key::RightShift),
Key::Control => x || en.get_key_state(Key::RightControl), Key::Control => x || en.get_key_state(Key::RightControl),
Key::Alt => x || en.get_key_state(Key::RightAlt), Key::Alt => x || en.get_key_state(Key::RightAlt),
Key::Meta => x || en.get_key_state(Key::RWin), Key::Meta => x || en.get_key_state(Key::RWin),
Key::RightShift => x || en.get_key_state(Key::Shift),
Key::RightControl => x || en.get_key_state(Key::Control),
Key::RightAlt => x || en.get_key_state(Key::Alt),
Key::RWin => x || en.get_key_state(Key::Meta),
_ => x, _ => x,
} }
} }
@ -262,7 +267,7 @@ fn fix_key_down_timeout(force: bool) {
if let Some(key) = key { if let Some(key) = key {
let func = move || { let func = move || {
let mut en = ENIGO.lock().unwrap(); let mut en = ENIGO.lock().unwrap();
if en.get_key_state(key) { if get_modifier_state(key, &mut en) {
en.key_up(key); en.key_up(key);
log::debug!("Fixed {:?} timeout", key); log::debug!("Fixed {:?} timeout", key);
} }
@ -284,7 +289,7 @@ fn fix_modifier(
key1: Key, key1: Key,
en: &mut Enigo, en: &mut Enigo,
) { ) {
if en.get_key_state(key1) && !modifiers.contains(&ProtobufEnumOrUnknown::new(key0)) { if get_modifier_state(key1, en) && !modifiers.contains(&ProtobufEnumOrUnknown::new(key0)) {
en.key_up(key1); en.key_up(key1);
log::debug!("Fixed {:?}", key1); log::debug!("Fixed {:?}", key1);
} }