win, tranlsate mode, handle shift

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou 2023-02-06 16:26:27 +08:00
parent 6e54cd2e6b
commit 6eec0041bd

View File

@ -88,14 +88,17 @@ pub mod client {
} }
} }
pub fn process_event(event: &Event, lock_modes: Option<i32>) { pub fn process_event(event: &Event, lock_modes: Option<i32>) -> KeyboardMode {
let keyboard_mode = get_keyboard_mode_enum();
if is_long_press(&event) { if is_long_press(&event) {
return; return keyboard_mode;
} }
for key_event in event_to_key_events(&event, lock_modes) { for key_event in event_to_key_events(&event, keyboard_mode, lock_modes) {
send_key_event(&key_event); send_key_event(&key_event);
} }
keyboard_mode
} }
pub fn get_modifiers_state( pub fn get_modifiers_state(
@ -205,7 +208,14 @@ pub fn start_grab_loop() {
return Some(event); return Some(event);
} }
if KEYBOARD_HOOKED.load(Ordering::SeqCst) { if KEYBOARD_HOOKED.load(Ordering::SeqCst) {
client::process_event(&event, None); let keyboard_mode = client::process_event(&event, None);
if keyboard_mode == KeyboardMode::Translate {
// shift
if event.scan_code == 0x2A {
return Some(event);
}
}
if is_press { if is_press {
return None; return None;
} else { } else {
@ -342,7 +352,7 @@ fn update_modifiers_state(event: &Event) {
}; };
} }
pub fn event_to_key_events(event: &Event, lock_modes: Option<i32>) -> Vec<KeyEvent> { pub fn event_to_key_events(event: &Event, keyboard_mode: KeyboardMode, lock_modes: Option<i32>) -> Vec<KeyEvent> {
let mut key_event = KeyEvent::new(); let mut key_event = KeyEvent::new();
update_modifiers_state(event); update_modifiers_state(event);
@ -356,7 +366,6 @@ pub fn event_to_key_events(event: &Event, lock_modes: Option<i32>) -> Vec<KeyEve
_ => {} _ => {}
} }
let keyboard_mode = get_keyboard_mode_enum();
key_event.mode = keyboard_mode.into(); key_event.mode = keyboard_mode.into();
let mut key_events = match keyboard_mode { let mut key_events = match keyboard_mode {
KeyboardMode::Map => match map_keyboard_mode(event, key_event) { KeyboardMode::Map => match map_keyboard_mode(event, key_event) {