summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qcocoakeymapper.mm
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-07-07 20:57:03 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-07-08 01:09:39 +0200
commit055c2bebdac99010897695540c3174a8ba3f2221 (patch)
tree748cab95657f6bb9e7260062c39b6e61e86f2227 /src/plugins/platforms/cocoa/qcocoakeymapper.mm
parentb982385bcf1fce697fee9da5ebcb41bf28ecd8e9 (diff)
macOS: Don't rely on Carbon for QCocoaKeyMapper::queryKeyboardModifiers()
The semantics of the Cocoa API matches that of the Carbon API we are replacing, in that it reflects the "state of devices combined with synthesized events at the moment, independent of which events have been delivered via the event stream.", which is the same semantics as QGuiApplication::queryKeyboardModifiers() expects. Change-Id: Ic00ccbb3e8ae571522245df30924952aa2cc71de Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoakeymapper.mm')
-rw-r--r--src/plugins/platforms/cocoa/qcocoakeymapper.mm35
1 files changed, 12 insertions, 23 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoakeymapper.mm b/src/plugins/platforms/cocoa/qcocoakeymapper.mm
index 97f1df151b..2cb2fd0255 100644
--- a/src/plugins/platforms/cocoa/qcocoakeymapper.mm
+++ b/src/plugins/platforms/cocoa/qcocoakeymapper.mm
@@ -84,34 +84,23 @@ Qt::KeyboardModifiers QCocoaKeyMapper::fromCocoaModifiers(NSEventModifierFlags c
return swapModifiersIfNeeded(qtModifiers);
}
-static constexpr std::tuple<int, Qt::KeyboardModifier> carbonModifierMap[] = {
- { shiftKey, Qt::ShiftModifier },
- { rightShiftKey, Qt::ShiftModifier },
- { controlKey, Qt::ControlModifier },
- { rightControlKey, Qt::ControlModifier },
- { cmdKey, Qt::MetaModifier },
- { optionKey, Qt::AltModifier },
- { rightOptionKey, Qt::AltModifier },
- { kEventKeyModifierNumLockMask, Qt::KeypadModifier }
-};
-
using CarbonModifiers = UInt32; // As opposed to EventModifiers which is UInt16
-Qt::KeyboardModifiers fromCarbonModifiers(CarbonModifiers carbonModifiers)
-{
- Qt::KeyboardModifiers qtModifiers = Qt::NoModifier;
- for (const auto &[carbonModifier, qtModifier] : carbonModifierMap) {
- if (carbonModifiers & carbonModifier)
- qtModifiers |= qtModifier;
- }
-
- return swapModifiersIfNeeded(qtModifiers);
-}
-
static CarbonModifiers toCarbonModifiers(Qt::KeyboardModifiers qtModifiers)
{
qtModifiers = swapModifiersIfNeeded(qtModifiers);
+ static constexpr std::tuple<int, Qt::KeyboardModifier> carbonModifierMap[] = {
+ { shiftKey, Qt::ShiftModifier },
+ { rightShiftKey, Qt::ShiftModifier },
+ { controlKey, Qt::ControlModifier },
+ { rightControlKey, Qt::ControlModifier },
+ { cmdKey, Qt::MetaModifier },
+ { optionKey, Qt::AltModifier },
+ { rightOptionKey, Qt::AltModifier },
+ { kEventKeyModifierNumLockMask, Qt::KeypadModifier }
+ };
+
CarbonModifiers carbonModifiers = 0;
for (const auto &[carbonModifier, qtModifier] : carbonModifierMap) {
if (qtModifiers & qtModifier)
@@ -394,7 +383,7 @@ QCocoaKeyMapper::~QCocoaKeyMapper()
Qt::KeyboardModifiers QCocoaKeyMapper::queryKeyboardModifiers()
{
- return fromCarbonModifiers(GetCurrentKeyModifiers());
+ return fromCocoaModifiers(NSEvent.modifierFlags);
}
bool QCocoaKeyMapper::updateKeyboard()