directory.absolutePath() :
QString());
options->setInitiallySelectedNameFilter(q->selectedNameFilter());
- options->setInitiallySelectedFiles(q->selectedFiles());
+ options->setInitiallySelectedFiles(userSelectedFiles());
}
void QFileDialogPrivate::helperDone(QDialog::DialogCode code, QPlatformDialogHelper *)
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;
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;
}
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);