diff options
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmclipboard.cpp')
| -rw-r--r-- | src/plugins/platforms/wasm/qwasmclipboard.cpp | 41 |
1 files changed, 15 insertions, 26 deletions
diff --git a/src/plugins/platforms/wasm/qwasmclipboard.cpp b/src/plugins/platforms/wasm/qwasmclipboard.cpp index b96262319d8..7851162494d 100644 --- a/src/plugins/platforms/wasm/qwasmclipboard.cpp +++ b/src/plugins/platforms/wasm/qwasmclipboard.cpp @@ -46,7 +46,7 @@ static void commonCopyEvent(val event) event.call<void>("preventDefault"); } -static void qClipboardCutTo(val event) +void QWasmClipboard::cut(val event) { QWasmInputContext *wasmInput = QWasmIntegration::get()->wasmInputContext(); if (wasmInput && wasmInput->usingTextInput()) @@ -61,7 +61,7 @@ static void qClipboardCutTo(val event) commonCopyEvent(event); } -static void qClipboardCopyTo(val event) +void QWasmClipboard::copy(val event) { QWasmInputContext *wasmInput = QWasmIntegration::get()->wasmInputContext(); if (wasmInput && wasmInput->usingTextInput()) @@ -75,7 +75,7 @@ static void qClipboardCopyTo(val event) commonCopyEvent(event); } -static void qClipboardPasteTo(val event) +void QWasmClipboard::paste(val event) { QWasmInputContext *wasmInput = QWasmIntegration::get()->wasmInputContext(); if (wasmInput && wasmInput->usingTextInput()) @@ -86,12 +86,6 @@ static void qClipboardPasteTo(val event) QWasmIntegration::get()->getWasmClipboard()->sendClipboardData(event); } -EMSCRIPTEN_BINDINGS(qtClipboardModule) { - function("qtClipboardCutTo", &qClipboardCutTo); - function("qtClipboardCopyTo", &qClipboardCopyTo); - function("qtClipboardPasteTo", &qClipboardPasteTo); -} - QWasmClipboard::QWasmClipboard() { val clipboard = val::global("navigator")["clipboard"]; @@ -101,6 +95,13 @@ QWasmClipboard::QWasmClipboard() if (m_hasClipboardApi && hasPermissionsApi) initClipboardPermissions(); + + if (!shouldInstallWindowEventHandlers()) { + val document = val::global("document"); + m_documentCut = QWasmEventHandler(document, "cut", QWasmClipboard::cut); + m_documentCopy = QWasmEventHandler(document, "copy", QWasmClipboard::copy); + m_documentPaste = QWasmEventHandler(document, "paste", QWasmClipboard::paste); + } } QWasmClipboard::~QWasmClipboard() @@ -167,27 +168,15 @@ void QWasmClipboard::initClipboardPermissions() })()); } -void QWasmClipboard::installEventHandlers(const emscripten::val &target) +bool QWasmClipboard::hasClipboardApi() { - emscripten::val cContext = val::undefined(); - emscripten::val isChromium = val::global("window")["chrome"]; - if (!isChromium.isUndefined()) { - cContext = val::global("document"); - } else { - cContext = target; - } - // Fallback path for browsers which do not support direct clipboard access - cContext.call<void>("addEventListener", val("cut"), - val::module_property("qtClipboardCutTo"), true); - cContext.call<void>("addEventListener", val("copy"), - val::module_property("qtClipboardCopyTo"), true); - cContext.call<void>("addEventListener", val("paste"), - val::module_property("qtClipboardPasteTo"), true); + return m_hasClipboardApi; } -bool QWasmClipboard::hasClipboardApi() +bool QWasmClipboard::shouldInstallWindowEventHandlers() { - return m_hasClipboardApi; + // Chrome uses global handlers + return val::global("window")["chrome"].isUndefined() == false; } void QWasmClipboard::writeToClipboardApi() |
