diff --git a/src/lib/platform/OSXScreen.cpp b/src/lib/platform/OSXScreen.cpp index 58a32337..98c80e42 100644 --- a/src/lib/platform/OSXScreen.cpp +++ b/src/lib/platform/OSXScreen.cpp @@ -466,9 +466,9 @@ OSXScreen::constructMouseButtonEventMap() { const CGEventType source[NumButtonIDs][3] = { {kCGEventLeftMouseUp, kCGEventLeftMouseDragged, kCGEventLeftMouseDown}, - {kCGEventOtherMouseUp, kCGEventOtherMouseDragged, kCGEventOtherMouseDown}, {kCGEventRightMouseUp, kCGEventRightMouseDragged, kCGEventRightMouseDown}, {kCGEventOtherMouseUp, kCGEventOtherMouseDragged, kCGEventOtherMouseDown}, + {kCGEventOtherMouseUp, kCGEventOtherMouseDragged, kCGEventOtherMouseDown}, {kCGEventOtherMouseUp, kCGEventOtherMouseDragged, kCGEventOtherMouseDown} }; @@ -541,7 +541,7 @@ void OSXScreen::fakeMouseButton(ButtonID id, bool press) { // Buttons are indexed from one, but the button down array is indexed from zero - UInt32 index = id - kButtonLeft; + UInt32 index = mapSynergyButtonToMac(id) - kButtonLeft; if (index >= NumButtonIDs) { return; } @@ -594,7 +594,7 @@ OSXScreen::fakeMouseButton(ButtonID id, bool press) MouseButtonEventMapType thisButtonMap = MouseButtonEventMap[index]; CGEventType type = thisButtonMap[state]; - + CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, index); CGEventSetIntegerValueField(event, kCGMouseEventClickState, m_clickState); @@ -1444,6 +1444,21 @@ OSXScreen::onHotKey(EventRef event) const return true; } +ButtonID +OSXScreen::mapSynergyButtonToMac(UInt16 button) const +{ + switch (button) { + case 1: + return kButtonLeft; + case 2: + return kMacButtonMiddle; + case 3: + return kMacButtonRight; + } + + return static_cast(button); +} + ButtonID OSXScreen::mapMacButtonToSynergy(UInt16 macButton) const { diff --git a/src/lib/platform/OSXScreen.h b/src/lib/platform/OSXScreen.h index cd0dc18d..7193dd51 100644 --- a/src/lib/platform/OSXScreen.h +++ b/src/lib/platform/OSXScreen.h @@ -138,6 +138,9 @@ private: void showCursor(); void hideCursor(); + // map mac mouse button to synergy buttons + ButtonID mapSynergyButtonToMac(UInt16) const; + // map mac mouse button to synergy buttons ButtonID mapMacButtonToSynergy(UInt16) const; diff --git a/src/lib/synergy/mouse_types.h b/src/lib/synergy/mouse_types.h index d3d9e129..2ad79d0f 100644 --- a/src/lib/synergy/mouse_types.h +++ b/src/lib/synergy/mouse_types.h @@ -33,6 +33,9 @@ static const ButtonID kButtonLeft = 1; static const ButtonID kButtonMiddle = 2; static const ButtonID kButtonRight = 3; static const ButtonID kButtonExtra0 = 4; + +static const ButtonID kMacButtonRight = 2; +static const ButtonID kMacButtonMiddle = 3; //@} static const UInt8 NumButtonIDs = 5;