diff options
author | Mikolaj Boc <mikolaj.boc@qt.io> | 2022-12-23 15:29:20 +0100 |
---|---|---|
committer | Mikolaj Boc <mikolaj.boc@qt.io> | 2022-12-27 21:51:23 +0100 |
commit | 988c7bfcae5f69f7918f4dacf74e8b1ad2bee9c2 (patch) | |
tree | 5cbd467c760874fdd4e869bb912266503a5737d4 /src/plugins/platforms/wasm/qwasmeventtranslator.cpp | |
parent | 040b4a4b21b325995c49772a86a061249f16851c (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.cpp | 13 |
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) |