diff options
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmclipboard.cpp')
-rw-r--r-- | src/plugins/platforms/wasm/qwasmclipboard.cpp | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/src/plugins/platforms/wasm/qwasmclipboard.cpp b/src/plugins/platforms/wasm/qwasmclipboard.cpp index 63fea7738de..7a7b253b198 100644 --- a/src/plugins/platforms/wasm/qwasmclipboard.cpp +++ b/src/plugins/platforms/wasm/qwasmclipboard.cpp @@ -123,9 +123,11 @@ EMSCRIPTEN_BINDINGS(clipboard_module) { function("qClipboardPasteTo", &qClipboardPasteTo); } -QWasmClipboard::QWasmClipboard() : - hasClipboardApi(false) +QWasmClipboard::QWasmClipboard() { + val clipboard = val::global("navigator")["clipboard"]; + hasClipboardApi = (!clipboard.isUndefined() && !clipboard["readText"].isUndefined()); + initClipboardEvents(); } @@ -177,29 +179,32 @@ void QWasmClipboard::qWasmClipboardPaste(QMimeData *mData) void QWasmClipboard::initClipboardEvents() { - val navigator = val::global("navigator"); - val permissions = navigator["permissions"]; - val clipboard = navigator["clipboard"]; + if (!hasClipboardApi) + return; - hasClipboardApi = (!clipboard.isUndefined() && !clipboard["readText"].isUndefined()); - if (hasClipboardApi) { - val readPermissionsMap = val::object(); - readPermissionsMap.set("name", val("clipboard-read")); - permissions.call<val>("query", readPermissionsMap); - - val writePermissionsMap = val::object(); - writePermissionsMap.set("name", val("clipboard-write")); - permissions.call<val>("query", writePermissionsMap); - - } else { - val canvas = val::module_property("canvas"); - canvas.call<void>("addEventListener", std::string("cut"), - val::module_property("qClipboardCutTo")); - canvas.call<void>("addEventListener", std::string("copy"), - val::module_property("qClipboardCopyTo")); - canvas.call<void>("addEventListener", std::string("paste"), - val::module_property("qClipboardPasteTo")); - } + val permissions = val::global("navigator")["permissions"]; + val readPermissionsMap = val::object(); + readPermissionsMap.set("name", val("clipboard-read")); + permissions.call<val>("query", readPermissionsMap); + + val writePermissionsMap = val::object(); + writePermissionsMap.set("name", val("clipboard-write")); + permissions.call<val>("query", writePermissionsMap); +} + +void QWasmClipboard::installEventHandlers(const QString &canvasId) +{ + if (hasClipboardApi) + return; + + // Fallback path for browsers which do not support direct clipboard access + val canvas = val::global(canvasId.toUtf8().constData()); + canvas.call<void>("addEventListener", std::string("cut"), + val::module_property("qClipboardCutTo")); + canvas.call<void>("addEventListener", std::string("copy"), + val::module_property("qClipboardCopyTo")); + canvas.call<void>("addEventListener", std::string("paste"), + val::module_property("qClipboardPasteTo")); } void QWasmClipboard::readTextFromClipboard() |