diff options
author | Alexander Volkov <a.volkov@rusbitech.ru> | 2018-04-23 14:10:01 +0300 |
---|---|---|
committer | Alexander Volkov <a.volkov@rusbitech.ru> | 2018-06-27 12:14:44 +0000 |
commit | 4d73ab73c81fff83e4423f0d3c918781587f14bf (patch) | |
tree | e5c306cbbc2e34ba769c49211385a31efd30665e | |
parent | 4af292fe5158c2d19e8ab1351c71c3940c7f1032 (diff) |
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>
-rw-r--r-- | src/widgets/dialogs/qfiledialog.cpp | 43 | ||||
-rw-r--r-- | tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp | 10 |
2 files changed, 37 insertions, 16 deletions
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 5d8ca458c2..ecd2ab6776 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -1463,19 +1463,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 Returns the filter that the user selected in the file dialog. @@ -1612,6 +1599,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 diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp index c3bdf3701f..47d63b7d53 100644 --- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp @@ -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() |