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));
}
#[cfg(not(target_os = "macos"))]
#[inline]
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());
match key {
Key::Shift => x || en.get_key_state(Key::RightShift),
Key::Control => x || en.get_key_state(Key::RightControl),
Key::Alt => x || en.get_key_state(Key::RightAlt),
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,
}
}
@ -262,7 +267,7 @@ fn fix_key_down_timeout(force: bool) {
if let Some(key) = key {
let func = move || {
let mut en = ENIGO.lock().unwrap();
if en.get_key_state(key) {
if get_modifier_state(key, &mut en) {
en.key_up(key);
log::debug!("Fixed {:?} timeout", key);
}
@ -284,7 +289,7 @@ fn fix_modifier(
key1: Key,
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);
log::debug!("Fixed {:?}", key1);
}