This commit is contained in:
parent
0e8fc4a815
commit
885d8a4586
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user