Merge pull request #2507 from fufesou/keyboard

fix key stick
This commit is contained in:
RustDesk 2022-12-10 14:59:20 +08:00 committed by GitHub
commit bdd0fbbe6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 14 deletions

View File

@ -46,6 +46,12 @@ lazy_static::lazy_static! {
}; };
} }
#[cfg(feature = "flutter")]
pub fn set_cur_session(session: Session<FlutterHandler>) {
*CUR_SESSION.lock().unwrap() = Some(session);
}
#[cfg(not(feature = "flutter"))]
pub fn set_cur_session(session: Session<SciterHandler>) { pub fn set_cur_session(session: Session<SciterHandler>) {
*CUR_SESSION.lock().unwrap() = Some(session); *CUR_SESSION.lock().unwrap() = Some(session);
} }
@ -91,7 +97,7 @@ pub mod client {
} }
} }
pub fn process_event(event: Event) { pub fn process_event(event: &Event) {
if is_long_press(&event) { if is_long_press(&event) {
return; return;
} }
@ -181,19 +187,25 @@ pub mod client {
pub fn start_grab_loop() { pub fn start_grab_loop() {
#[cfg(any(target_os = "windows", target_os = "macos"))] #[cfg(any(target_os = "windows", target_os = "macos"))]
std::thread::spawn(move || { std::thread::spawn(move || {
let func = move |event: Event| match event.event_type { let try_handle_keyboard = move |event: Event, key: Key, is_press: bool| -> Option<Event> {
EventType::KeyPress(key) | EventType::KeyRelease(key) => {
// fix #2211CAPS LOCK don't work // fix #2211CAPS LOCK don't work
if key == Key::CapsLock || key == Key::NumLock { if key == Key::CapsLock || key == Key::NumLock {
return Some(event); return Some(event);
} }
if KEYBOARD_HOOKED.load(Ordering::SeqCst) { if KEYBOARD_HOOKED.load(Ordering::SeqCst) {
client::process_event(event); client::process_event(&event);
if is_press {
return None; return None;
} else { } else {
return Some(event); return Some(event);
} }
} else {
return Some(event);
} }
};
let func = move |event: Event| match event.event_type {
EventType::KeyPress(key) => try_handle_keyboard(event, key, true),
EventType::KeyRelease(key) => try_handle_keyboard(event, key, false),
_ => Some(event), _ => Some(event),
}; };
if let Err(error) = rdev::grab(func) { if let Err(error) = rdev::grab(func) {
@ -207,7 +219,7 @@ pub fn start_grab_loop() {
if let Key::Unknown(keycode) = key { if let Key::Unknown(keycode) = key {
log::error!("rdev get unknown key, keycode is : {:?}", keycode); log::error!("rdev get unknown key, keycode is : {:?}", keycode);
} else { } else {
client::process_event(event); client::process_event(&event);
} }
None None
} }
@ -237,7 +249,7 @@ pub fn release_remote_keys() {
for key in to_release { for key in to_release {
let event_type = EventType::KeyRelease(key); let event_type = EventType::KeyRelease(key);
let event = event_type_to_event(event_type); let event = event_type_to_event(event_type);
client::process_event(event); client::process_event(&event);
} }
} }

View File

@ -130,8 +130,9 @@ pub fn start(args: &mut [String]) {
pass.clone(), pass.clone(),
args.clone(), args.clone(),
); );
let inner = handler.inner(); #[cfg(not(feature = "flutter"))]
crate::keyboard::set_cur_session(inner); crate::keyboard::set_cur_session(handler.inner());
Box::new(handler) Box::new(handler)
}); });
page = "remote.html"; page = "remote.html";

View File

@ -393,7 +393,7 @@ impl<T: InvokeUiSession> Session<T> {
scan_code: scancode as _, scan_code: scancode as _,
event_type: event_type, event_type: event_type,
}; };
keyboard::client::process_event(event); keyboard::client::process_event(&event);
} }
// flutter only TODO new input // flutter only TODO new input