From 5619ed24738078e39c67596466a5e5e93996b555 Mon Sep 17 00:00:00 2001 From: Serhii Hadzhilov Date: Mon, 27 Sep 2021 12:47:09 +0300 Subject: [PATCH 1/2] SYNERGY-1247 CapsLock doesn't work on Microsoft Remote Desktop --- src/lib/platform/OSXKeyState.cpp | 50 +++++++++++++++++++++++++++----- src/lib/platform/OSXKeyState.h | 4 ++- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/lib/platform/OSXKeyState.cpp b/src/lib/platform/OSXKeyState.cpp index fbf45949a3..1a93f09ed2 100644 --- a/src/lib/platform/OSXKeyState.cpp +++ b/src/lib/platform/OSXKeyState.cpp @@ -476,31 +476,67 @@ OSXKeyState::getKeyMap(synergy::KeyMap& keyMap) } CGEventFlags -OSXKeyState::getKeyboardEventFlags() +OSXKeyState::getDeviceIndependedFlags() const { - // set the event flags for special keys - // http://tinyurl.com/pxl742y CGEventFlags modifiers = 0; if (m_shiftPressed) { - modifiers |= kCGEventFlagMaskShift | NX_DEVICELSHIFTKEYMASK; + modifiers |= kCGEventFlagMaskShift; } if (m_controlPressed) { - modifiers |= kCGEventFlagMaskControl | NX_DEVICELCTLKEYMASK; + modifiers |= kCGEventFlagMaskControl; } if (m_altPressed) { - modifiers |= kCGEventFlagMaskAlternate | NX_DEVICELALTKEYMASK; + modifiers |= kCGEventFlagMaskAlternate; } if (m_superPressed) { - modifiers |= kCGEventFlagMaskCommand | NX_DEVICELCMDKEYMASK; + modifiers |= kCGEventFlagMaskCommand; } + return modifiers; +} + +CGEventFlags +OSXKeyState::getDeviceDependedFlags() const +{ + CGEventFlags modifiers = 0; + + if (m_shiftPressed) { + modifiers |= NX_DEVICELSHIFTKEYMASK; + } + + if (m_controlPressed) { + modifiers |= NX_DEVICELCTLKEYMASK; + } + + if (m_altPressed) { + modifiers |= NX_DEVICELALTKEYMASK; + } + + if (m_superPressed) { + modifiers |= NX_DEVICELCMDKEYMASK; + } + + return modifiers; +} + + +CGEventFlags +OSXKeyState::getKeyboardEventFlags() const +{ + // set the event flags for special keys + // http://tinyurl.com/pxl742y + CGEventFlags modifiers = getDeviceIndependedFlags(); + if (m_capsPressed) { modifiers |= kCGEventFlagMaskAlphaShift; } + else { + modifiers |= getDeviceDependedFlags(); + } return modifiers; } diff --git a/src/lib/platform/OSXKeyState.h b/src/lib/platform/OSXKeyState.h index 14b0e680b4..67b81d568a 100644 --- a/src/lib/platform/OSXKeyState.h +++ b/src/lib/platform/OSXKeyState.h @@ -151,7 +151,9 @@ private: void init(); // Get keyboard event flags accorfing to keyboard modifiers - CGEventFlags getKeyboardEventFlags(); + CGEventFlags getKeyboardEventFlags() const; + CGEventFlags getDeviceIndependedFlags() const; + CGEventFlags getDeviceDependedFlags() const; void setKeyboardModifiers(CGKeyCode virtualKey, bool keyDown); From d79c8d80d2289f4dc1fbd974fa3c0301797363e6 Mon Sep 17 00:00:00 2001 From: Serhii Hadzhilov Date: Mon, 27 Sep 2021 12:48:12 +0300 Subject: [PATCH 2/2] Update ChangeLog --- ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 0e48bfd198..ac2cf9e6e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,7 +7,7 @@ Bug fixes: - #7080 Add trace if the system can't open file with trusted fingerprints - #7081 Fix autoconfig after SYNERGY-1161 - #7082 Windows client doesn't resume connection after sleep -- #7089 Modifier keys don't work on Microsoft Remote Desktop +- #7089 | #7094 Modifier keys don't work on Microsoft Remote Desktop - #7091 Fix CMakeFileList for unittests - #7092 Synergy is running after quit on Linux