summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
diff options
context:
space:
mode:
authorMikolaj Boc <mikolaj.boc@qt.io>2022-12-23 15:29:20 +0100
committerMikolaj Boc <mikolaj.boc@qt.io>2022-12-27 21:51:23 +0100
commit988c7bfcae5f69f7918f4dacf74e8b1ad2bee9c2 (patch)
tree5cbd467c760874fdd4e869bb912266503a5737d4 /src/plugins/platforms/wasm/qwasmeventtranslator.cpp
parent040b4a4b21b325995c49772a86a061249f16851c (diff)
Fix the handling of dead keys on WASM
1) Do not attempt to take the first character of event.key when the key is a dead key - this always returns D as in Dead 2) Do not attempt to immediately modify the pressed key with the dead key as the dead key itself will be modified Pick-to: 6.5 Fixes: QTBUG-109629 Change-Id: Ic66536b8b27df23c2f1c4ebf1c02e713990e62ef Reviewed-by: Aleksandr Reviakin <aleksandr.reviakin@qt.io> Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmeventtranslator.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmeventtranslator.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
index 36ba655d66..3f3e8da3f1 100644
--- a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
+++ b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
@@ -177,12 +177,15 @@ bool isDeadKeyEvent(const EmscriptenKeyboardEvent *emKeyEvent)
Qt::Key translateEmscriptKey(const EmscriptenKeyboardEvent *emscriptKey)
{
- if (isDeadKeyEvent(emscriptKey)) {
+ const bool deadKeyEvent = isDeadKeyEvent(emscriptKey);
+ if (deadKeyEvent) {
if (auto mapping = findMappingByBisection(emscriptKey->code))
return *mapping;
}
if (auto mapping = findMappingByBisection(emscriptKey->key))
return *mapping;
+ if (deadKeyEvent)
+ return Qt::Key_unknown;
// cast to unicode key
QString str = QString::fromUtf8(emscriptKey->key).toUpper();
@@ -306,11 +309,9 @@ QWasmEventTranslator::translateKeyEvent(int emEventType, const EmscriptenKeyboar
if (keyEvent->shiftKey && ret.key == Qt::Key_QuoteLeft)
ret.key = Qt::Key_AsciiTilde;
m_emDeadKey = ret.key;
- }
-
- if (m_emDeadKey != Qt::Key_unknown
- && (m_keyModifiedByDeadKeyOnPress == Qt::Key_unknown
- || ret.key == m_keyModifiedByDeadKeyOnPress)) {
+ } else if (m_emDeadKey != Qt::Key_unknown
+ && (m_keyModifiedByDeadKeyOnPress == Qt::Key_unknown
+ || ret.key == m_keyModifiedByDeadKeyOnPress)) {
const Qt::Key baseKey = ret.key;
const Qt::Key translatedKey = translateBaseKeyUsingDeadKey(baseKey, m_emDeadKey);
if (translatedKey != Qt::Key_unknown)