summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mir_app/src/CMPluginBase.cpp35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/mir_app/src/CMPluginBase.cpp b/src/mir_app/src/CMPluginBase.cpp
index ffe6877c27..746981b7f8 100644
--- a/src/mir_app/src/CMPluginBase.cpp
+++ b/src/mir_app/src/CMPluginBase.cpp
@@ -99,14 +99,35 @@ MIR_APP_DLL(CMPluginBase&) GetPluginByInstance(HINSTANCE hInst)
/////////////////////////////////////////////////////////////////////////////////////////
// stubs for pascal plugins
+static void wipePluginData(CMPluginBase *pPlugin)
+{
+ if (g_bMirandaTerminated)
+ return;
+
+ KillModuleMenus(pPlugin);
+ KillModuleFonts(pPlugin);
+ KillModuleColours(pPlugin);
+ KillModuleEffects(pPlugin);
+ KillModuleIcons(pPlugin);
+ KillModuleHotkeys(pPlugin);
+ KillModuleSounds(pPlugin);
+ KillModuleExtraIcons(pPlugin);
+ KillModuleSrmmIcons(pPlugin);
+ KillModuleToolbarIcons(pPlugin);
+ KillModuleOptions(pPlugin);
+}
+
+// emulates the call of CMPluginBase::CMPluginBase for Pascal plugins
EXTERN_C MIR_APP_DLL(void) RegisterPlugin(CMPluginBase *pPlugin)
{
if (pPlugin->getInst() != nullptr)
g_arPlugins.insert(pPlugin);
}
+// emulates the call of CMPluginBase::~CMPluginBase for Pascal plugins
EXTERN_C MIR_APP_DLL(void) UnregisterPlugin(CMPluginBase *pPlugin)
{
+ wipePluginData(pPlugin);
g_arPlugins.remove(pPlugin);
}
@@ -128,19 +149,7 @@ CMPluginBase::CMPluginBase(const char *moduleName, const PLUGININFOEX &pInfo) :
CMPluginBase::~CMPluginBase()
{
- if (!g_bMirandaTerminated) {
- KillModuleMenus(this);
- KillModuleFonts(this);
- KillModuleColours(this);
- KillModuleEffects(this);
- KillModuleIcons(this);
- KillModuleHotkeys(this);
- KillModuleSounds(this);
- KillModuleExtraIcons(this);
- KillModuleSrmmIcons(this);
- KillModuleToolbarIcons(this);
- KillModuleOptions(this);
- }
+ wipePluginData(this);
if (m_hLogger) {
mir_closeLog(m_hLogger);