summaryrefslogtreecommitdiff
path: root/message_notify/messagenotify.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'message_notify/messagenotify.cpp')
-rw-r--r--message_notify/messagenotify.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/message_notify/messagenotify.cpp b/message_notify/messagenotify.cpp
index ccf1b47..cde42b1 100644
--- a/message_notify/messagenotify.cpp
+++ b/message_notify/messagenotify.cpp
@@ -16,6 +16,7 @@ HANDLE mainThread;
bool metacontacts_installed;
bool unicode_system;
+bool thread_api = false;
int code_page = CP_ACP;
@@ -26,7 +27,7 @@ DWORD focusTimerId = 0;
PLUGININFO pluginInfo={
sizeof(PLUGININFO),
"Message Notify",
- PLUGIN_MAKE_VERSION(0,1,2,0),
+ PLUGIN_MAKE_VERSION(0,1,3,0),
"Show a popup when a message is received",
"Scott Ellis",
"mail@scottellis.com.au",
@@ -147,10 +148,12 @@ typedef struct {
HANDLE hContact;
BYTE *blob;
int blobsize;
+ HANDLE hEvent;
} CheckWindowData;
unsigned int __stdcall sttCheckWindowProc( VOID *dwParam ) {
CheckWindowData *cd = (CheckWindowData *)dwParam;
+ if(!thread_api) SetEvent(cd->hEvent);
Sleep(500); // wait for message window to open from event, if it's going to
@@ -255,7 +258,15 @@ int OnDatabaseEventPreAdd(WPARAM wParam, LPARAM lParam) {
cd->blobsize = 0;
// spawn a thread to deal with the copied data
- CloseHandle((HANDLE)_beginthreadex(0, 0, sttCheckWindowProc, (VOID *)cd, 0, 0));
+ if(thread_api)
+ CallService(MS_SYSTEM_FORK_THREAD, (WPARAM)sttCheckWindowProc, (LPARAM)(VOID *)cd);
+ else {
+ cd->hEvent = CreateEvent(0, 0, 0, 0);
+ CloseHandle((HANDLE)_beginthreadex(0, 0, sttCheckWindowProc, (VOID *)cd, 0, 0));
+ WaitForSingleObject(cd->hEvent, INFINITE);
+ CloseHandle(cd->hEvent);
+ }
+
return 0;
}
@@ -349,6 +360,8 @@ extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0);
}
+ thread_api = (ServiceExists(MS_SYSTEM_FORK_THREAD) != 0);
+
InitWindowList();
LoadOptions();