diff --git a/ChangeLog b/ChangeLog index 1210bf9a6..33d7a7734 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ v1.14.1-snapshot Bug fixes: - #7016 Fix script that generates version number - #7006 Resolve code scanning issues +- #7012 Fix natural horizontal scrolling on Mac client Enhancements: diff --git a/src/lib/platform/OSXScreen.h b/src/lib/platform/OSXScreen.h index 6b1e8211c..13da1368c 100644 --- a/src/lib/platform/OSXScreen.h +++ b/src/lib/platform/OSXScreen.h @@ -339,6 +339,9 @@ private: Thread* m_getDropTargetThread; String m_dropTarget; + + // -1 for natural scrolling direction, 1 otherwise + SInt32 m_scrollDirection = 1; #if defined(MAC_OS_X_VERSION_10_7) Mutex* m_carbonLoopMutex; diff --git a/src/lib/platform/OSXScreen.mm b/src/lib/platform/OSXScreen.mm index aea9b87fe..583c5e2cb 100755 --- a/src/lib/platform/OSXScreen.mm +++ b/src/lib/platform/OSXScreen.mm @@ -681,8 +681,8 @@ OSXScreen::fakeMouseWheel(SInt32 xDelta, SInt32 yDelta) const CGEventRef scrollEvent = CGEventCreateScrollWheelEvent( NULL, kCGScrollEventUnitLine, 2, mapScrollWheelFromSynergy(yDelta), - -mapScrollWheelFromSynergy(xDelta)); - + mapScrollWheelFromSynergy(xDelta)); + // Fix for sticky keys CGEventFlags modifiers = m_keyState->getModifierStateAsOSXFlags(); CGEventSetFlags(scrollEvent, modifiers); @@ -840,6 +840,8 @@ OSXScreen::enter() setZeroSuppressionInterval(); } else { + m_scrollDirection = [[[NSUserDefaults standardUserDefaults] objectForKey:@"com.apple.swipescrolldirection"] boolValue] ? -1 : 1; + // reset buttons m_buttonState.reset(); @@ -1448,7 +1450,7 @@ OSXScreen::mapScrollWheelFromSynergy(SInt32 x) const { // use server's acceleration with a little boost since other platforms // take one wheel step as a larger step than the mac does. - return static_cast(3.0 * x / 120.0); + return static_cast(m_scrollDirection * 3.0 * x / 120.0); } double