wasm: remove 'shift' from being inputed on touchscreens

Fixes: QTBUG-116231
Change-Id: Icbbe80877c2c21c3e82ba2c27909b6679b72e498
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
(cherry picked from commit 91d3c48d3da5f75e126bbce79096a84c078e23e2)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Lorn Potter 2023-08-24 19:00:02 +10:00 committed by Qt Cherry-pick Bot
parent 8240f9437e
commit 883a12d28d
2 changed files with 18 additions and 6 deletions

View File

@ -30,7 +30,7 @@ static void inputCallback(emscripten::val event)
QString str = QString::fromStdString(_incomingCharVal.as<std::string>());
QWasmInputContext *wasmInput =
reinterpret_cast<QWasmInputContext*>(event["target"]["data-qinputcontext"].as<quintptr>());
wasmInput->inputStringChanged(str, wasmInput);
wasmInput->inputStringChanged(str, EMSCRIPTEN_EVENT_KEYDOWN, wasmInput);
}
// this clears the input string, so backspaces do not send a character
// but stops suggestions
@ -138,13 +138,26 @@ void QWasmInputContext::hideInputPanel()
inputPanelIsOpen = false;
}
void QWasmInputContext::inputStringChanged(QString &inputString, QWasmInputContext *context)
void QWasmInputContext::inputStringChanged(QString &inputString, int eventType, QWasmInputContext *context)
{
Q_UNUSED(context)
QKeySequence keys = QKeySequence::fromString(inputString);
Qt::Key thisKey = keys[0].key();
// synthesize this keyevent as android is not normal
if (inputString.size() > 2 && (thisKey < Qt::Key_F35
|| thisKey > Qt::Key_Back)) {
inputString.clear();
}
if (inputString == QStringLiteral("Escape")) {
thisKey = Qt::Key_Escape;
inputString.clear();
} else if (thisKey == Qt::Key(0)) {
thisKey = Qt::Key_Return;
}
QWindowSystemInterface::handleKeyEvent(
0, QEvent::KeyPress,keys[0].key(), keys[0].keyboardModifiers(), inputString);
0, eventType == EMSCRIPTEN_EVENT_KEYDOWN ? QEvent::KeyPress : QEvent::KeyRelease,
thisKey, keys[0].keyboardModifiers(), inputString);
}
int QWasmInputContext::androidKeyboardCallback(int eventType,
@ -152,13 +165,12 @@ int QWasmInputContext::androidKeyboardCallback(int eventType,
void *userData)
{
// we get Enter, Backspace and function keys via emscripten on target window
Q_UNUSED(eventType)
QString strKey(keyEvent->key);
if (strKey == "Unidentified" || strKey == "Process")
return false;
QWasmInputContext *wasmInput = reinterpret_cast<QWasmInputContext*>(userData);
wasmInput->inputStringChanged(strKey, wasmInput);
wasmInput->inputStringChanged(strKey, eventType, wasmInput);
return true;
}

View File

@ -29,7 +29,7 @@ public:
bool isValid() const override { return true; }
void focusWindowChanged(QWindow *focusWindow);
void inputStringChanged(QString &, QWasmInputContext *context);
void inputStringChanged(QString &, int eventType, QWasmInputContext *context);
private:
emscripten::val inputHandlerElementForFocusedWindow();