Sync Caps status

This commit is contained in:
Asura 2022-07-18 01:54:54 -07:00
parent 7ae065739c
commit 828795b437
2 changed files with 44 additions and 11 deletions

View File

@ -579,20 +579,46 @@ pub fn handle_key(evt: &KeyEvent) {
handle_key_(evt);
}
fn map_keyboard_map(evt: &KeyEvent) {
// map mode(1): Send keycode according to the peer platform.
let event_type = match evt.down {
true => EventType::KeyPress(RdevKey::Unknown(evt.get_chr())),
false => EventType::KeyRelease(RdevKey::Unknown(evt.get_chr())),
};
match simulate(&event_type) {
fn rdev_simulate(event_type: &EventType) {
let delay = std::time::Duration::from_millis(20);
match simulate(event_type) {
Ok(()) => (),
Err(_simulate_error) => {
// todo
log::error!("rdev could not send {:?}", event_type);
}
}
// Let ths OS catchup (at least MacOS)
std::thread::sleep(delay);
}
fn map_keyboard_map(evt: &KeyEvent) {
// map mode(1): Send keycode according to the peer platform.
let mut en = ENIGO.lock().unwrap();
// sync CAPS status
let caps_locking = evt
.modifiers
.iter()
.position(|&r| r == ControlKey::CapsLock.into())
.is_some();
println!("[*] remote, client: {:?} {:?}", caps_locking, en.get_key_state(enigo::Key::CapsLock));
if caps_locking && !en.get_key_state(enigo::Key::CapsLock)
{
println!("[*]: Changing status");
rdev_simulate(&EventType::KeyPress(RdevKey::CapsLock));
rdev_simulate(&EventType::KeyRelease(RdevKey::CapsLock));
}else if !caps_locking && en.get_key_state(enigo::Key::CapsLock){
println!("[*]: Changing status");
rdev_simulate(&EventType::KeyPress(RdevKey::CapsLock));
rdev_simulate(&EventType::KeyRelease(RdevKey::CapsLock));
};
let event_type = match evt.down {
true => EventType::KeyPress(RdevKey::Unknown(evt.get_chr())),
false => EventType::KeyRelease(RdevKey::Unknown(evt.get_chr())),
};
rdev_simulate(&event_type);
return;
}
@ -791,8 +817,10 @@ mod test {
});
// set key/char base on char
let mut evt = KeyEvent::new();
evt.set_chr(49);
evt.mode = 3;
evt.set_chr(66);
evt.mode = 1;
evt.modifiers.push(ControlKey::CapsLock.into());
// press
evt.down = true;

View File

@ -984,6 +984,11 @@ impl Handler {
} else {
key_event.down = false;
}
if get_key_state(enigo::Key::CapsLock) {
key_event.modifiers.push(ControlKey::CapsLock.into());
}
self.send_key_event(key_event, 1);
}
@ -1236,7 +1241,7 @@ impl Handler {
key_event.down = true;
}
dbg!(&key_event);
self.send_key_event(key_event, 2)
self.send_key_event(key_event, 3)
}
fn key_down_or_up(&mut self, down_or_up: bool, key: RdevKey, evt: Event) {