Sync Caps status
This commit is contained in:
parent
7ae065739c
commit
828795b437
@ -579,20 +579,46 @@ pub fn handle_key(evt: &KeyEvent) {
|
|||||||
handle_key_(evt);
|
handle_key_(evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_keyboard_map(evt: &KeyEvent) {
|
fn rdev_simulate(event_type: &EventType) {
|
||||||
// map mode(1): Send keycode according to the peer platform.
|
let delay = std::time::Duration::from_millis(20);
|
||||||
let event_type = match evt.down {
|
match simulate(event_type) {
|
||||||
true => EventType::KeyPress(RdevKey::Unknown(evt.get_chr())),
|
|
||||||
false => EventType::KeyRelease(RdevKey::Unknown(evt.get_chr())),
|
|
||||||
};
|
|
||||||
|
|
||||||
match simulate(&event_type) {
|
|
||||||
Ok(()) => (),
|
Ok(()) => (),
|
||||||
Err(_simulate_error) => {
|
Err(_simulate_error) => {
|
||||||
// todo
|
// todo
|
||||||
log::error!("rdev could not send {:?}", event_type);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -791,8 +817,10 @@ mod test {
|
|||||||
});
|
});
|
||||||
// set key/char base on char
|
// set key/char base on char
|
||||||
let mut evt = KeyEvent::new();
|
let mut evt = KeyEvent::new();
|
||||||
evt.set_chr(49);
|
evt.set_chr(66);
|
||||||
evt.mode = 3;
|
evt.mode = 1;
|
||||||
|
|
||||||
|
evt.modifiers.push(ControlKey::CapsLock.into());
|
||||||
|
|
||||||
// press
|
// press
|
||||||
evt.down = true;
|
evt.down = true;
|
||||||
|
@ -984,6 +984,11 @@ impl Handler {
|
|||||||
} else {
|
} else {
|
||||||
key_event.down = false;
|
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);
|
self.send_key_event(key_event, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1236,7 +1241,7 @@ impl Handler {
|
|||||||
key_event.down = true;
|
key_event.down = true;
|
||||||
}
|
}
|
||||||
dbg!(&key_event);
|
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) {
|
fn key_down_or_up(&mut self, down_or_up: bool, key: RdevKey, evt: Event) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user