summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-04-10 01:00:07 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-04-10 01:00:08 +0200
commitff88e20b8328b6aad5b787aacc5c39da563a67b1 (patch)
tree1c624086b71fa968b67789d9a3146509f07f58ae /src/plugins
parentac244dbcf21e730c9314a47736cbc46ee19eb787 (diff)
parent1029a2e01051cd35452941e7b49b36520481cdf0 (diff)
Merge remote-tracking branch 'origin/5.12' into 5.13
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/windows/qwindowsdialoghelpers.cpp39
1 files changed, 27 insertions, 12 deletions
diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
index ba441a1921..9de3268fc8 100644
--- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
+++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
@@ -1453,26 +1453,41 @@ static QString createTemporaryItemCopy(QWindowsShellItem &qItem, QString *errorM
return result;
}
+static QUrl itemToDialogUrl(QWindowsShellItem &qItem, QString *errorMessage)
+{
+ QUrl url = qItem.url();
+ if (url.isLocalFile() || url.scheme().startsWith(QLatin1String("http")))
+ return url;
+ const QString path = qItem.path();
+ if (path.isEmpty() && !qItem.isDir() && qItem.canStream()) {
+ const QString temporaryCopy = createTemporaryItemCopy(qItem, errorMessage);
+ if (temporaryCopy.isEmpty()) {
+ QDebug(errorMessage).noquote() << "Unable to create a local copy of"
+ << qItem << ": " << errorMessage;
+ return QUrl();
+ }
+ return QUrl::fromLocalFile(temporaryCopy);
+ }
+ if (!url.isValid())
+ QDebug(errorMessage).noquote() << "Invalid URL obtained from" << qItem;
+ return url;
+}
+
QList<QUrl> QWindowsNativeOpenFileDialog::dialogResult() const
{
QList<QUrl> result;
IShellItemArray *items = nullptr;
if (SUCCEEDED(openFileDialog()->GetResults(&items)) && items) {
+ QString errorMessage;
for (IShellItem *item : QWindowsShellItem::itemsFromItemArray(items)) {
QWindowsShellItem qItem(item);
- const QString path = qItem.path();
- if (path.isEmpty() && !qItem.isDir()) {
- QString errorMessage;
- const QString temporaryCopy = createTemporaryItemCopy(qItem, &errorMessage);
- if (temporaryCopy.isEmpty()) {
- qWarning().noquote() << "Unable to create a local copy of" << qItem
- << ": " << errorMessage;
- } else {
- result.append(QUrl::fromLocalFile(temporaryCopy));
- }
- } else {
- result.append(qItem.url());
+ const QUrl url = itemToDialogUrl(qItem, &errorMessage);
+ if (!url.isValid()) {
+ qWarning("%s", qPrintable(errorMessage));
+ result.clear();
+ break;
}
+ result.append(url);
}
}
return result;