From bfbffcf8089b0d53818158f88868f5a6a538eba9 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Sat, 18 Dec 2021 08:56:04 +0900 Subject: [PATCH] Fix the problem that the "Plugins" -> "Reload Plugins" menu does not work. --- Src/MainFrm.cpp | 2 +- Src/Plugins.cpp | 17 +++++++++++------ Src/Plugins.h | 3 ++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Src/MainFrm.cpp b/Src/MainFrm.cpp index 4ccae1732..2802d7085 100644 --- a/Src/MainFrm.cpp +++ b/Src/MainFrm.cpp @@ -1749,7 +1749,7 @@ void CMainFrame::OnUpdatePluginRelatedMenu(CCmdUI* pCmdUI) void CMainFrame::OnReloadPlugins() { - UpdatePrediffersMenu(); + CAllThreadsScripts::ReloadAllScripts(); } /** @brief Return active merge edit view, if can figure it out/is available */ diff --git a/Src/Plugins.cpp b/Src/Plugins.cpp index 4fcb4a7df..e9c030df3 100644 --- a/Src/Plugins.cpp +++ b/Src/Plugins.cpp @@ -921,15 +921,14 @@ void CScriptsOfThread::FreeAllScripts() // force to reload the scriptlet list UnloadTheScriptletList(); + + m_aPluginsByEvent.clear(); } -void CScriptsOfThread::FreeScriptsForEvent(const wchar_t *transformationEvent) +void CScriptsOfThread::ReloadAllScripts() { - if (auto it = m_aPluginsByEvent.find(transformationEvent); it != m_aPluginsByEvent.end()) - { - if (it->second != nullptr) - ::FreeAllScripts(it->second); - } + FreeAllScripts(); + m_aPluginsByEvent = ::GetAvailableScripts(); } PluginInfo* CScriptsOfThread::GetUnpackerPluginByFilter(const String& filteredText) @@ -1056,6 +1055,12 @@ void CAllThreadsScripts::ReloadCustomSettings() LoadCustomSettings(thread->m_aPluginsByEvent); } +void CAllThreadsScripts::ReloadAllScripts() +{ + for (auto& thread : m_aAvailableThreads) + thread->ReloadAllScripts(); +} + //////////////////////////////////////////////////////////////////////////////////// // class CAssureScriptsForThread : control creation/destruction of CScriptsOfThread diff --git a/Src/Plugins.h b/Src/Plugins.h index 446853c08..4fda443b1 100644 --- a/Src/Plugins.h +++ b/Src/Plugins.h @@ -117,7 +117,7 @@ public: void SaveSettings(); void FreeAllScripts(); - void FreeScriptsForEvent(const wchar_t *transformationEvent); + void ReloadAllScripts(); protected: CScriptsOfThread(); @@ -156,6 +156,7 @@ public: static InternalPluginLoaderFuncPtr GetInternalPluginsLoader() { return m_funcInternalPluginsLoader; } static void RegisterInternalPluginsLoader(InternalPluginLoaderFuncPtr func) { m_funcInternalPluginsLoader = func; } static void ReloadCustomSettings(); + static void ReloadAllScripts(); private: // fixed size array, advantage : no mutex to allocate/free static std::vector m_aAvailableThreads; -- 2.11.0