Fix for mac mousewheel.
authorKeith Johnston <kjohnston@cbtnuggets.com>
Tue, 6 Oct 2020 23:11:36 +0000 (16:11 -0700)
committerakallabeth <akallabeth@posteo.net>
Wed, 2 Dec 2020 13:23:19 +0000 (14:23 +0100)
(cherry picked from commit 87a4a8484e65ab591ef815ed0700ab0c90994a77)
(cherry picked from commit c0ecee9d69533095bfdb3dbaf9e76747e5e3a7ab)

client/Mac/MRDPView.m

index 70f67e1..1686c9a 100644 (file)
@@ -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