user32.SendMessageCallback
Robert Shearman
R.J.Shearman at warwick.ac.uk
Sat Jan 11 20:39:34 CST 2003
This is a resend of a patch that seemingly fell through the cracks.
ChangeLog:
- Fix SendMessageCallback so that it works in all cases now
Rob
-------------- next part --------------
Index: wine/dlls/user/message.c
===================================================================
RCS file: /home/wine/wine/dlls/user/message.c,v
retrieving revision 1.33
diff -u -r1.33 message.c
--- wine/dlls/user/message.c 8 Jan 2003 19:56:31 -0000 1.33
+++ wine/dlls/user/message.c 11 Jan 2003 21:07:26 -0000
@@ -1900,6 +1900,32 @@
return send_inter_thread_message( dest_tid, &info, &result );
}
+static DWORD WINAPI threadproc_sendmessagecallback(LPVOID lpParameter)
+{
+ struct send_message_info * lpInfo = (struct send_message_info *) lpParameter;
+ LRESULT result;
+ DWORD dest_tid;
+ if (!(dest_tid = GetWindowThreadProcessId( lpInfo->hwnd, NULL )))
+ {
+ HeapFree( GetProcessHeap(), 0, lpInfo );
+ return 1;
+ }
+
+ if (USER_IsExitingThread( dest_tid ))
+ {
+ HeapFree( GetProcessHeap(), 0, lpInfo );
+ return 0;
+ }
+
+ if (send_inter_thread_message( dest_tid, lpInfo, &result ))
+ {
+ lpInfo->callback( lpInfo->hwnd, lpInfo->msg, lpInfo->data, result );
+ HeapFree( GetProcessHeap(), 0, lpInfo );
+ return 0;
+ }
+ HeapFree( GetProcessHeap(), 0, lpInfo );
+ return 1;
+}
/***********************************************************************
* SendMessageCallbackA (USER32.@)
@@ -1919,8 +1945,10 @@
SENDASYNCPROC callback, ULONG_PTR data )
{
struct send_message_info info;
+ struct send_message_info * lpInfo;
LRESULT result;
DWORD dest_tid;
+ TRACE("\n");
if (is_pointer_message(msg))
{
@@ -1952,11 +1980,11 @@
callback( hwnd, msg, data, result );
return TRUE;
}
- FIXME( "callback will not be called\n" );
- return send_inter_thread_message( dest_tid, &info, &result );
+ lpInfo = HeapAlloc( GetProcessHeap(), 0, sizeof(struct send_message_info) );
+ CopyMemory( lpInfo, &info, sizeof(struct send_message_info) );
+ return (CreateThread(NULL, 0, threadproc_sendmessagecallback, (LPVOID)lpInfo, 0, NULL) != NULL);
}
-
/***********************************************************************
* ReplyMessage (USER32.@)
*/
More information about the wine-patches
mailing list