diff --git a/src/filechooser.cpp b/src/filechooser.cpp --- a/src/filechooser.cpp +++ b/src/filechooser.cpp @@ -185,14 +185,16 @@ Utils::setParentWindow(fileDialog.data(), parent_window); fileDialog->setWindowTitle(title); fileDialog->setModal(modalDialog); - fileDialog->m_fileWidget->setMode(multipleFiles ? KFile::Mode::Files | KFile::Mode::ExistingOnly : KFile::Mode::File | KFile::Mode::ExistingOnly); + const bool dirOnly = mimeTypeFilter.count() == 1 && mimeTypeFilter.first() == QLatin1String("inode/directory"); + const auto mode = dirOnly ? KFile::Mode::Directory : ((multipleFiles ? KFile::Mode::Files : KFile::Mode::File) | KFile::Mode::ExistingOnly); + fileDialog->m_fileWidget->setMode(mode); fileDialog->m_fileWidget->okButton()->setText(!acceptLabel.isEmpty() ? acceptLabel : i18n("Open")); if (!nameFilters.isEmpty()) { fileDialog->m_fileWidget->setFilter(nameFilters.join(QLatin1Char('\n'))); } - if (!mimeTypeFilters.isEmpty()) { + if (!dirOnly && !mimeTypeFilters.isEmpty()) { fileDialog->m_fileWidget->setMimeFilter(mimeTypeFilters); }