summaryrefslogtreecommitdiff
path: root/src/modules/chat
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/chat')
-rw-r--r--src/modules/chat/chat_svc.cpp17
-rw-r--r--src/modules/chat/manager.cpp4
2 files changed, 19 insertions, 2 deletions
diff --git a/src/modules/chat/chat_svc.cpp b/src/modules/chat/chat_svc.cpp
index b27525400e..bfb928ce11 100644
--- a/src/modules/chat/chat_svc.cpp
+++ b/src/modules/chat/chat_svc.cpp
@@ -557,8 +557,19 @@ static int ModulesLoaded(WPARAM wParam, LPARAM lParam)
/////////////////////////////////////////////////////////////////////////////////////////
// Service creation
+static bool bInited = false;
+
int LoadChatModule(void)
{
+ CreateServiceFunction("GChat/GetInterface", SvcGetChatManager);
+ return 0;
+}
+
+void InitChatModule(void)
+{
+ if (bInited)
+ return;
+
InitializeCriticalSection(&cs);
HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded);
@@ -576,18 +587,20 @@ int LoadChatModule(void)
CreateServiceFunction("GChat/PrebuildMenuEvent", PrebuildContactMenuSvc);
CreateServiceFunction("GChat/JoinChat", JoinChat);
CreateServiceFunction("GChat/LeaveChat", LeaveChat);
- CreateServiceFunction("GChat/GetInterface", SvcGetChatManager);
ci.hSendEvent = CreateHookableEvent(ME_GC_EVENT);
ci.hBuildMenuEvent = CreateHookableEvent(ME_GC_BUILDMENU);
HookEvent(ME_FONT_RELOAD, FontsChanged);
HookEvent(ME_SKIN2_ICONSCHANGED, IconsChanged);
- return 0;
+ bInited = true;
}
void UnloadChatModule(void)
{
+ if (!bInited)
+ return;
+
OptionsUnInit();
DeleteCriticalSection(&cs);
diff --git a/src/modules/chat/manager.cpp b/src/modules/chat/manager.cpp
index cdd4cf52d2..6c7b1c6afa 100644
--- a/src/modules/chat/manager.cpp
+++ b/src/modules/chat/manager.cpp
@@ -24,6 +24,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "chat.h"
+void InitChatModule(void);
+
#define WINDOWS_COMMANDS_MAX 30
MODULEINFO *m_ModList = 0;
@@ -1482,6 +1484,8 @@ CHAT_MANAGER ci =
INT_PTR SvcGetChatManager(WPARAM, LPARAM lParam)
{
+ InitChatModule();
+
// wipe out old junk
memset(PBYTE(&ci) + offsetof(CHAT_MANAGER, OnCreateModule), 0, sizeof(CHAT_MANAGER)-offsetof(CHAT_MANAGER, OnCreateModule));