From 055c2bebdac99010897695540c3174a8ba3f2221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 7 Jul 2020 20:57:03 +0200 Subject: [PATCH] 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 --- .../platforms/cocoa/qcocoakeymapper.mm | 35 +++++++------------ 1 file 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 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 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()