refact keyboard, mid commit
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
d573c6eeb1
commit
4b571aaa33
3
Cargo.lock
generated
3
Cargo.lock
generated
@ -4305,7 +4305,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "rdev"
|
name = "rdev"
|
||||||
version = "0.5.0-2"
|
version = "0.5.0-2"
|
||||||
source = "git+https://github.com/asur4s/rdev#3d6d413a9b2ab703edc22071acea31826b0efce3"
|
source = "git+https://github.com/asur4s/rdev#18bb9dd64563fc9761005bb39ff830e6402e326e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cocoa",
|
"cocoa",
|
||||||
"core-foundation 0.9.3",
|
"core-foundation 0.9.3",
|
||||||
@ -4316,6 +4316,7 @@ dependencies = [
|
|||||||
"inotify",
|
"inotify",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
|
"log",
|
||||||
"mio 0.8.5",
|
"mio 0.8.5",
|
||||||
"strum 0.24.1",
|
"strum 0.24.1",
|
||||||
"strum_macros 0.24.3",
|
"strum_macros 0.24.3",
|
||||||
|
@ -610,11 +610,26 @@ pub fn map_keyboard_mode(event: &Event, key_event: &mut KeyEvent) {
|
|||||||
}
|
}
|
||||||
_ => return,
|
_ => return,
|
||||||
};
|
};
|
||||||
let keycode: u32 = match peer.as_str() {
|
|
||||||
"windows" => rdev::win_keycode_from_key(key).unwrap_or_default().into(),
|
#[cfg(target_os = "windows")]
|
||||||
|
let keycode = match peer.as_str() {
|
||||||
|
"windows" => event.scan_code,
|
||||||
"macos" => rdev::macos_keycode_from_key(key).unwrap_or_default().into(),
|
"macos" => rdev::macos_keycode_from_key(key).unwrap_or_default().into(),
|
||||||
_ => rdev::linux_keycode_from_key(key).unwrap_or_default().into(),
|
_ => rdev::linux_keycode_from_key(key).unwrap_or_default().into(),
|
||||||
};
|
};
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
let keycode = match peer.as_str() {
|
||||||
|
"windows" => rdev::win_scancode_from_key(key).unwrap_or_default().into(),
|
||||||
|
"macos" => rdev::macos_keycode_from_key(key).unwrap_or_default().into(),
|
||||||
|
_ => event.code,
|
||||||
|
};
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
let keycode = match peer.as_str() {
|
||||||
|
"windows" => rdev::win_scancode_from_key(key).unwrap_or_default().into(),
|
||||||
|
"macos" => event.code,
|
||||||
|
_ => rdev::linux_keycode_from_key(key).unwrap_or_default().into(),
|
||||||
|
};
|
||||||
|
|
||||||
key_event.set_chr(keycode);
|
key_event.set_chr(keycode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ use crate::common::IS_X11;
|
|||||||
use dispatch::Queue;
|
use dispatch::Queue;
|
||||||
use enigo::{Enigo, Key, KeyboardControllable, MouseButton, MouseControllable};
|
use enigo::{Enigo, Key, KeyboardControllable, MouseButton, MouseControllable};
|
||||||
use hbb_common::{config::COMPRESS_LEVEL, get_time, protobuf::EnumOrUnknown};
|
use hbb_common::{config::COMPRESS_LEVEL, get_time, protobuf::EnumOrUnknown};
|
||||||
use rdev::{simulate, EventType, Key as RdevKey};
|
use rdev::{self, simulate, EventType, Key as RdevKey, RawKey};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{
|
use std::{
|
||||||
convert::TryFrom,
|
convert::TryFrom,
|
||||||
@ -686,6 +686,20 @@ pub fn handle_key(evt: &KeyEvent) {
|
|||||||
handle_key_(evt);
|
handle_key_(evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn sim_rdev_rawkey(code: u32, down_or_up: bool) {
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
let rawkey = RawKey::ScanCode(code);
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
let rawkey = RawKey::LinuxXorgKeycode(code);
|
||||||
|
// to-do: test android
|
||||||
|
#[cfg(target_os = "android")]
|
||||||
|
let rawkey = RawKey::LinuxConsoleKeycode(code);
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
let rawkey = RawKey::MacVirtualKeycode(code);
|
||||||
|
|
||||||
|
rdev_key_down_or_up(RdevKey::RawKey(rawkey), down_or_up);
|
||||||
|
}
|
||||||
|
|
||||||
fn rdev_key_down_or_up(key: RdevKey, down_or_up: bool) {
|
fn rdev_key_down_or_up(key: RdevKey, down_or_up: bool) {
|
||||||
let event_type = match down_or_up {
|
let event_type = match down_or_up {
|
||||||
true => EventType::KeyPress(key),
|
true => EventType::KeyPress(key),
|
||||||
@ -821,8 +835,7 @@ fn map_keyboard_mode(evt: &KeyEvent) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
rdev_key_down_or_up(RdevKey::Unknown(evt.chr()), evt.down);
|
sim_rdev_rawkey(evt.chr(), evt.down);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user