diff --git a/kdevplatform/shell/openprojectdialog.h b/kdevplatform/shell/openprojectdialog.h --- a/kdevplatform/shell/openprojectdialog.h +++ b/kdevplatform/shell/openprojectdialog.h @@ -80,6 +80,7 @@ QStringList m_fileList; QMap m_projectFilters; QMap m_projectPlugins; + QStringList m_genericProjectPlugins; KDevelop::OpenProjectPage* openPageWidget = nullptr; KDevelop::ProjectSourcePage* sourcePageWidget = nullptr; diff --git a/kdevplatform/shell/openprojectdialog.cpp b/kdevplatform/shell/openprojectdialog.cpp --- a/kdevplatform/shell/openprojectdialog.cpp +++ b/kdevplatform/shell/openprojectdialog.cpp @@ -97,15 +97,18 @@ QVector plugins = ICore::self()->pluginController()->queryExtensionPlugins(QStringLiteral("org.kdevelop.IProjectFileManager")); foreach(const KPluginMetaData& info, plugins) { + m_projectPlugins.insert(info.name(), info); + QStringList filter = KPluginMetaData::readStringList(info.rawData(), QStringLiteral("X-KDevelop-ProjectFilesFilter")); + // some project file manager plugins like KDevGenericManager have no file filter set if (filter.isEmpty()) { + m_genericProjectPlugins << info.name(); continue; } QString desc = info.value(QStringLiteral("X-KDevelop-ProjectFilesFilterDescription")); m_projectFilters.insert(info.name(), filter); - m_projectPlugins.insert(info.name(), info); allEntry += filter; filters << filterFormat.arg(filter.join(QStringLiteral(" ")), desc); } @@ -260,13 +263,11 @@ choices.append({file + QString(" (%1)").arg(plugin), meta.pluginId(), meta.iconName(), file}); } } - Q_FOREACH ( const auto& plugin, m_projectFilters.keys() ) { - qCDebug(SHELL) << plugin << m_projectFilters.value(plugin); - if ( m_projectFilters.value(plugin).isEmpty() ) { - // that works in any case - auto meta = m_projectPlugins.value(plugin); - choices.append({plugin, meta.pluginId(), meta.iconName()}); - } + // add managers that work in any case (e.g. KDevGenericManager) + Q_FOREACH ( const auto& plugin, m_genericProjectPlugins ) { + qCDebug(SHELL) << plugin; + auto meta = m_projectPlugins.value(plugin); + choices.append({plugin, meta.pluginId(), meta.iconName()}); } page->populateProjectFileCombo(choices); }