diff --git a/src/filechooser.cpp b/src/filechooser.cpp --- a/src/filechooser.cpp +++ b/src/filechooser.cpp @@ -24,14 +24,18 @@ #include #include #include +#include #include #include #include +#include #include #include #include #include +#include +#include Q_LOGGING_CATEGORY(XdgDesktopPortalKdeFileChooser, "xdp-kde-file-chooser") @@ -202,6 +206,27 @@ QUrl url = QUrl::fromLocalFile(filename); files << url.toDisplayString(); } + + for (const QUrl &url : fileDialog->m_fileWidget->selectedUrls()) { + // HACK we have to avoid returning until we copy the files + QEventLoop loop; + auto copyJob = KIO::copy(url, QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation))); + connect(copyJob, &KIO::CopyJob::copyingDone, this, [&files, &loop] (KIO::Job *job, const QUrl &from, const QUrl &to, const QDateTime &mtime, bool directory, bool renamed) { + Q_UNUSED(job); + Q_UNUSED(from); + Q_UNUSED(mtime); + Q_UNUSED(directory); + Q_UNUSED(renamed); + files << to.toDisplayString(); + loop.exit(); + }); + loop.exec(); + } + + if (files.isEmpty()) { + return 2; + } + results.insert(QStringLiteral("uris"), files); return 0; }