Return a correct filter from QFileDialog::selectedMimeTypeFilter()
QFileDialog::selectedMimeTypeFilter() returns either an empty filter in the case when a platform file dialog doesn't implement mime type filters, or initiallySelectedMimeTypeFilter() in the case of Qt's file dialog. In both cases the result is incorrect. Make it return a mime type filter corresponding to a selected name filter. As a result, tst_QFiledialog::setMimeTypeFilters() has to be fixed: QFileDialog::selectMimeTypeFilter() can't select a name filter for an invalid mime type, and "application/json" is not supported by RHEL 6.6, so replace it by "application/pdf". Change-Id: I58d3be860a9b5e8a72cba86d74b520178115a812 Reviewed-by: David Faure <david.faure@kdab.com>bb10
parent
4af292fe51
commit
4d73ab73c8
|
|
@ -1462,19 +1462,6 @@ void QFileDialog::selectNameFilter(const QString &filter)
|
|||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* \since 5.9
|
||||
* \return The mimetype of the file that the user selected in the file dialog.
|
||||
*/
|
||||
QString QFileDialog::selectedMimeTypeFilter() const
|
||||
{
|
||||
Q_D(const QFileDialog);
|
||||
if (!d->usingWidgets())
|
||||
return d->selectedMimeTypeFilter_sys();
|
||||
|
||||
return d->options->initiallySelectedMimeTypeFilter();
|
||||
}
|
||||
|
||||
/*!
|
||||
\since 4.4
|
||||
|
||||
|
|
@ -1611,6 +1598,36 @@ void QFileDialog::selectMimeTypeFilter(const QString &filter)
|
|||
|
||||
#endif // QT_NO_MIMETYPE
|
||||
|
||||
/*!
|
||||
* \since 5.9
|
||||
* \return The mimetype of the file that the user selected in the file dialog.
|
||||
*/
|
||||
QString QFileDialog::selectedMimeTypeFilter() const
|
||||
{
|
||||
Q_D(const QFileDialog);
|
||||
QString mimeTypeFilter;
|
||||
if (!d->usingWidgets())
|
||||
mimeTypeFilter = d->selectedMimeTypeFilter_sys();
|
||||
|
||||
#ifndef QT_NO_MIMETYPE
|
||||
if (mimeTypeFilter.isNull() && !d->options->mimeTypeFilters().isEmpty()) {
|
||||
const auto nameFilter = selectedNameFilter();
|
||||
const auto mimeTypes = d->options->mimeTypeFilters();
|
||||
for (const auto &mimeType: mimeTypes) {
|
||||
QString filter = nameFilterForMime(mimeType);
|
||||
if (testOption(HideNameFilterDetails))
|
||||
filter = qt_strip_filters({ filter }).first();
|
||||
if (filter == nameFilter) {
|
||||
mimeTypeFilter = mimeType;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return mimeTypeFilter;
|
||||
}
|
||||
|
||||
/*!
|
||||
\property QFileDialog::viewMode
|
||||
\brief the way files and directories are displayed in the dialog
|
||||
|
|
|
|||
|
|
@ -1049,12 +1049,12 @@ void tst_QFiledialog::setMimeTypeFilters_data()
|
|||
QTest::addColumn<QString>("expectedSelectedMimeTypeFilter");
|
||||
|
||||
const auto headerMime = QStringLiteral("text/x-chdr");
|
||||
const auto jsonMime = QStringLiteral("application/json");
|
||||
const auto pdfMime = QStringLiteral("application/pdf");
|
||||
const auto zipMime = QStringLiteral("application/zip");
|
||||
|
||||
QTest::newRow("single mime filter (C header file)") << QStringList {headerMime} << headerMime << headerMime;
|
||||
QTest::newRow("single mime filter (JSON file)") << QStringList {jsonMime} << jsonMime << jsonMime;
|
||||
QTest::newRow("multiple mime filters") << QStringList {jsonMime, zipMime} << jsonMime << jsonMime;
|
||||
QTest::newRow("single mime filter (JSON file)") << QStringList {pdfMime} << pdfMime << pdfMime;
|
||||
QTest::newRow("multiple mime filters") << QStringList {pdfMime, zipMime} << pdfMime << pdfMime;
|
||||
}
|
||||
|
||||
void tst_QFiledialog::setMimeTypeFilters()
|
||||
|
|
@ -1068,6 +1068,10 @@ void tst_QFiledialog::setMimeTypeFilters()
|
|||
fd.selectMimeTypeFilter(targetMimeTypeFilter);
|
||||
|
||||
QCOMPARE(fd.selectedMimeTypeFilter(), expectedSelectedMimeTypeFilter);
|
||||
|
||||
auto *filters = fd.findChild<QComboBox*>("fileTypeCombo");
|
||||
filters->setCurrentIndex(filters->count() - 1);
|
||||
QCOMPARE(fd.selectedMimeTypeFilter(), mimeTypeFilters.last());
|
||||
}
|
||||
|
||||
void tst_QFiledialog::setEmptyNameFilter()
|
||||
|
|
|
|||
Loading…
Reference in New Issue