Merge pull request #3932 from fufesou/fix/single_meta_key
fix press/release single meta key
This commit is contained in:
commit
cfbd2fd6c4
@ -3,6 +3,8 @@
|
|||||||
pub mod platform;
|
pub mod platform;
|
||||||
mod keyboard;
|
mod keyboard;
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
|
pub use keyboard::keycode_to_rdev_key;
|
||||||
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
pub use platform::{get_cursor, get_cursor_data, get_cursor_pos, start_os_service};
|
pub use platform::{get_cursor, get_cursor_data, get_cursor_pos, start_os_service};
|
||||||
#[cfg(not(any(target_os = "ios")))]
|
#[cfg(not(any(target_os = "ios")))]
|
||||||
/// cbindgen:ignore
|
/// cbindgen:ignore
|
||||||
|
@ -1371,6 +1371,35 @@ fn simulate_win2win_hotkey(code: u32, down: bool) {
|
|||||||
allow_err!(rdev::simulate_code(Some(keycode), None, down));
|
allow_err!(rdev::simulate_code(Some(keycode), None, down));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(any(target_os = "windows", target_os = "linux")))]
|
||||||
|
fn is_win_linux_meta_key(_evt: &KeyEvent) -> bool {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(target_os = "windows", target_os = "linux"))]
|
||||||
|
fn is_win_linux_meta_key(evt: &KeyEvent) -> bool {
|
||||||
|
match evt.mode.unwrap() {
|
||||||
|
KeyboardMode::Map | KeyboardMode::Translate => match &evt.union {
|
||||||
|
Some(key_event::Union::ControlKey(ck)) => {
|
||||||
|
return *ck == ControlKey::Meta.into();
|
||||||
|
}
|
||||||
|
Some(key_event::Union::Chr(code)) => {
|
||||||
|
let key = crate::keycode_to_rdev_key(*code);
|
||||||
|
return key == RdevKey::MetaLeft || key == RdevKey::MetaRight;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
},
|
||||||
|
KeyboardMode::Legacy => match &evt.union {
|
||||||
|
Some(key_event::Union::ControlKey(ck)) => {
|
||||||
|
return *ck == ControlKey::Meta.into();
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
},
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
pub fn handle_key_(evt: &KeyEvent) {
|
pub fn handle_key_(evt: &KeyEvent) {
|
||||||
if EXITING.load(Ordering::SeqCst) {
|
if EXITING.load(Ordering::SeqCst) {
|
||||||
return;
|
return;
|
||||||
@ -1381,8 +1410,11 @@ pub fn handle_key_(evt: &KeyEvent) {
|
|||||||
Some(LockModesHandler::new(&evt))
|
Some(LockModesHandler::new(&evt))
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
if evt.down {
|
// LockModesHandler should not be created when single meta is pressing and releasing.
|
||||||
Some(LockModesHandler::new(&evt))
|
// Because the drop function may insert "CapsLock Click" and "NumLock Click", which breaks single meta click.
|
||||||
|
// https://github.com/rustdesk/rustdesk/issues/3928#issuecomment-1496936687
|
||||||
|
if evt.down && !is_win_linux_meta_key(evt) {
|
||||||
|
Some(LockModesHandler::new(evt))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user