Module: wine Branch: master Commit: e1db9fef05154f59f21d199a6a9691ae9c81144c URL: https://source.winehq.org/git/wine.git/?a=commit;h=e1db9fef05154f59f21d199a6...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Apr 6 11:05:19 2022 +0200
win32u: Move NtUserPostThreadMessage implementation from user32.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/message.c | 29 ++--------------------------- dlls/user32/user32.spec | 2 +- dlls/win32u/gdiobj.c | 1 + dlls/win32u/message.c | 24 ++++++++++++++++++++++++ dlls/win32u/win32u.spec | 2 +- dlls/win32u/win32u_private.h | 1 + dlls/win32u/wrappers.c | 6 ++++++ 7 files changed, 36 insertions(+), 29 deletions(-)
diff --git a/dlls/user32/message.c b/dlls/user32/message.c index 2255e0ee4ba..dff7ca24786 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -1807,7 +1807,7 @@ BOOL WINAPI PostMessageW( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) return TRUE; }
- if (!hwnd) return PostThreadMessageW( GetCurrentThreadId(), msg, wparam, lparam ); + if (!hwnd) return NtUserPostThreadMessage( GetCurrentThreadId(), msg, wparam, lparam );
if (!(info.dest_tid = GetWindowThreadProcessId( hwnd, NULL ))) return FALSE;
@@ -1823,32 +1823,7 @@ BOOL WINAPI PostMessageW( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) BOOL WINAPI PostThreadMessageA( DWORD thread, UINT msg, WPARAM wparam, LPARAM lparam ) { if (!map_wparam_AtoW( msg, &wparam, WMCHAR_MAP_POSTMESSAGE )) return TRUE; - return PostThreadMessageW( thread, msg, wparam, lparam ); -} - - -/********************************************************************** - * PostThreadMessageW (USER32.@) - */ -BOOL WINAPI PostThreadMessageW( DWORD thread, UINT msg, WPARAM wparam, LPARAM lparam ) -{ - struct send_message_info info; - - if (is_pointer_message( msg, wparam )) - { - SetLastError( ERROR_MESSAGE_SYNC_ONLY ); - return FALSE; - } - if (USER_IsExitingThread( thread )) return TRUE; - - info.type = MSG_POSTED; - info.dest_tid = thread; - info.hwnd = 0; - info.msg = msg; - info.wparam = wparam; - info.lparam = lparam; - info.flags = 0; - return put_message_in_queue( &info, NULL ); + return NtUserPostThreadMessage( thread, msg, wparam, lparam ); }
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec index 89c9d76f568..2c4dba5cd86 100644 --- a/dlls/user32/user32.spec +++ b/dlls/user32/user32.spec @@ -571,7 +571,7 @@ @ stdcall PostMessageW(long long long long) @ stdcall PostQuitMessage(long) @ stdcall PostThreadMessageA(long long long long) -@ stdcall PostThreadMessageW(long long long long) +@ stdcall PostThreadMessageW(long long long long) NtUserPostThreadMessage @ stdcall PrintWindow(long long long) @ stdcall PrivateExtractIconExA(str long ptr ptr long) @ stdcall PrivateExtractIconExW(wstr long ptr ptr long) diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c index 4d78c99bbc7..645e29305e8 100644 --- a/dlls/win32u/gdiobj.c +++ b/dlls/win32u/gdiobj.c @@ -1193,6 +1193,7 @@ static struct unix_funcs unix_funcs = NtUserMoveWindow, NtUserMsgWaitForMultipleObjectsEx, NtUserPeekMessage, + NtUserPostThreadMessage, NtUserRedrawWindow, NtUserRegisterClassExWOW, NtUserRegisterHotKey, diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 73312424283..f3e695ea16a 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -2407,6 +2407,30 @@ BOOL WINAPI NtUserPostMessage( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam return user_callbacks->pPostMessageW( hwnd, msg, wparam, lparam ); }
+/********************************************************************** + * NtUserPostThreadMessage (win32u.@) + */ +BOOL WINAPI NtUserPostThreadMessage( DWORD thread, UINT msg, WPARAM wparam, LPARAM lparam ) +{ + struct send_message_info info; + + if (is_pointer_message( msg, wparam )) + { + SetLastError( ERROR_MESSAGE_SYNC_ONLY ); + return FALSE; + } + if (is_exiting_thread( thread )) return TRUE; + + info.type = MSG_POSTED; + info.dest_tid = thread; + info.hwnd = 0; + info.msg = msg; + info.wparam = wparam; + info.lparam = lparam; + info.flags = 0; + return put_message_in_queue( &info, NULL ); +} + LRESULT WINAPI NtUserMessageCall( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, void *result_info, DWORD type, BOOL ansi ) { diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 31561cb3a1c..7670e1a5310 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1104,7 +1104,7 @@ @ stub NtUserPhysicalToLogicalPoint @ stub NtUserPostKeyboardInputMessage @ stub NtUserPostMessage -@ stub NtUserPostThreadMessage +@ stdcall NtUserPostThreadMessage(long long long long) @ stub NtUserPrintWindow @ stub NtUserProcessConnect @ stub NtUserProcessInkFeedbackCommand diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index c844603640e..ffd050adbcf 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -242,6 +242,7 @@ struct unix_funcs DWORD (WINAPI *pNtUserMsgWaitForMultipleObjectsEx)( DWORD count, const HANDLE *handles, DWORD timeout, DWORD mask, DWORD flags ); BOOL (WINAPI *pNtUserPeekMessage)( MSG *msg_out, HWND hwnd, UINT first, UINT last, UINT flags ); + BOOL (WINAPI *pNtUserPostThreadMessage)( DWORD thread, UINT msg, WPARAM wparam, LPARAM lparam ); BOOL (WINAPI *pNtUserRedrawWindow)( HWND hwnd, const RECT *rect, HRGN hrgn, UINT flags ); ATOM (WINAPI *pNtUserRegisterClassExWOW)( const WNDCLASSEXW *wc, UNICODE_STRING *name, UNICODE_STRING *version, diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c index 4f7c6191df8..159cade9aea 100644 --- a/dlls/win32u/wrappers.c +++ b/dlls/win32u/wrappers.c @@ -977,6 +977,12 @@ BOOL WINAPI NtUserPeekMessage( MSG *msg_out, HWND hwnd, UINT first, UINT last, U return unix_funcs->pNtUserPeekMessage( msg_out, hwnd, first, last, flags ); }
+BOOL WINAPI NtUserPostThreadMessage( DWORD thread, UINT msg, WPARAM wparam, LPARAM lparam ) +{ + if (!unix_funcs) return FALSE; + return unix_funcs->pNtUserPostThreadMessage( thread, msg, wparam, lparam ); +} + BOOL WINAPI NtUserRedrawWindow( HWND hwnd, const RECT *rect, HRGN hrgn, UINT flags ) { if (!unix_funcs) return FALSE;