From 04d2db2730e8fb6e7b07c71967bac5f662652133 Mon Sep 17 00:00:00 2001 From: Keith Johnston Date: Tue, 6 Oct 2020 16:11:36 -0700 Subject: [PATCH] Fix for mac mousewheel. (cherry picked from commit 87a4a8484e65ab591ef815ed0700ab0c90994a77) (cherry picked from commit c0ecee9d69533095bfdb3dbaf9e76747e5e3a7ab) --- client/Mac/MRDPView.m | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/client/Mac/MRDPView.m b/client/Mac/MRDPView.m index 70f67e10a..1686c9a71 100644 --- a/client/Mac/MRDPView.m +++ b/client/Mac/MRDPView.m @@ -416,7 +416,7 @@ DWORD WINAPI mac_client_thread(void *param) if (fabsf(dy) > FLT_EPSILON) { - flags = PTR_FLAGS_HWHEEL; + flags = PTR_FLAGS_WHEEL; units = fabsf(dy) * 120; if (dy < 0) @@ -424,7 +424,7 @@ DWORD WINAPI mac_client_thread(void *param) } else if (fabsf(dx) > FLT_EPSILON) { - flags = PTR_FLAGS_WHEEL; + flags = PTR_FLAGS_HWHEEL; units = fabsf(dx) * 120; if (dx > 0) @@ -433,17 +433,20 @@ DWORD WINAPI mac_client_thread(void *param) else return; - /* send out all accumulated rotations */ - if (units > WheelRotationMask) - units = WheelRotationMask; + /* Wheel rotation steps: + * + * positive: 0 ... 0xFF -> slow ... fast + * negative: 0 ... 0xFF -> fast ... slow + */ + UINT16 step = units; + if (step > 0xFF) + step = 0xFF; - while (units != 0) - { - /* limit to maximum value in WheelRotationMask (9bit signed value) */ - const UINT16 step = units & WheelRotationMask; - mf_scale_mouse_event(context, instance->input, flags | step, 0, 0); - units -= step; - } + /* Negative rotation, so count down steps from top */ + if (flags & PTR_FLAGS_WHEEL_NEGATIVE) + step = 0xFF - step; + + mf_scale_mouse_event(context, instance->input, flags | step, 0, 0); } - (void)mouseDragged:(NSEvent *)event