diff options
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmcompositor.cpp')
| -rw-r--r-- | src/plugins/platforms/wasm/qwasmcompositor.cpp | 67 |
1 files changed, 16 insertions, 51 deletions
diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp index 5547fac2ad0..e93098cf79d 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.cpp +++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp @@ -1131,63 +1131,28 @@ void QWasmCompositor::WindowManipulation::onPointerUp(const PointerEvent& event) m_screen->canvas().call<void>("releasePointerCapture", event.pointerId); } -bool QWasmCompositor::processKeyboard(int eventType, const EmscriptenKeyboardEvent *keyEvent) +bool QWasmCompositor::processKeyboard(int eventType, const EmscriptenKeyboardEvent *emKeyEvent) { - Qt::Key qtKey; - QString keyText; - QEvent::Type keyType = QEvent::None; - switch (eventType) { - case EMSCRIPTEN_EVENT_KEYPRESS: - case EMSCRIPTEN_EVENT_KEYDOWN: // down - keyType = QEvent::KeyPress; - qtKey = m_eventTranslator->getKey(keyEvent); - keyText = m_eventTranslator->getKeyText(keyEvent, qtKey); - break; - case EMSCRIPTEN_EVENT_KEYUP: // up - keyType = QEvent::KeyRelease; - break; - default: - break; - }; - - if (keyType == QEvent::None) - return 0; - - QFlags<Qt::KeyboardModifier> modifiers = KeyboardModifier::getForEvent(*keyEvent); + Q_ASSERT(eventType == EMSCRIPTEN_EVENT_KEYDOWN || eventType == EMSCRIPTEN_EVENT_KEYUP); - // Clipboard fallback path: cut/copy/paste are handled by clipboard event - // handlers if direct clipboard access is not available. - if (!QWasmIntegration::get()->getWasmClipboard()->hasClipboardApi && modifiers & Qt::ControlModifier && - (qtKey == Qt::Key_X || qtKey == Qt::Key_C || qtKey == Qt::Key_V)) { - if (qtKey == Qt::Key_V) { - QWasmIntegration::get()->getWasmClipboard()->isPaste = true; - } - return false; - } + auto translatedEvent = m_eventTranslator->translateKeyEvent(eventType, emKeyEvent); - bool accepted = false; + const QFlags<Qt::KeyboardModifier> modifiers = KeyboardModifier::getForEvent(*emKeyEvent); - if (keyType == QEvent::KeyPress && - modifiers.testFlag(Qt::ControlModifier) - && qtKey == Qt::Key_V) { - QWasmIntegration::get()->getWasmClipboard()->isPaste = true; - accepted = false; // continue on to event - } else { - if (keyText.isEmpty()) - keyText = QString(keyEvent->key); - if (keyText.size() > 1) - keyText.clear(); - accepted = QWindowSystemInterface::handleKeyEvent<QWindowSystemInterface::SynchronousDelivery>( - 0, keyType, qtKey, modifiers, keyText); - } - if (keyType == QEvent::KeyPress && - modifiers.testFlag(Qt::ControlModifier) - && qtKey == Qt::Key_C) { - QWasmIntegration::get()->getWasmClipboard()->isPaste = false; - accepted = false; // continue on to event + // Clipboard path: cut/copy/paste are handled by clipboard event or direct clipboard access. + if (translatedEvent.type == QEvent::KeyPress && modifiers.testFlag(Qt::ControlModifier) + && (translatedEvent.key == Qt::Key_X || translatedEvent.key == Qt::Key_V + || translatedEvent.key == Qt::Key_C)) { + QWasmIntegration::get()->getWasmClipboard()->isPaste = translatedEvent.key == Qt::Key_V; + return false; // continue on to event } - return accepted; + if (translatedEvent.text.isEmpty()) + translatedEvent.text = QString(emKeyEvent->key); + if (translatedEvent.text.size() > 1) + translatedEvent.text.clear(); + return QWindowSystemInterface::handleKeyEvent<QWindowSystemInterface::SynchronousDelivery>( + 0, translatedEvent.type, translatedEvent.key, modifiers, translatedEvent.text); } bool QWasmCompositor::processWheel(int eventType, const EmscriptenWheelEvent *wheelEvent) |
