diff --git a/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp b/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp index a9209e7ff6..39d0775794 100644 --- a/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp +++ b/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp @@ -323,7 +323,32 @@ struct PluginTreeUtils addPlugin (tree, pd, path); } - optimise (tree); + optimiseFolders (tree, false); + } + + static void optimiseFolders (KnownPluginList::PluginTree& tree, bool concatenateName) + { + for (int i = tree.subFolders.size(); --i >= 0;) + { + KnownPluginList::PluginTree& sub = *tree.subFolders.getUnchecked(i); + optimiseFolders (sub, concatenateName || (tree.subFolders.size() > 1)); + + if (sub.plugins.size() == 0) + { + for (int j = 0; j < sub.subFolders.size(); ++j) + { + KnownPluginList::PluginTree* const s = sub.subFolders.getUnchecked(j); + + if (concatenateName) + s->folder = sub.folder + "/" + s->folder; + + tree.subFolders.add (s); + } + + sub.subFolders.clear (false); + tree.subFolders.remove (i); + } + } } static void buildTreeByCategory (KnownPluginList::PluginTree& tree, @@ -398,25 +423,6 @@ struct PluginTreeUtils } } - // removes any deeply nested folders that don't contain any actual plugins - static void optimise (KnownPluginList::PluginTree& tree) - { - for (int i = tree.subFolders.size(); --i >= 0;) - { - KnownPluginList::PluginTree& sub = *tree.subFolders.getUnchecked(i); - optimise (sub); - - if (sub.plugins.size() == 0) - { - for (int j = 0; j < sub.subFolders.size(); ++j) - tree.subFolders.add (sub.subFolders.getUnchecked(j)); - - sub.subFolders.clear (false); - tree.subFolders.remove (i); - } - } - } - static void addToMenu (const KnownPluginList::PluginTree& tree, PopupMenu& m, const OwnedArray & allPlugins) { for (int i = 0; i < tree.subFolders.size(); ++i)