aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/platform/qquickplatformfiledialog.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-08-09 17:24:23 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-08-10 07:44:10 +0000
commitbbc0a7b5c45e061f1aeb78c29d458fb7d4446d71 (patch)
tree9aa7a2d7f9f58f2a1cf5eeb6df745b2f7bd69a44 /src/imports/platform/qquickplatformfiledialog.cpp
parentbf4761232edd938425cf70b140be8992e697bc5d (diff)
FileDialog: handle defaultSuffix
Looks like defaultSuffix is not handled by QPlatformFileDialog even if it is passed via QFileDialogOptions. This patch makes QML FileDialog handle the defaultSuffix the same way QFileDialog from QtWidgets does. Change-Id: Icdb527715a6bdfc8d90b55639c4926941cbd5afd Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/imports/platform/qquickplatformfiledialog.cpp')
-rw-r--r--src/imports/platform/qquickplatformfiledialog.cpp29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/imports/platform/qquickplatformfiledialog.cpp b/src/imports/platform/qquickplatformfiledialog.cpp
index f6d99cb3..23f696f8 100644
--- a/src/imports/platform/qquickplatformfiledialog.cpp
+++ b/src/imports/platform/qquickplatformfiledialog.cpp
@@ -122,8 +122,12 @@ QQuickPlatformFileDialog::QQuickPlatformFileDialog(QObject *parent)
dialog = new QWidgetPlatformFileDialog(this);
#endif
if (QPlatformFileDialogHelper *fileDialog = qobject_cast<QPlatformFileDialogHelper *>(dialog)) {
- connect(fileDialog, &QPlatformFileDialogHelper::fileSelected, this, &QQuickPlatformFileDialog::fileSelected);
- connect(fileDialog, &QPlatformFileDialogHelper::filesSelected, this, &QQuickPlatformFileDialog::filesSelected);
+ connect(fileDialog, &QPlatformFileDialogHelper::fileSelected, [this](const QUrl &file) {
+ emit fileSelected(addDefaultSuffix(file));
+ });
+ connect(fileDialog, &QPlatformFileDialogHelper::filesSelected, [this](const QList<QUrl> &files) {
+ emit filesSelected(addDefaultSuffixes(files));
+ });
connect(fileDialog, &QPlatformFileDialogHelper::currentChanged, [this](const QUrl &url) {
if (m_current == url)
return;
@@ -189,7 +193,7 @@ QUrl QQuickPlatformFileDialog::currentFile() const
if (QPlatformFileDialogHelper *fileDialog = qobject_cast<QPlatformFileDialogHelper *>(handle()))
m_current = fileDialog->selectedFiles().value(0);
}
- return m_current;
+ return addDefaultSuffix(m_current);
}
void QQuickPlatformFileDialog::setCurrentFile(const QUrl &file)
@@ -362,4 +366,23 @@ void QQuickPlatformFileDialog::applyOptions()
m_options->setWindowTitle(title());
}
+QUrl QQuickPlatformFileDialog::addDefaultSuffix(const QUrl &file) const
+{
+ QUrl url = file;
+ const QString path = url.path();
+ const QString suffix = m_options->defaultSuffix();
+ if (!suffix.isEmpty() && !path.endsWith(QLatin1Char('/')) && path.lastIndexOf(QLatin1Char('.')) == -1)
+ url.setPath(path + QLatin1Char('.') + suffix);
+ return url;
+}
+
+QList<QUrl> QQuickPlatformFileDialog::addDefaultSuffixes(const QList<QUrl> &files) const
+{
+ QList<QUrl> urls;
+ urls.reserve(files.size());
+ for (const QUrl &file : files)
+ urls += addDefaultSuffix(file);
+ return urls;
+}
+
QT_END_NAMESPACE