summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Volkov <a.volkov@rusbitech.ru>2018-04-23 14:10:01 +0300
committerAlexander Volkov <a.volkov@rusbitech.ru>2018-06-27 12:14:44 +0000
commit4d73ab73c81fff83e4423f0d3c918781587f14bf (patch)
treee5c306cbbc2e34ba769c49211385a31efd30665e
parent4af292fe5158c2d19e8ab1351c71c3940c7f1032 (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.cpp43
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp10
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()