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>
This commit is contained in:
parent
c6f3d919dd
commit
8727826871
@ -552,7 +552,7 @@ void QFileDialogPrivate::helperPrepareShow(QPlatformDialogHelper *)
|
|||||||
directory.absolutePath() :
|
directory.absolutePath() :
|
||||||
QString());
|
QString());
|
||||||
options->setInitiallySelectedNameFilter(q->selectedNameFilter());
|
options->setInitiallySelectedNameFilter(q->selectedNameFilter());
|
||||||
options->setInitiallySelectedFiles(q->selectedFiles());
|
options->setInitiallySelectedFiles(userSelectedFiles());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QFileDialogPrivate::helperDone(QDialog::DialogCode code, QPlatformDialogHelper *)
|
void QFileDialogPrivate::helperDone(QDialog::DialogCode code, QPlatformDialogHelper *)
|
||||||
@ -1009,6 +1009,24 @@ QStringList QFileDialogPrivate::typedFiles() const
|
|||||||
return addDefaultSuffixToFiles(files);
|
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 QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList filesToFix) const
|
||||||
{
|
{
|
||||||
QStringList files;
|
QStringList files;
|
||||||
@ -1046,19 +1064,13 @@ QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList filesT
|
|||||||
QStringList QFileDialog::selectedFiles() const
|
QStringList QFileDialog::selectedFiles() const
|
||||||
{
|
{
|
||||||
Q_D(const QFileDialog);
|
Q_D(const QFileDialog);
|
||||||
if (d->nativeDialogInUse)
|
|
||||||
return d->addDefaultSuffixToFiles(d->selectedFiles_sys());
|
|
||||||
|
|
||||||
QModelIndexList indexes = d->qFileDialogUi->listView->selectionModel()->selectedRows();
|
QStringList files = d->userSelectedFiles();
|
||||||
QStringList files;
|
if (files.isEmpty()) {
|
||||||
for (int i = 0; i < indexes.count(); ++i)
|
const FileMode fm = fileMode();
|
||||||
files.append(indexes.at(i).data(QFileSystemModel::FilePathRole).toString());
|
if (fm != ExistingFile && fm != ExistingFiles)
|
||||||
|
files.append(d->rootIndex().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());
|
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,6 +128,7 @@ public:
|
|||||||
static QString workingDirectory(const QString &path);
|
static QString workingDirectory(const QString &path);
|
||||||
static QString initialSelection(const QString &path);
|
static QString initialSelection(const QString &path);
|
||||||
QStringList typedFiles() const;
|
QStringList typedFiles() const;
|
||||||
|
QStringList userSelectedFiles() const;
|
||||||
QStringList addDefaultSuffixToFiles(const QStringList filesToFix) const;
|
QStringList addDefaultSuffixToFiles(const QStringList filesToFix) const;
|
||||||
bool removeDirectory(const QString &path);
|
bool removeDirectory(const QString &path);
|
||||||
void setLabelTextControl(QFileDialog::DialogLabel label, const QString &text);
|
void setLabelTextControl(QFileDialog::DialogLabel label, const QString &text);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user