summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmclipboard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmclipboard.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmclipboard.cpp41
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()