diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-07-07 20:57:03 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-07-08 01:09:39 +0200 |
commit | 055c2bebdac99010897695540c3174a8ba3f2221 (patch) | |
tree | 748cab95657f6bb9e7260062c39b6e61e86f2227 /src/plugins/platforms/cocoa | |
parent | b982385bcf1fce697fee9da5ebcb41bf28ecd8e9 (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')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoakeymapper.mm | 35 |
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() |