From 67fbdceb92a6e707a6c088013d5c893274e7f6df Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Tue, 26 Dec 2023 16:46:45 -0600 Subject: [PATCH] Enable removing the plugin dll from the menu Implements change from MR !2148 without refactoring --- PluginManager.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/PluginManager.cpp b/PluginManager.cpp index ed2ea5e4..2a7ae254 100644 --- a/PluginManager.cpp +++ b/PluginManager.cpp @@ -107,8 +107,16 @@ void PluginManager::AddPlugin(const filesystem::path& path) \*-----------------------------------------------------------------*/ std::string path_string = path.generic_u8string(); QPluginLoader* loader = new QPluginLoader(QString::fromStdString(path_string)); - QObject* instance = loader->instance(); + /*-----------------------------------------------------------------*\ + | Change the loader Hint flag to able to delete the plugin | + | The default value is QLibrary::PreventUnloadHint | + \*-----------------------------------------------------------------*/ + loader->setLoadHints(QLibrary::ExportExternalSymbolsHint); + + /*-----------------------------------------------------------------*\ + | Check if the plugin was loaded | + \*-----------------------------------------------------------------*/ if(!loader->isLoaded()) { LOG_WARNING("[PluginManager] Plugin %s cannot be loaded: %s", path.c_str(), loader->errorString().toStdString().c_str()); @@ -117,6 +125,8 @@ void PluginManager::AddPlugin(const filesystem::path& path) /*-----------------------------------------------------------------*\ | Check that the plugin is valid, then check the API version | \*-----------------------------------------------------------------*/ + QObject* instance = loader->instance(); + if(instance) { plugin = qobject_cast(instance);