summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmclipboard.cpp
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@gmail.com>2023-10-19 16:33:25 +1000
committerLorn Potter <lorn.potter@gmail.com>2023-12-22 08:06:08 +1000
commit1f7d222cec1e8659d7bfa19ec3c1098a2bc00f35 (patch)
treec476f09ec2849c525805b9d6d714fff07b23fee4 /src/plugins/platforms/wasm/qwasmclipboard.cpp
parent8cc84a1386b77701ebc9c9d4efbc1b033d0e326b (diff)
wasm: write file to storage on drop
Change-Id: Ibd1b5d623da07ad611cce577929a23ba991b6738 Pick-to: 6.7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmclipboard.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmclipboard.cpp29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/plugins/platforms/wasm/qwasmclipboard.cpp b/src/plugins/platforms/wasm/qwasmclipboard.cpp
index 9c7088067eb..786267277af 100644
--- a/src/plugins/platforms/wasm/qwasmclipboard.cpp
+++ b/src/plugins/platforms/wasm/qwasmclipboard.cpp
@@ -70,16 +70,7 @@ static void qClipboardPasteTo(val event)
{
event.call<void>("preventDefault"); // prevent browser from handling drop event
- static std::shared_ptr<qstdweb::CancellationFlag> readDataCancellation = nullptr;
- dom::DataTransfer transfer(event["clipboardData"]);
- auto data = transfer.toMimeDataWithFile();
- if (data->formats().isEmpty())
- return;
- // Persist clipboard data so that the app can read it when handling the CTRL+V
- QWasmIntegration::get()->clipboard()->QPlatformClipboard::setMimeData(data,
- QClipboard::Clipboard);
- QWindowSystemInterface::handleKeyEvent(0, QEvent::KeyPress, Qt::Key_V,
- Qt::ControlModifier, "V");
+ QWasmIntegration::get()->getWasmClipboard()->sendClipboardData(event);
}
EMSCRIPTEN_BINDINGS(qtClipboardModule) {
@@ -292,4 +283,22 @@ void QWasmClipboard::writeToClipboard()
document.call<val>("execCommand", val("copy"));
}
+void QWasmClipboard::sendClipboardData(emscripten::val event)
+{
+ dom::DataTransfer transfer(event["clipboardData"]);
+ QMimeData *mData;
+ const auto pointerCallback = std::function([&](QMimeData &data) {
+ mData = &data;
+ // Persist clipboard data so that the app can read it when handling the CTRL+V
+ QWasmIntegration::get()->clipboard()->QPlatformClipboard::setMimeData(mData,
+ QClipboard::Clipboard);
+ QWindowSystemInterface::handleKeyEvent(0, QEvent::KeyPress, Qt::Key_V,
+ Qt::ControlModifier, "V");
+ QWindowSystemInterface::handleKeyEvent(0, QEvent::KeyRelease, Qt::Key_V,
+ Qt::ControlModifier, "V");
+ });
+
+ transfer.toMimeDataWithFile(pointerCallback); // mimedata
+
+}
QT_END_NAMESPACE