diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-07-09 17:05:55 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-07-10 12:16:54 +0200 |
commit | 7917f9b7f54b5fe574adc6e092a7562b1f0be4fb (patch) | |
tree | 490e42a9c57b3a1c1c35f9d1341a0aaeca7d5c58 /src/plugins/platforms/cocoa | |
parent | 0ef46b41d86b9fad4fc4a18bd577d208afa1fce8 (diff) |
macOS: Add QCocoaKeyMapper::toCocoaModifiers
Change-Id: I489c64733275260bb041f8df5cc5ff4a571d4e9c
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoakeymapper.h | 2 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoakeymapper.mm | 13 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenuitem.mm | 24 |
3 files changed, 17 insertions, 22 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoakeymapper.h b/src/plugins/platforms/cocoa/qcocoakeymapper.h index d93fe16b20..339608d292 100644 --- a/src/plugins/platforms/cocoa/qcocoakeymapper.h +++ b/src/plugins/platforms/cocoa/qcocoakeymapper.h @@ -83,6 +83,8 @@ public: QList<int> possibleKeys(const QKeyEvent *event) const; static Qt::KeyboardModifiers fromCocoaModifiers(NSEventModifierFlags cocoaModifiers); + static NSEventModifierFlags toCocoaModifiers(Qt::KeyboardModifiers); + static QChar toCocoaKey(Qt::Key key); static Qt::Key fromCocoaKey(QChar keyCode); diff --git a/src/plugins/platforms/cocoa/qcocoakeymapper.mm b/src/plugins/platforms/cocoa/qcocoakeymapper.mm index 21e7573984..7391f9079a 100644 --- a/src/plugins/platforms/cocoa/qcocoakeymapper.mm +++ b/src/plugins/platforms/cocoa/qcocoakeymapper.mm @@ -84,6 +84,19 @@ Qt::KeyboardModifiers QCocoaKeyMapper::fromCocoaModifiers(NSEventModifierFlags c return swapModifiersIfNeeded(qtModifiers); } +NSEventModifierFlags QCocoaKeyMapper::toCocoaModifiers(Qt::KeyboardModifiers qtModifiers) +{ + qtModifiers = swapModifiersIfNeeded(qtModifiers); + + NSEventModifierFlags cocoaModifiers = 0; + for (const auto &[cocoaModifier, qtModifier] : cocoaModifierMap) { + if (qtModifiers & qtModifier) + cocoaModifiers |= cocoaModifier; + } + + return cocoaModifiers; +} + using CarbonModifiers = UInt32; // As opposed to EventModifiers which is UInt16 static CarbonModifiers toCarbonModifiers(Qt::KeyboardModifiers qtModifiers) diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm index 9e6d3b8e88..c9d606aafe 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm +++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm @@ -80,21 +80,6 @@ QString qt_mac_applicationmenu_string(int type) } } -static quint32 constructModifierMask(quint32 accel_key) -{ - quint32 ret = 0; - const bool dontSwap = qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta); - if ((accel_key & Qt::CTRL) == Qt::CTRL) - ret |= (dontSwap ? NSEventModifierFlagControl : NSEventModifierFlagCommand); - if ((accel_key & Qt::META) == Qt::META) - ret |= (dontSwap ? NSEventModifierFlagCommand : NSEventModifierFlagControl); - if ((accel_key & Qt::ALT) == Qt::ALT) - ret |= NSEventModifierFlagOption; - if ((accel_key & Qt::SHIFT) == Qt::SHIFT) - ret |= NSEventModifierFlagShift; - return ret; -} - #ifndef QT_NO_SHORTCUT // return an autoreleased string given a QKeySequence (currently only looks at the first one). NSString *keySequenceToKeyEqivalent(const QKeySequence &accel) @@ -108,12 +93,6 @@ NSString *keySequenceToKeyEqivalent(const QKeySequence &accel) cocoa_key = NSDeleteCharacter; return QStringView{&cocoa_key, 1}.toNSString(); } - -// return the cocoa modifier mask for the QKeySequence (currently only looks at the first one). -NSUInteger keySequenceModifierMask(const QKeySequence &accel) -{ - return constructModifierMask(accel[0]); -} #endif QCocoaMenuItem::QCocoaMenuItem() : @@ -390,7 +369,8 @@ NSMenuItem *QCocoaMenuItem::sync() #ifndef QT_NO_SHORTCUT if (accel.count() == 1) { m_native.keyEquivalent = keySequenceToKeyEqivalent(accel); - m_native.keyEquivalentModifierMask = keySequenceModifierMask(accel); + auto modifiers = Qt::KeyboardModifiers(accel[0] & Qt::KeyboardModifierMask); + m_native.keyEquivalentModifierMask = QCocoaKeyMapper::toCocoaModifiers(modifiers); } else #endif { |