From 988c7bfcae5f69f7918f4dacf74e8b1ad2bee9c2 Mon Sep 17 00:00:00 2001 From: Mikolaj Boc Date: Fri, 23 Dec 2022 15:29:20 +0100 Subject: [PATCH] Fix the handling of dead keys on WASM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Morten Johan Sørvig --- src/plugins/platforms/wasm/qwasmeventtranslator.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp index 36ba655d66b..3f3e8da3f16 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)