diff options
author | Andy Shaw <andy.shaw@qt.io> | 2021-02-05 11:59:02 +0100 |
---|---|---|
committer | Andy Shaw <andy.shaw@qt.io> | 2021-02-23 09:36:40 +0100 |
commit | 5540c9c10754963375cd34f740e64b068c440a3e (patch) | |
tree | 8910c989858df81689a3526f6abcb11f16ddb92d /src | |
parent | 9a5a2d61c077ddc8a0fb4e2cce7a36a5dbb081d5 (diff) |
iOS: Pass the text to handleExtendedKeyEvent when known
This will ensure that the QKeyEvent also has this information passed on
as appropriate.
Pick-to: 6.1
Change-Id: I52436404115b453664b9b3414f8ec4e715dd6a28
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/platform/darwin/qapplekeymapper.mm | 6 | ||||
-rw-r--r-- | src/gui/platform/darwin/qapplekeymapper_p.h | 2 | ||||
-rw-r--r-- | src/plugins/platforms/ios/quiview.mm | 11 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/gui/platform/darwin/qapplekeymapper.mm b/src/gui/platform/darwin/qapplekeymapper.mm index 19e34b1698..738fab3863 100644 --- a/src/gui/platform/darwin/qapplekeymapper.mm +++ b/src/gui/platform/darwin/qapplekeymapper.mm @@ -74,7 +74,7 @@ static Qt::KeyboardModifiers swapModifiersIfNeeded(const Qt::KeyboardModifiers m } Qt::Key QAppleKeyMapper::fromNSString(Qt::KeyboardModifiers qtModifiers, NSString *characters, - NSString *charactersIgnoringModifiers) + NSString *charactersIgnoringModifiers, QString &text) { if ([characters isEqualToString:@"\t"]) { if (qtModifiers & Qt::ShiftModifier) @@ -93,6 +93,10 @@ Qt::Key QAppleKeyMapper::fromNSString(Qt::KeyboardModifiers qtModifiers, NSStrin } else if ([characters length] != 0) { ch = QChar([characters characterAtIndex:0]); } + if (!(qtModifiers & (Qt::ControlModifier | Qt::MetaModifier)) && + (ch.unicode() < 0xf700 || ch.unicode() > 0xf8ff)) { + text = QString::fromNSString(characters); + } if (!ch.isNull()) return Qt::Key(ch.toUpper().unicode()); } diff --git a/src/gui/platform/darwin/qapplekeymapper_p.h b/src/gui/platform/darwin/qapplekeymapper_p.h index dd15e37ae6..78e71ac37d 100644 --- a/src/gui/platform/darwin/qapplekeymapper_p.h +++ b/src/gui/platform/darwin/qapplekeymapper_p.h @@ -68,7 +68,7 @@ public: static Qt::KeyboardModifiers queryKeyboardModifiers(); QList<int> possibleKeys(const QKeyEvent *event) const; static Qt::Key fromNSString(Qt::KeyboardModifiers qtMods, NSString *characters, - NSString *charactersIgnoringModifiers); + NSString *charactersIgnoringModifiers, QString &text); #ifdef Q_OS_MACOS static Qt::KeyboardModifiers fromCocoaModifiers(NSEventModifierFlags cocoaModifiers); static NSEventModifierFlags toCocoaModifiers(Qt::KeyboardModifiers); diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm index d1cd3f3ca0..c7f94cc707 100644 --- a/src/plugins/platforms/ios/quiview.mm +++ b/src/plugins/platforms/ios/quiview.mm @@ -574,7 +574,7 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet") QWindowSystemInterface::handleTouchCancelEvent(self.platformWindow->window(), ulong(timestamp * 1000), iosIntegration->touchDevice()); } -- (int)mapPressTypeToKey:(UIPress*)press withModifiers:(Qt::KeyboardModifiers)qtModifiers +- (int)mapPressTypeToKey:(UIPress*)press withModifiers:(Qt::KeyboardModifiers)qtModifiers text:(QString &)text { switch (press.type) { case UIPressTypeUpArrow: return Qt::Key_Up; @@ -592,7 +592,7 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet") if (key != Qt::Key_unknown) return key; return QAppleKeyMapper::fromNSString(qtModifiers, press.key.characters, - charactersIgnoringModifiers); + charactersIgnoringModifiers, text); } #endif return Qt::Key_unknown; @@ -611,11 +611,14 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet") if (@available(ios 13.4, *)) qtModifiers = QAppleKeyMapper::fromUIKitModifiers(press.key.modifierFlags); #endif - int key = [self mapPressTypeToKey:press withModifiers:qtModifiers]; + QString text; + int key = [self mapPressTypeToKey:press withModifiers:qtModifiers text:text]; if (key == Qt::Key_unknown) continue; - if (QWindowSystemInterface::handleKeyEvent(self.platformWindow->window(), type, key, qtModifiers)) + if (QWindowSystemInterface::handleKeyEvent(self.platformWindow->window(), type, key, + qtModifiers, text)) { handled = true; + } } return handled; |