diff --git a/autotests/kfiledialog_unittest.cpp b/autotests/kfiledialog_unittest.cpp --- a/autotests/kfiledialog_unittest.cpp +++ b/autotests/kfiledialog_unittest.cpp @@ -111,6 +111,16 @@ QCOMPARE(dialog.selectedMimeTypeFilter(), targetMimeTypeFilter); } + + void testFallbackOnFirstFilterInSaveMode() + { + QFileDialog dialog; + dialog.setAcceptMode(QFileDialog::AcceptSave); + dialog.setMimeTypeFilters({QStringLiteral("application/json"), QStringLiteral("application/zip")}); + dialog.show(); + QCOMPARE(dialog.selectedMimeTypeFilter(), QStringLiteral("application/json")); + } + #endif diff --git a/src/platformtheme/kdeplatformfiledialoghelper.cpp b/src/platformtheme/kdeplatformfiledialoghelper.cpp --- a/src/platformtheme/kdeplatformfiledialoghelper.cpp +++ b/src/platformtheme/kdeplatformfiledialoghelper.cpp @@ -298,7 +298,16 @@ const QStringList mimeFilters = options()->mimeTypeFilters(); const QStringList nameFilters = options()->nameFilters(); if (!mimeFilters.isEmpty()) { - dialog->m_fileWidget->setMimeFilter(mimeFilters); + QString defaultMimeFilter; + if (options()->acceptMode() == QFileDialogOptions::AcceptSave) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) + defaultMimeFilter = options()->initiallySelectedMimeTypeFilter(); +#endif + if (defaultMimeFilter.isEmpty()) { + defaultMimeFilter = mimeFilters.at(0); + } + } + dialog->m_fileWidget->setMimeFilter(mimeFilters, defaultMimeFilter); if ( mimeFilters.contains( QStringLiteral("inode/directory") ) ) dialog->m_fileWidget->setMode( dialog->m_fileWidget->mode() | KFile::Directory );