fix: keyboard, translate mode (#9406)
hotkey, linux -> win Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
parent
47139edd81
commit
ddd3401bd7
@ -1448,17 +1448,27 @@ fn translate_keyboard_mode(evt: &KeyEvent) {
|
||||
en.key_sequence(seq);
|
||||
#[cfg(any(target_os = "linux", target_os = "windows"))]
|
||||
{
|
||||
if get_modifier_state(Key::Shift, &mut en) {
|
||||
simulate_(&EventType::KeyRelease(RdevKey::ShiftLeft));
|
||||
}
|
||||
if get_modifier_state(Key::RightShift, &mut en) {
|
||||
simulate_(&EventType::KeyRelease(RdevKey::ShiftRight));
|
||||
#[cfg(target_os = "windows")]
|
||||
let simulate_win_hot_key = is_hot_key_modifiers_down(&mut en);
|
||||
#[cfg(target_os = "linux")]
|
||||
let simulate_win_hot_key = false;
|
||||
if !simulate_win_hot_key {
|
||||
if get_modifier_state(Key::Shift, &mut en) {
|
||||
simulate_(&EventType::KeyRelease(RdevKey::ShiftLeft));
|
||||
}
|
||||
if get_modifier_state(Key::RightShift, &mut en) {
|
||||
simulate_(&EventType::KeyRelease(RdevKey::ShiftRight));
|
||||
}
|
||||
}
|
||||
for chr in seq.chars() {
|
||||
// char in rust is 4 bytes.
|
||||
// But for this case, char comes from keyboard. We only need 2 bytes.
|
||||
#[cfg(target_os = "windows")]
|
||||
rdev::simulate_unicode(chr as _).ok();
|
||||
if simulate_win_hot_key {
|
||||
rdev::simulate_char(chr, true).ok();
|
||||
} else {
|
||||
rdev::simulate_unicode(chr as _).ok();
|
||||
}
|
||||
#[cfg(target_os = "linux")]
|
||||
en.key_click(Key::Layout(chr));
|
||||
}
|
||||
@ -1483,6 +1493,17 @@ fn translate_keyboard_mode(evt: &KeyEvent) {
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[cfg(target_os = "windows")]
|
||||
fn is_hot_key_modifiers_down(en: &mut Enigo) -> bool {
|
||||
en.get_key_state(Key::Control)
|
||||
|| en.get_key_state(Key::RightControl)
|
||||
|| en.get_key_state(Key::Alt)
|
||||
|| en.get_key_state(Key::RightAlt)
|
||||
|| en.get_key_state(Key::Meta)
|
||||
|| en.get_key_state(Key::RWin)
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
fn simulate_win2win_hotkey(code: u32, down: bool) {
|
||||
let unicode: u16 = (code & 0x0000FFFF) as u16;
|
||||
|
Loading…
x
Reference in New Issue
Block a user