libqt5-qtbase/0004-QFileDialog-implement-getOpenFileUrl-and-friends-for.patch
Stephan Kulow e4c21e8f38 Accepting request 255354 from KDE:Qt5
- Added 0001-QFileDialog-emit-urlsSelected-urlSelected-in-accept.patch,
  0002-QUrl-fromLocalFile-QString-should-lead-to-an-empty-U.patch,
  0003-QFileDialog-turn-workingDirectory-into-a-QUrl.patch and
  0004-QFileDialog-implement-getOpenFileUrl-and-friends-for.patch
  from upstream to improve QFileDialog behaviour with both local
  and remote URL's
- Added 0001-QKdeTheme-use-system-wide-kdeglobals-as-a-fallback.patch:
  QTBUG-36184
- Added 0001-Add-QFont-strategy-to-disable-subpixel-antialiasing.patch,
  0002-Move-SubpixelAntialiasingType-from-QFontEngineFT-to-.patch,
  0003-Support-autohint-and-lcdfilter-fontconfig-configurat.patch
  and 0004-GTK2-theme-should-use-GTK-configured-font-variant.patch
  QTBUG-40396, QTBUG-32254, QTBUG-39643

OBS-URL: https://build.opensuse.org/request/show/255354
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqt5-qtbase?expand=0&rev=30
2014-10-14 11:24:52 +00:00

285 lines
10 KiB
Diff

From 2dcade09fca04dc45848a5a653b160e96aaab1e8 Mon Sep 17 00:00:00 2001
From: David Faure <david.faure@kdab.com>
Date: Wed, 9 Jul 2014 12:01:05 +0200
Subject: [PATCH 4/4] QFileDialog: implement getOpenFileUrl and friends for
real
i.e. make them support remote URLs.
To avoid code duplication, getOpenFileName/getSaveFileName/getExistingDirectory
are now implemented in terms of getOpenFileUrl/getSaveFileUrl/getExistingDirectoryUrl.
Change-Id: If409ac9ab72c2a65f04e2ef1dc28e7d47bbcd73c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
(cherry picked from commit 1a9701fe81c39450822c0d4b51c11444380a2fe4)
Conflicts:
src/widgets/dialogs/qfiledialog.cpp
---
src/widgets/dialogs/qfiledialog.cpp | 199 +++++++++++++++---------------------
1 file changed, 81 insertions(+), 118 deletions(-)
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp
index ab0361a..bc4a0a3 100644
--- a/src/widgets/dialogs/qfiledialog.cpp
+++ b/src/widgets/dialogs/qfiledialog.cpp
@@ -2110,35 +2110,9 @@ QString QFileDialog::getOpenFileName(QWidget *parent,
QString *selectedFilter,
Options options)
{
- QFileDialogArgs args;
- args.parent = parent;
- args.caption = caption;
- args.directory = QFileDialogPrivate::workingDirectory(QUrl::fromLocalFile(dir));
- args.selection = QFileDialogPrivate::initialSelection(QUrl::fromLocalFile(dir));
- args.filter = filter;
- args.mode = ExistingFile;
- args.options = options;
-#if defined(Q_WS_WIN)
- if (QGuiApplicationPrivate::platformIntegration()->usePlatformNativeDialog() && !(args.options & DontUseNativeDialog)) {
- return qt_win_get_open_file_name(args, &(args.directory), selectedFilter);
- }
-#endif
-
- // create a qt dialog
- QFileDialog dialog(args);
- if (selectedFilter && !selectedFilter->isEmpty())
- dialog.selectNameFilter(*selectedFilter);
- if (dialog.exec() == QDialog::Accepted) {
- if (selectedFilter)
- *selectedFilter = dialog.selectedNameFilter();
- return dialog.selectedFiles().value(0);
- }
- return QString();
-}
-
-static inline QUrl dialogResultToUrl(const QString &file)
-{
- return file.isEmpty() ? QUrl() : QUrl::fromLocalFile(file);
+ const QStringList schemes = QStringList(QStringLiteral("file"));
+ const QUrl selectedUrl = getOpenFileUrl(parent, caption, QUrl::fromLocalFile(dir), filter, selectedFilter, options, schemes);
+ return selectedUrl.toLocalFile();
}
/*!
@@ -2176,10 +2150,26 @@ QUrl QFileDialog::getOpenFileUrl(QWidget *parent,
Options options,
const QStringList &supportedSchemes)
{
- Q_UNUSED(supportedSchemes);
+ Q_UNUSED(supportedSchemes); // TODO
+
+ QFileDialogArgs args;
+ args.parent = parent;
+ args.caption = caption;
+ args.directory = QFileDialogPrivate::workingDirectory(dir);
+ args.selection = QFileDialogPrivate::initialSelection(dir);
+ args.filter = filter;
+ args.mode = ExistingFile;
+ args.options = options;
- // Falls back to local file
- return dialogResultToUrl(getOpenFileName(parent, caption, dir.toLocalFile(), filter, selectedFilter, options));
+ QFileDialog dialog(args);
+ if (selectedFilter && !selectedFilter->isEmpty())
+ dialog.selectNameFilter(*selectedFilter);
+ if (dialog.exec() == QDialog::Accepted) {
+ if (selectedFilter)
+ *selectedFilter = dialog.selectedNameFilter();
+ return dialog.selectedUrls().value(0);
+ }
+ return QUrl();
}
/*!
@@ -2238,31 +2228,12 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent,
QString *selectedFilter,
Options options)
{
- QFileDialogArgs args;
- args.parent = parent;
- args.caption = caption;
- args.directory = QFileDialogPrivate::workingDirectory(QUrl::fromLocalFile(dir));
- args.selection = QFileDialogPrivate::initialSelection(QUrl::fromLocalFile(dir));
- args.filter = filter;
- args.mode = ExistingFiles;
- args.options = options;
-
-#if defined(Q_WS_WIN)
- if (QGuiApplicationPrivate::platformIntegration()->usePlatformNativeDialog() && !(args.options & DontUseNativeDialog)) {
- return qt_win_get_open_file_names(args, &(args.directory), selectedFilter);
- }
-#endif
-
- // create a qt dialog
- QFileDialog dialog(args);
- if (selectedFilter && !selectedFilter->isEmpty())
- dialog.selectNameFilter(*selectedFilter);
- if (dialog.exec() == QDialog::Accepted) {
- if (selectedFilter)
- *selectedFilter = dialog.selectedNameFilter();
- return dialog.selectedFiles();
- }
- return QStringList();
+ const QStringList schemes = QStringList(QStringLiteral("file"));
+ const QList<QUrl> selectedUrls = getOpenFileUrls(parent, caption, QUrl::fromLocalFile(dir), filter, selectedFilter, options, schemes);
+ QStringList fileNames;
+ foreach (const QUrl &url, selectedUrls)
+ fileNames << url.toLocalFile();
+ return fileNames;
}
/*!
@@ -2303,14 +2274,24 @@ QList<QUrl> QFileDialog::getOpenFileUrls(QWidget *parent,
{
Q_UNUSED(supportedSchemes);
- // Falls back to local files
- QList<QUrl> urls;
-
- const QStringList fileNames = getOpenFileNames(parent, caption, dir.toLocalFile(), filter, selectedFilter, options);
- foreach (const QString &fileName, fileNames)
- urls << QUrl::fromLocalFile(fileName);
+ QFileDialogArgs args;
+ args.parent = parent;
+ args.caption = caption;
+ args.directory = QFileDialogPrivate::workingDirectory(dir);
+ args.selection = QFileDialogPrivate::initialSelection(dir);
+ args.filter = filter;
+ args.mode = ExistingFiles;
+ args.options = options;
- return urls;
+ QFileDialog dialog(args);
+ if (selectedFilter && !selectedFilter->isEmpty())
+ dialog.selectNameFilter(*selectedFilter);
+ if (dialog.exec() == QDialog::Accepted) {
+ if (selectedFilter)
+ *selectedFilter = dialog.selectedNameFilter();
+ return dialog.selectedUrls();
+ }
+ return QList<QUrl>();
}
/*!
@@ -2370,33 +2351,9 @@ QString QFileDialog::getSaveFileName(QWidget *parent,
QString *selectedFilter,
Options options)
{
- QFileDialogArgs args;
- args.parent = parent;
- args.caption = caption;
- args.directory = QFileDialogPrivate::workingDirectory(QUrl::fromLocalFile(dir));
- args.selection = QFileDialogPrivate::initialSelection(QUrl::fromLocalFile(dir));
- args.filter = filter;
- args.mode = AnyFile;
- args.options = options;
-
-#if defined(Q_WS_WIN)
- if (QGuiApplicationPrivate::platformIntegration()->usePlatformNativeDialog() && !(args.options & DontUseNativeDialog)) {
- return qt_win_get_save_file_name(args, &(args.directory), selectedFilter);
- }
-#endif
-
- // create a qt dialog
- QFileDialog dialog(args);
- dialog.setAcceptMode(AcceptSave);
- if (selectedFilter && !selectedFilter->isEmpty())
- dialog.selectNameFilter(*selectedFilter);
- if (dialog.exec() == QDialog::Accepted) {
- if (selectedFilter)
- *selectedFilter = dialog.selectedNameFilter();
- return dialog.selectedFiles().value(0);
- }
-
- return QString();
+ const QStringList schemes = QStringList(QStringLiteral("file"));
+ const QUrl selectedUrl = getSaveFileUrl(parent, caption, QUrl::fromLocalFile(dir), filter, selectedFilter, options, schemes);
+ return selectedUrl.toLocalFile();
}
/*!
@@ -2436,8 +2393,25 @@ QUrl QFileDialog::getSaveFileUrl(QWidget *parent,
{
Q_UNUSED(supportedSchemes);
- // Falls back to local file
- return dialogResultToUrl(getSaveFileName(parent, caption, dir.toLocalFile(), filter, selectedFilter, options));
+ QFileDialogArgs args;
+ args.parent = parent;
+ args.caption = caption;
+ args.directory = QFileDialogPrivate::workingDirectory(dir);
+ args.selection = QFileDialogPrivate::initialSelection(dir);
+ args.filter = filter;
+ args.mode = AnyFile;
+ args.options = options;
+
+ QFileDialog dialog(args);
+ dialog.setAcceptMode(AcceptSave);
+ if (selectedFilter && !selectedFilter->isEmpty())
+ dialog.selectNameFilter(*selectedFilter);
+ if (dialog.exec() == QDialog::Accepted) {
+ if (selectedFilter)
+ *selectedFilter = dialog.selectedNameFilter();
+ return dialog.selectedUrls().value(0);
+ }
+ return QUrl();
}
/*!
@@ -2484,29 +2458,9 @@ QString QFileDialog::getExistingDirectory(QWidget *parent,
const QString &dir,
Options options)
{
- QFileDialogArgs args;
- args.parent = parent;
- args.caption = caption;
- args.directory = QFileDialogPrivate::workingDirectory(QUrl::fromLocalFile(dir));
- args.mode = (options & ShowDirsOnly ? DirectoryOnly : Directory);
- args.options = options;
-
-#if defined(Q_WS_WIN)
- if (QGuiApplicationPrivate::platformIntegration()->usePlatformNativeDialog() && !(args.options & DontUseNativeDialog) && (options & ShowDirsOnly)
-#if defined(Q_OS_WINCE)
- && qt_priv_ptr_valid
-#endif
- ) {
- return qt_win_get_existing_directory(args);
- }
-#endif
-
- // create a qt dialog
- QFileDialog dialog(args);
- if (dialog.exec() == QDialog::Accepted) {
- return dialog.selectedFiles().value(0);
- }
- return QString();
+ const QStringList schemes = QStringList(QStringLiteral("file"));
+ const QUrl selectedUrl = getExistingDirectoryUrl(parent, caption, QUrl::fromLocalFile(dir), options, schemes);
+ return selectedUrl.toLocalFile();
}
/*!
@@ -2544,8 +2498,17 @@ QUrl QFileDialog::getExistingDirectoryUrl(QWidget *parent,
{
Q_UNUSED(supportedSchemes);
- // Falls back to local file
- return dialogResultToUrl(getExistingDirectory(parent, caption, dir.toLocalFile(), options));
+ QFileDialogArgs args;
+ args.parent = parent;
+ args.caption = caption;
+ args.directory = QFileDialogPrivate::workingDirectory(dir);
+ args.mode = (options & ShowDirsOnly ? DirectoryOnly : Directory);
+ args.options = options;
+
+ QFileDialog dialog(args);
+ if (dialog.exec() == QDialog::Accepted)
+ return dialog.selectedUrls().value(0);
+ return QUrl();
}
inline static QUrl _qt_get_directory(const QUrl &url)
--
2.1.1