Refactor keyboard mode by enum

This commit is contained in:
Asura 2022-07-19 15:43:13 +08:00
parent 0bacc1c250
commit 02b4d7f1d9
4 changed files with 36 additions and 21 deletions

View File

@ -97,6 +97,13 @@ message MouseEvent {
repeated ControlKey modifiers = 4; repeated ControlKey modifiers = 4;
} }
enum KeyboardMode{
Legacy = 0;
Map = 1;
Translate = 2;
Auto = 3;
}
enum ControlKey { enum ControlKey {
Unknown = 0; Unknown = 0;
Alt = 1; Alt = 1;
@ -190,7 +197,7 @@ message KeyEvent {
string seq = 6; string seq = 6;
} }
repeated ControlKey modifiers = 8; repeated ControlKey modifiers = 8;
uint32 mode = 9; KeyboardMode mode = 9;
} }
message CursorData { message CursorData {

View File

@ -420,11 +420,11 @@ impl Connection {
} }
MessageInput::Key((mut msg, press)) => { MessageInput::Key((mut msg, press)) => {
// todo: press and down have similar meanings. // todo: press and down have similar meanings.
if press && msg.mode == 0 { if press && msg.mode.unwrap() == KeyboardMode::Legacy {
msg.down = true; msg.down = true;
} }
handle_key(&msg); handle_key(&msg);
if press && msg.mode == 0 { if press && msg.mode.unwrap() == KeyboardMode::Legacy {
msg.down = false; msg.down = false;
handle_key(&msg); handle_key(&msg);
} }

View File

@ -450,7 +450,7 @@ pub fn lock_screen() {
key_event.down = true; key_event.down = true;
key_event.set_chr('l' as _); key_event.set_chr('l' as _);
key_event.modifiers.push(ControlKey::Meta.into()); key_event.modifiers.push(ControlKey::Meta.into());
key_event.mode = 0; key_event.mode = KeyboardMode::Legacy;
handle_key(&key_event); handle_key(&key_event);
key_event.down = false; key_event.down = false;
handle_key(&key_event); handle_key(&key_event);
@ -463,7 +463,7 @@ pub fn lock_screen() {
key_event.set_chr('q' as _); key_event.set_chr('q' as _);
key_event.modifiers.push(ControlKey::Meta.into()); key_event.modifiers.push(ControlKey::Meta.into());
key_event.modifiers.push(ControlKey::Control.into()); key_event.modifiers.push(ControlKey::Control.into());
key_event.mode = 0; key_event.mode = KeyboardMode::Legacy;
handle_key(&key_event); handle_key(&key_event);
key_event.down = false; key_event.down = false;
handle_key(&key_event); handle_key(&key_event);
@ -787,11 +787,11 @@ fn handle_key_(evt: &KeyEvent) {
return; return;
} }
match evt.mode { match evt.mode.unwrap() {
0 => { KeyboardMode::Legacy => {
legacy_keyboard_map(evt); legacy_keyboard_map(evt);
} }
1 => { KeyboardMode::Map => {
map_keyboard_map(evt); map_keyboard_map(evt);
} }
_ => { _ => {

View File

@ -41,6 +41,7 @@ use hbb_common::{
time::{self, Duration, Instant, Interval}, time::{self, Duration, Instant, Interval},
}, },
Stream, Stream,
protobuf::ProtobufEnumOrUnknown,
}; };
use hbb_common::{config::TransferSerde, fs::TransferJobMeta}; use hbb_common::{config::TransferSerde, fs::TransferJobMeta};
use rdev::{Event, EventType::*, Key as RdevKey}; use rdev::{Event, EventType::*, Key as RdevKey};
@ -921,14 +922,14 @@ impl Handler {
key_event.set_control_key(ControlKey::CtrlAltDel); key_event.set_control_key(ControlKey::CtrlAltDel);
// todo // todo
key_event.down = true; key_event.down = true;
self.send_key_event(key_event, 0); self.send_key_event(key_event, KeyboardMode::Legacy);
} else { } else {
let mut key_event = KeyEvent::new(); let mut key_event = KeyEvent::new();
key_event.set_control_key(ControlKey::Delete); key_event.set_control_key(ControlKey::Delete);
self.legacy_modifiers(&mut key_event, true, true, false, false); self.legacy_modifiers(&mut key_event, true, true, false, false);
// todo // todo
key_event.press = true; key_event.press = true;
self.send_key_event(key_event, 0); self.send_key_event(key_event, KeyboardMode::Legacy);
} }
} }
@ -937,7 +938,7 @@ impl Handler {
key_event.set_control_key(ControlKey::LockScreen); key_event.set_control_key(ControlKey::LockScreen);
// todo // todo
key_event.down = true; key_event.down = true;
self.send_key_event(key_event, 0); self.send_key_event(key_event, KeyboardMode::Legacy);
} }
fn transfer_file(&mut self) { fn transfer_file(&mut self) {
@ -956,9 +957,9 @@ impl Handler {
} }
} }
fn send_key_event(&mut self, mut evt: KeyEvent, keyboard_mode: u32) { fn send_key_event(&mut self, mut evt: KeyEvent, keyboard_mode: KeyboardMode) {
// mode: map(1), translate(2), legacy(3), auto(4) // mode: legacy(0), map(1), translate(2), auto(3)
evt.mode = keyboard_mode; evt.mode = ProtobufEnumOrUnknown::new(keyboard_mode);
let mut msg_out = Message::new(); let mut msg_out = Message::new();
msg_out.set_key_event(evt); msg_out.set_key_event(evt);
log::info!("{:?}", msg_out); log::info!("{:?}", msg_out);
@ -1012,7 +1013,7 @@ impl Handler {
key_event.modifiers.push(ControlKey::NumLock.into()); key_event.modifiers.push(ControlKey::NumLock.into());
} }
self.send_key_event(key_event, 1); self.send_key_event(key_event, KeyboardMode::Map);
} }
// fn translate_keyboard_mode(&mut self, down_or_up: bool, key: RdevKey) { // fn translate_keyboard_mode(&mut self, down_or_up: bool, key: RdevKey) {
@ -1269,15 +1270,22 @@ impl Handler {
if down_or_up == true { if down_or_up == true {
key_event.down = true; key_event.down = true;
} }
dbg!(&key_event); self.send_key_event(key_event, KeyboardMode::Legacy)
self.send_key_event(key_event, 0)
} }
fn key_down_or_up(&mut self, down_or_up: bool, key: RdevKey, evt: Event) { fn key_down_or_up(&mut self, down_or_up: bool, key: RdevKey, evt: Event) {
// Call different functions according to keyboard mode. // Call different functions according to keyboard mode.
let mode = std::env::var("KEYBOARD_MOAD").unwrap_or(String::from("legacy")); let mode = match std::env::var("KEYBOARD_MOAD")
match mode.as_str() { .unwrap_or(String::from("legacy"))
"map" => { .as_str()
{
"map" => KeyboardMode::Map,
"legacy" => KeyboardMode::Legacy,
_ => KeyboardMode::Legacy,
};
match mode {
KeyboardMode::Map => {
if down_or_up == true { if down_or_up == true {
TO_RELEASE.lock().unwrap().insert(key); TO_RELEASE.lock().unwrap().insert(key);
} else { } else {
@ -1285,7 +1293,7 @@ impl Handler {
} }
self.map_keyboard_mode(down_or_up, key); self.map_keyboard_mode(down_or_up, key);
} }
"legacy" => self.legacy_keyboard_mode(down_or_up, key, evt), KeyboardMode::Legacy => self.legacy_keyboard_mode(down_or_up, key, evt),
_ => self.legacy_keyboard_mode(down_or_up, key, evt), _ => self.legacy_keyboard_mode(down_or_up, key, evt),
} }
} }