refact keyboard, mid commit

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou 2022-12-15 17:16:05 +08:00
parent d573c6eeb1
commit 4b571aaa33
3 changed files with 35 additions and 6 deletions

3
Cargo.lock generated
View File

@ -4305,7 +4305,7 @@ dependencies = [
[[package]]
name = "rdev"
version = "0.5.0-2"
source = "git+https://github.com/asur4s/rdev#3d6d413a9b2ab703edc22071acea31826b0efce3"
source = "git+https://github.com/asur4s/rdev#18bb9dd64563fc9761005bb39ff830e6402e326e"
dependencies = [
"cocoa",
"core-foundation 0.9.3",
@ -4316,6 +4316,7 @@ dependencies = [
"inotify",
"lazy_static",
"libc",
"log",
"mio 0.8.5",
"strum 0.24.1",
"strum_macros 0.24.3",

View File

@ -610,11 +610,26 @@ pub fn map_keyboard_mode(event: &Event, key_event: &mut KeyEvent) {
}
_ => 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(),
_ => 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);
}

View File

@ -5,7 +5,7 @@ use crate::common::IS_X11;
use dispatch::Queue;
use enigo::{Enigo, Key, KeyboardControllable, MouseButton, MouseControllable};
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::{
convert::TryFrom,
@ -686,6 +686,20 @@ pub fn handle_key(evt: &KeyEvent) {
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) {
let event_type = match down_or_up {
true => EventType::KeyPress(key),
@ -821,8 +835,7 @@ fn map_keyboard_mode(evt: &KeyEvent) {
return;
}
rdev_key_down_or_up(RdevKey::Unknown(evt.chr()), evt.down);
return;
sim_rdev_rawkey(evt.chr(), evt.down);
}
#[cfg(target_os = "macos")]