summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-07-09 17:05:55 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-07-10 12:16:54 +0200
commit7917f9b7f54b5fe574adc6e092a7562b1f0be4fb (patch)
tree490e42a9c57b3a1c1c35f9d1341a0aaeca7d5c58 /src/plugins/platforms/cocoa
parent0ef46b41d86b9fad4fc4a18bd577d208afa1fce8 (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.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoakeymapper.mm13
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.mm24
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
{