diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-08-09 17:24:23 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-08-10 07:44:10 +0000 |
commit | bbc0a7b5c45e061f1aeb78c29d458fb7d4446d71 (patch) | |
tree | 9aa7a2d7f9f58f2a1cf5eeb6df745b2f7bd69a44 /src/imports/platform | |
parent | bf4761232edd938425cf70b140be8992e697bc5d (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')
-rw-r--r-- | src/imports/platform/qquickplatformfiledialog.cpp | 29 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformfiledialog_p.h | 3 |
2 files changed, 29 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 diff --git a/src/imports/platform/qquickplatformfiledialog_p.h b/src/imports/platform/qquickplatformfiledialog_p.h index 643372c5..53e34731 100644 --- a/src/imports/platform/qquickplatformfiledialog_p.h +++ b/src/imports/platform/qquickplatformfiledialog_p.h @@ -118,6 +118,9 @@ protected: void applyOptions() override; private: + QUrl addDefaultSuffix(const QUrl &file) const; + QList<QUrl> addDefaultSuffixes(const QList<QUrl> &files) const; + FileMode m_fileMode; mutable QUrl m_current; QSharedPointer<QFileDialogOptions> m_options; |