diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2012-10-26 15:03:00 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-11-02 12:16:49 +0100 |
commit | 8727826871c5b1431b3930c996ac6a1de83776ce (patch) | |
tree | 000f316773afe184310d537bc689efa570150318 /src/widgets/dialogs | |
parent | c6f3d919dd82497183bdf780b0d00aeb374aa934 (diff) |
QFileDialog: Do not pass on file model root to QFileDialogOptions.
QFileDialog::selectedFiles() defaults to file model root
for 'AnyFile', which confuses native dialogs since
selectedFiles == directory in that case. Split up
QFileDialog::selectedFiles() and skip the default when
initializing QFileDialogOptions for native dialogs.
Change-Id: I65cda182df8b1748159058fc361c10d97f5650ce
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
Diffstat (limited to 'src/widgets/dialogs')
-rw-r--r-- | src/widgets/dialogs/qfiledialog.cpp | 38 | ||||
-rw-r--r-- | src/widgets/dialogs/qfiledialog_p.h | 1 |
2 files changed, 26 insertions, 13 deletions
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 2ff0d03c35..9a2e32b631 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -552,7 +552,7 @@ void QFileDialogPrivate::helperPrepareShow(QPlatformDialogHelper *) directory.absolutePath() : QString()); options->setInitiallySelectedNameFilter(q->selectedNameFilter()); - options->setInitiallySelectedFiles(q->selectedFiles()); + options->setInitiallySelectedFiles(userSelectedFiles()); } void QFileDialogPrivate::helperDone(QDialog::DialogCode code, QPlatformDialogHelper *) @@ -1009,6 +1009,24 @@ QStringList QFileDialogPrivate::typedFiles() const return addDefaultSuffixToFiles(files); } +// Return selected files without defaulting to the root of the file system model +// used for initializing QFileDialogOptions for native dialogs. The default is +// not suitable for native dialogs since it mostly equals directory(). +QStringList QFileDialogPrivate::userSelectedFiles() const +{ + if (nativeDialogInUse) + return addDefaultSuffixToFiles(selectedFiles_sys()); + + QStringList files; + foreach (const QModelIndex &index, qFileDialogUi->listView->selectionModel()->selectedRows()) + files.append(index.data(QFileSystemModel::FilePathRole).toString()); + + if (files.isEmpty() && !lineEdit()->text().isEmpty()) + files = typedFiles(); + + return files; +} + QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList filesToFix) const { QStringList files; @@ -1046,19 +1064,13 @@ QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList filesT QStringList QFileDialog::selectedFiles() const { Q_D(const QFileDialog); - if (d->nativeDialogInUse) - return d->addDefaultSuffixToFiles(d->selectedFiles_sys()); - QModelIndexList indexes = d->qFileDialogUi->listView->selectionModel()->selectedRows(); - QStringList files; - for (int i = 0; i < indexes.count(); ++i) - files.append(indexes.at(i).data(QFileSystemModel::FilePathRole).toString()); - - if (files.isEmpty() && !d->lineEdit()->text().isEmpty()) - files = d->typedFiles(); - const FileMode fm = fileMode(); - if (files.isEmpty() && !(fm == ExistingFile || fm == ExistingFiles)) - files.append(d->rootIndex().data(QFileSystemModel::FilePathRole).toString()); + QStringList files = d->userSelectedFiles(); + if (files.isEmpty()) { + const FileMode fm = fileMode(); + if (fm != ExistingFile && fm != ExistingFiles) + files.append(d->rootIndex().data(QFileSystemModel::FilePathRole).toString()); + } return files; } diff --git a/src/widgets/dialogs/qfiledialog_p.h b/src/widgets/dialogs/qfiledialog_p.h index b13f36a4d6..592c4a0ac6 100644 --- a/src/widgets/dialogs/qfiledialog_p.h +++ b/src/widgets/dialogs/qfiledialog_p.h @@ -128,6 +128,7 @@ public: static QString workingDirectory(const QString &path); static QString initialSelection(const QString &path); QStringList typedFiles() const; + QStringList userSelectedFiles() const; QStringList addDefaultSuffixToFiles(const QStringList filesToFix) const; bool removeDirectory(const QString &path); void setLabelTextControl(QFileDialog::DialogLabel label, const QString &text); |