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]] | [[package]] | ||||||
| name = "rdev" | name = "rdev" | ||||||
| version = "0.5.0-2" | version = "0.5.0-2" | ||||||
| source = "git+https://github.com/asur4s/rdev#3d6d413a9b2ab703edc22071acea31826b0efce3" | source = "git+https://github.com/asur4s/rdev#18bb9dd64563fc9761005bb39ff830e6402e326e" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "cocoa", |  "cocoa", | ||||||
|  "core-foundation 0.9.3", |  "core-foundation 0.9.3", | ||||||
| @ -4316,6 +4316,7 @@ dependencies = [ | |||||||
|  "inotify", |  "inotify", | ||||||
|  "lazy_static", |  "lazy_static", | ||||||
|  "libc", |  "libc", | ||||||
|  |  "log", | ||||||
|  "mio 0.8.5", |  "mio 0.8.5", | ||||||
|  "strum 0.24.1", |  "strum 0.24.1", | ||||||
|  "strum_macros 0.24.3", |  "strum_macros 0.24.3", | ||||||
|  | |||||||
| @ -610,11 +610,26 @@ pub fn map_keyboard_mode(event: &Event, key_event: &mut KeyEvent) { | |||||||
|         } |         } | ||||||
|         _ => return, |         _ => 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(), |         "macos" => rdev::macos_keycode_from_key(key).unwrap_or_default().into(), | ||||||
|         _ => rdev::linux_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); |     key_event.set_chr(keycode); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ use crate::common::IS_X11; | |||||||
| use dispatch::Queue; | use dispatch::Queue; | ||||||
| use enigo::{Enigo, Key, KeyboardControllable, MouseButton, MouseControllable}; | use enigo::{Enigo, Key, KeyboardControllable, MouseButton, MouseControllable}; | ||||||
| use hbb_common::{config::COMPRESS_LEVEL, get_time, protobuf::EnumOrUnknown}; | 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::time::Duration; | ||||||
| use std::{ | use std::{ | ||||||
|     convert::TryFrom, |     convert::TryFrom, | ||||||
| @ -686,6 +686,20 @@ pub fn handle_key(evt: &KeyEvent) { | |||||||
|     handle_key_(evt); |     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) { | fn rdev_key_down_or_up(key: RdevKey, down_or_up: bool) { | ||||||
|     let event_type = match down_or_up { |     let event_type = match down_or_up { | ||||||
|         true => EventType::KeyPress(key), |         true => EventType::KeyPress(key), | ||||||
| @ -821,8 +835,7 @@ fn map_keyboard_mode(evt: &KeyEvent) { | |||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     rdev_key_down_or_up(RdevKey::Unknown(evt.chr()), evt.down); |     sim_rdev_rawkey(evt.chr(), evt.down); | ||||||
|     return; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[cfg(target_os = "macos")] | #[cfg(target_os = "macos")] | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user