diff --git a/src/plugins/platforms/wasm/qwasminputcontext.cpp b/src/plugins/platforms/wasm/qwasminputcontext.cpp index 25b37e6930a..92fc1767d17 100644 --- a/src/plugins/platforms/wasm/qwasminputcontext.cpp +++ b/src/plugins/platforms/wasm/qwasminputcontext.cpp @@ -59,12 +59,6 @@ QWasmInputContext::QWasmInputContext() emscripten::val(quintptr(reinterpret_cast(this)))); emscripten::val body = document["body"]; body.call("appendChild", m_inputElement); - - // Enter is sent through target window, let's just handle this here - emscripten_set_keydown_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, (void *)this, 1, - &inputMethodKeyboardCallback); - emscripten_set_keyup_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, (void *)this, 1, - &inputMethodKeyboardCallback); } if (platform() == Platform::MacOS || platform() == Platform::iOS) { @@ -163,19 +157,5 @@ void QWasmInputContext::inputStringChanged(QString &inputString, int eventType, eventType == EMSCRIPTEN_EVENT_KEYDOWN ? inputString : QStringLiteral("")); } -int QWasmInputContext::inputMethodKeyboardCallback(int eventType, - const EmscriptenKeyboardEvent *keyEvent, - void *userData) -{ - // we get Enter, Backspace and function keys via emscripten on target window - QString strKey(keyEvent->key); - if (strKey == "Unidentified" || strKey == "Process") - return false; - - QWasmInputContext *wasmInput = reinterpret_cast(userData); - wasmInput->inputStringChanged(strKey, eventType, wasmInput); - - return true; -} QT_END_NAMESPACE diff --git a/src/plugins/platforms/wasm/qwasminputcontext.h b/src/plugins/platforms/wasm/qwasminputcontext.h index eb840742fc9..10dd1a09506 100644 --- a/src/plugins/platforms/wasm/qwasminputcontext.h +++ b/src/plugins/platforms/wasm/qwasminputcontext.h @@ -30,6 +30,7 @@ public: void focusWindowChanged(QWindow *focusWindow); void inputStringChanged(QString &, int eventType, QWasmInputContext *context); + emscripten::val m_inputElement = emscripten::val::null(); private: emscripten::val inputHandlerElementForFocusedWindow(); @@ -37,11 +38,8 @@ private: bool m_inputPanelVisible = false; QPointer m_focusWindow; - emscripten::val m_inputElement = emscripten::val::null(); std::unique_ptr m_blurEventHandler; std::unique_ptr m_inputEventHandler; - static int inputMethodKeyboardCallback(int eventType, - const EmscriptenKeyboardEvent *keyEvent, void *userData); bool inputPanelIsOpen = false; }; diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp index 249d1fdfc93..f9861bb4dba 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.cpp +++ b/src/plugins/platforms/wasm/qwasmwindow.cpp @@ -127,9 +127,20 @@ QWasmWindow::QWasmWindow(QWindow *w, QWasmDeadKeySupport *deadKeySupport, event.call("stopPropagation"); }); + emscripten::val keyFocusWindow; + if (QWasmIntegration::get()->inputContext()) { + QWasmInputContext *wasmContext = + static_cast(QWasmIntegration::get()->inputContext()); + // if there is an touchscreen input context, + // use that window for key input + keyFocusWindow = wasmContext->m_inputElement; + } else { + keyFocusWindow = m_qtWindow; + } + m_keyDownCallback = - std::make_unique(m_qtWindow, "keydown", keyCallback); - m_keyUpCallback = std::make_unique(m_qtWindow, "keyup", keyCallback); + std::make_unique(keyFocusWindow, "keydown", keyCallback); + m_keyUpCallback = std::make_unique(keyFocusWindow, "keyup", keyCallback); setParent(parent()); }