diff options
Diffstat (limited to 'base/plugins.cpp')
-rw-r--r-- | base/plugins.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/base/plugins.cpp b/base/plugins.cpp index f4d18efb1c..55c99b1eda 100644 --- a/base/plugins.cpp +++ b/base/plugins.cpp @@ -379,6 +379,30 @@ void PluginManager::loadAllPlugins() { } } +void PluginManager::loadAllPluginsOfType(PluginType type) { + for (ProviderList::iterator pp = _providers.begin(); + pp != _providers.end(); + ++pp) { + PluginList pl((*pp)->getPlugins()); + for (PluginList::iterator p = pl.begin(); + p != pl.end(); + ++p) { + if ((*p)->loadPlugin()) { + if ((*p)->getType() == type) { + addToPluginsInMemList((*p)); + } else { + // Plugin is wrong type + (*p)->unloadPlugin(); + delete (*p); + } + } else { + // Plugin did not load + delete (*p); + } + } + } +} + void PluginManager::unloadAllPlugins() { for (int i = 0; i < PLUGIN_TYPE_MAX; i++) unloadPluginsExcept((PluginType)i, NULL); |