diff --git a/src/common/plugins/plugin_manager.cpp b/src/common/plugins/plugin_manager.cpp index 769e3e359..63797d441 100644 --- a/src/common/plugins/plugin_manager.cpp +++ b/src/common/plugins/plugin_manager.cpp @@ -182,10 +182,13 @@ void PluginManager::loadPlugins(QDir pluginsDirectory) */ void PluginManager::loadPlugin(const QString& fileName) { + QFileInfo fin(fileName); + if (pluginFiles.find(fin.absoluteFilePath()) != pluginFiles.end()) + throw MLException(fin.fileName() + " has been already loaded."); + checkPlugin(fileName); //load the plugin depending on the type (can be more than one type!) - QFileInfo fin(fileName); QPluginLoader loader(fin.absoluteFilePath()); QObject *plugin = loader.instance(); PluginFileInterface* ifp = dynamic_cast(plugin); @@ -214,6 +217,7 @@ void PluginManager::loadPlugin(const QString& fileName) //of all plugins ifp->plugFileInfo = fin; allPlugins.push_back(ifp); + pluginFiles.insert(fin.absoluteFilePath()); } void PluginManager::unloadPlugin(PluginFileInterface* ifp) diff --git a/src/common/plugins/plugin_manager.h b/src/common/plugins/plugin_manager.h index 1388f9648..517570074 100644 --- a/src/common/plugins/plugin_manager.h +++ b/src/common/plugins/plugin_manager.h @@ -98,8 +98,9 @@ public: EditPluginFactoryRangeIterator editPluginFactoryIterator(bool iterateAlsoDisabledPlugins = false) const; private: - //all plugins (except Edit plugins) + //all plugins std::vector allPlugins; + std::set pluginFiles; //used to check if a plugin file has been already loaded //IOMeshPlugins std::vector ioMeshPlugins;