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