refact keyboard, mid commit
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
		
							parent
							
								
									d573c6eeb1
								
							
						
					
					
						commit
						4b571aaa33
					
				
							
								
								
									
										3
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										3
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -4305,7 +4305,7 @@ dependencies = [ | ||||
| [[package]] | ||||
| name = "rdev" | ||||
| version = "0.5.0-2" | ||||
| source = "git+https://github.com/asur4s/rdev#3d6d413a9b2ab703edc22071acea31826b0efce3" | ||||
| source = "git+https://github.com/asur4s/rdev#18bb9dd64563fc9761005bb39ff830e6402e326e" | ||||
| dependencies = [ | ||||
|  "cocoa", | ||||
|  "core-foundation 0.9.3", | ||||
| @ -4316,6 +4316,7 @@ dependencies = [ | ||||
|  "inotify", | ||||
|  "lazy_static", | ||||
|  "libc", | ||||
|  "log", | ||||
|  "mio 0.8.5", | ||||
|  "strum 0.24.1", | ||||
|  "strum_macros 0.24.3", | ||||
|  | ||||
| @ -610,11 +610,26 @@ pub fn map_keyboard_mode(event: &Event, key_event: &mut KeyEvent) { | ||||
|         } | ||||
|         _ => return, | ||||
|     }; | ||||
|     let keycode: u32 = match peer.as_str() { | ||||
|         "windows" => rdev::win_keycode_from_key(key).unwrap_or_default().into(), | ||||
| 
 | ||||
|     #[cfg(target_os = "windows")] | ||||
|     let keycode = match peer.as_str() { | ||||
|         "windows" => event.scan_code, | ||||
|         "macos" => rdev::macos_keycode_from_key(key).unwrap_or_default().into(), | ||||
|         _ => rdev::linux_keycode_from_key(key).unwrap_or_default().into(), | ||||
|     }; | ||||
|     #[cfg(target_os = "macos")] | ||||
|     let keycode = match peer.as_str() { | ||||
|         "windows" => rdev::win_scancode_from_key(key).unwrap_or_default().into(), | ||||
|         "macos" => rdev::macos_keycode_from_key(key).unwrap_or_default().into(), | ||||
|         _ => event.code, | ||||
|     }; | ||||
|     #[cfg(target_os = "linux")] | ||||
|     let keycode = match peer.as_str() { | ||||
|         "windows" => rdev::win_scancode_from_key(key).unwrap_or_default().into(), | ||||
|         "macos" => event.code, | ||||
|         _ => rdev::linux_keycode_from_key(key).unwrap_or_default().into(), | ||||
|     }; | ||||
| 
 | ||||
|     key_event.set_chr(keycode); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -5,7 +5,7 @@ use crate::common::IS_X11; | ||||
| use dispatch::Queue; | ||||
| use enigo::{Enigo, Key, KeyboardControllable, MouseButton, MouseControllable}; | ||||
| use hbb_common::{config::COMPRESS_LEVEL, get_time, protobuf::EnumOrUnknown}; | ||||
| use rdev::{simulate, EventType, Key as RdevKey}; | ||||
| use rdev::{self, simulate, EventType, Key as RdevKey, RawKey}; | ||||
| use std::time::Duration; | ||||
| use std::{ | ||||
|     convert::TryFrom, | ||||
| @ -686,6 +686,20 @@ pub fn handle_key(evt: &KeyEvent) { | ||||
|     handle_key_(evt); | ||||
| } | ||||
| 
 | ||||
| fn sim_rdev_rawkey(code: u32, down_or_up: bool) { | ||||
|     #[cfg(target_os = "windows")] | ||||
|     let rawkey = RawKey::ScanCode(code); | ||||
|     #[cfg(target_os = "linux")] | ||||
|     let rawkey = RawKey::LinuxXorgKeycode(code); | ||||
|     // to-do: test android
 | ||||
|     #[cfg(target_os = "android")] | ||||
|     let rawkey = RawKey::LinuxConsoleKeycode(code); | ||||
|     #[cfg(target_os = "macos")] | ||||
|     let rawkey = RawKey::MacVirtualKeycode(code); | ||||
| 
 | ||||
|     rdev_key_down_or_up(RdevKey::RawKey(rawkey), down_or_up); | ||||
| } | ||||
| 
 | ||||
| fn rdev_key_down_or_up(key: RdevKey, down_or_up: bool) { | ||||
|     let event_type = match down_or_up { | ||||
|         true => EventType::KeyPress(key), | ||||
| @ -821,8 +835,7 @@ fn map_keyboard_mode(evt: &KeyEvent) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     rdev_key_down_or_up(RdevKey::Unknown(evt.chr()), evt.down); | ||||
|     return; | ||||
|     sim_rdev_rawkey(evt.chr(), evt.down); | ||||
| } | ||||
| 
 | ||||
| #[cfg(target_os = "macos")] | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user