diff --git a/src/server/input_service.rs b/src/server/input_service.rs index 7dbba0e05..2f2dd7743 100644 --- a/src/server/input_service.rs +++ b/src/server/input_service.rs @@ -640,11 +640,32 @@ fn sync_status(evt: &KeyEvent) -> (bool, bool) { || (!caps_locking && en.get_key_state(enigo::Key::CapsLock)); let click_numlock = (num_locking && !en.get_key_state(enigo::Key::NumLock)) || (!num_locking && en.get_key_state(enigo::Key::NumLock)); + #[cfg(windows)] + let click_numlock = { + let code = evt.chr(); + let key = rdev::get_win_key(code, 0); + match key { + RdevKey::Home | + RdevKey::UpArrow | + RdevKey::PageUp | + RdevKey::LeftArrow | + RdevKey::RightArrow | + RdevKey::End | + RdevKey::DownArrow | + RdevKey::PageDown | + RdevKey::Insert | + RdevKey::Delete => en.get_key_state(enigo::Key::NumLock), + _ => click_numlock, + } + }; return (click_capslock, click_numlock); } fn map_keyboard_mode(evt: &KeyEvent) { // map mode(1): Send keycode according to the peer platform. + #[cfg(windows)] + crate::platform::windows::try_change_desktop(); + let (click_capslock, click_numlock) = sync_status(evt); // Wayland