update rdev, fix grab system utf8, fallback on linux

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou 2023-09-15 15:34:02 +08:00
parent bb8438c770
commit 7b37e5183c
9 changed files with 19 additions and 7 deletions

2
Cargo.lock generated
View File

@ -4881,7 +4881,7 @@ dependencies = [
[[package]]
name = "rdev"
version = "0.5.0-2"
source = "git+https://github.com/fufesou/rdev#ee3057bd97c91529e8b9daf2ca133a5c49f0c0eb"
source = "git+https://github.com/fufesou/rdev#bec664ee8743ade8d2fdd099b114c9eeacd9cfba"
dependencies = [
"cocoa",
"core-foundation",

View File

@ -70,6 +70,8 @@ pub use win::ENIGO_INPUT_EXTRA_VALUE;
mod macos;
#[cfg(target_os = "macos")]
pub use macos::Enigo;
#[cfg(target_os = "macos")]
pub use macos::ENIGO_INPUT_EXTRA_VALUE;
#[cfg(target_os = "linux")]
mod linux;

View File

@ -37,6 +37,9 @@ const kUCKeyActionDisplay: u16 = 3;
const kUCKeyTranslateDeadKeysBit: OptionBits = 1 << 31;
const BUF_LEN: usize = 4;
/// The event source user data value of cgevent.
pub const ENIGO_INPUT_EXTRA_VALUE: i64 = 100;
#[allow(improper_ctypes)]
#[allow(non_snake_case)]
#[link(name = "ApplicationServices", kind = "framework")]
@ -131,6 +134,7 @@ impl Enigo {
fn post(&self, event: CGEvent) {
event.set_flags(self.flags);
event.set_integer_value_field(EventField::EVENT_SOURCE_USER_DATA, ENIGO_INPUT_EXTRA_VALUE);
event.post(CGEventTapLocation::HID);
}
}

View File

@ -1,4 +1,4 @@
mod macos_impl;
pub mod keycodes;
pub use self::macos_impl::Enigo;
pub use self::macos_impl::{Enigo, ENIGO_INPUT_EXTRA_VALUE};

View File

@ -1,5 +1,4 @@
mod win_impl;
pub mod keycodes;
pub use self::win_impl::Enigo;
pub use self::win_impl::ENIGO_INPUT_EXTRA_VALUE;
pub use self::win_impl::{Enigo, ENIGO_INPUT_EXTRA_VALUE};

View File

@ -583,6 +583,8 @@ pub fn event_type_to_event(event_type: EventType) -> Event {
unicode: None,
platform_code: 0,
position_code: 0,
#[cfg(any(target_os = "windows", target_os = "macos"))]
extra_data: 0,
}
}

View File

@ -676,10 +676,10 @@ impl Connection {
#[cfg(not(any(target_os = "android", target_os = "ios")))]
fn handle_input(receiver: std_mpsc::Receiver<MessageInput>, tx: Sender) {
let mut block_input_mode = false;
#[cfg(target_os = "windows")]
#[cfg(any(target_os = "windows", target_os = "macos"))]
{
rdev::set_dw_mouse_extra_info(enigo::ENIGO_INPUT_EXTRA_VALUE);
rdev::set_dw_keyboard_extra_info(enigo::ENIGO_INPUT_EXTRA_VALUE);
rdev::set_mouse_extra_info(enigo::ENIGO_INPUT_EXTRA_VALUE);
rdev::set_keyboard_extra_info(enigo::ENIGO_INPUT_EXTRA_VALUE);
}
#[cfg(target_os = "macos")]
reset_input_ondisconn();

View File

@ -380,6 +380,9 @@ pub fn try_stop_record_cursor_pos() {
return;
}
RECORD_CURSOR_POS_RUNNING.store(false, Ordering::SeqCst);
#[cfg(any(target_os = "windows", target_os = "macos"))]
let _r = rdev::exit_grab();
}
// mac key input must be run in main thread, otherwise crash on >= osx 10.15

View File

@ -660,6 +660,8 @@ impl<T: InvokeUiSession> Session<T> {
platform_code,
position_code: position_code as _,
event_type,
#[cfg(any(target_os = "windows", target_os = "macos"))]
extra_data: 0,
};
keyboard::client::process_event(&event, Some(lock_modes));
}