diff --git a/libs/enigo/src/macos/macos_impl.rs b/libs/enigo/src/macos/macos_impl.rs index 55f350895..992269085 100644 --- a/libs/enigo/src/macos/macos_impl.rs +++ b/libs/enigo/src/macos/macos_impl.rs @@ -614,11 +614,6 @@ impl Enigo { scroll_direction *= -1; } - // fix scroll distance for track pad - if is_track_pad { - length *= 3; - } - if let Some(src) = self.event_source.as_ref() { for _ in 0..length { unsafe { diff --git a/src/client.rs b/src/client.rs index aec5f2245..c56eee294 100644 --- a/src/client.rs +++ b/src/client.rs @@ -53,7 +53,11 @@ use scrap::{ ImageFormat, ImageRgb, }; -use crate::common::{self, is_keyboard_mode_supported}; +use crate::common::{ + self, + input::{MOUSE_TYPE_TRACKPAD, MOUSE_TYPE_WHEEL}, + is_keyboard_mode_supported, +}; #[cfg(not(any(target_os = "android", target_os = "ios")))] use crate::common::{check_clipboard, ClipboardContext, CLIPBOARD_INTERVAL}; @@ -1908,10 +1912,10 @@ pub async fn handle_test_delay(t: TestDelay, peer: &mut Stream) { #[cfg(all(target_os = "macos"))] fn check_scroll_on_mac(mask: i32, x: i32, y: i32) -> bool { // flutter version we set mask type bit to 4 when track pad scrolling. - if mask & 7 == 4 { + if mask & 7 == MOUSE_TYPE_TRACKPAD { return true; } - if mask & 3 != 3 { + if mask & 3 != MOUSE_TYPE_WHEEL { return false; } let btn = mask >> 3; @@ -1972,9 +1976,12 @@ pub fn send_mouse( if command { mouse_event.modifiers.push(ControlKey::Meta.into()); } - #[cfg(all(target_os = "macos"))] + #[cfg(all(target_os = "macos", not(feature = "flutter")))] if check_scroll_on_mac(mask, x, y) { - mouse_event.modifiers.push(ControlKey::Scroll.into()); + let factor = 3; + mouse_event.mask = MOUSE_TYPE_TRACKPAD; + mouse_event.x *= factor; + mouse_event.y *= factor; } interface.swap_modifier_mouse(&mut mouse_event); msg_out.set_mouse_event(mouse_event); diff --git a/src/server/input_service.rs b/src/server/input_service.rs index d9ba9e1ef..e5bbf4e78 100644 --- a/src/server/input_service.rs +++ b/src/server/input_service.rs @@ -835,12 +835,13 @@ pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { x = -x; y = -y; } + + #[cfg(any(target_os = "macos", target_os = "windows"))] + let is_track_pad = evt_type == MOUSE_TYPE_TRACKPAD; + #[cfg(target_os = "macos")] { // TODO: support track pad on win. - let is_track_pad = evt - .modifiers - .contains(&EnumOrUnknown::new(ControlKey::Scroll)); // fix shift + scroll(down/up) if !is_track_pad @@ -861,7 +862,7 @@ pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { } #[cfg(windows)] - if evt_type == MOUSE_TYPE_WHEEL { + if is_track_pad { x *= WHEEL_DELTA as i32; y *= WHEEL_DELTA as i32; }