OSDN Git Service

Fix the problem that the "Plugins" -> "Reload Plugins" menu does not work.
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Fri, 17 Dec 2021 23:56:04 +0000 (08:56 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Fri, 17 Dec 2021 23:56:04 +0000 (08:56 +0900)
Src/MainFrm.cpp
Src/Plugins.cpp
Src/Plugins.h

index 4ccae17..2802d70 100644 (file)
@@ -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 */
index 4fcb4a7..e9c030d 100644 (file)
@@ -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
 
index 446853c..4fda443 100644 (file)
@@ -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<CScriptsOfThread *> m_aAvailableThreads;