Module: wine Branch: master Commit: fcc1581938aa84aff86357ba3154775353ff8c9e URL: https://source.winehq.org/git/wine.git/?a=commit;h=fcc1581938aa84aff86357ba3...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Feb 25 16:01:15 2022 +0100
win32u: Partially move handle_internal_message 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/driver.c | 21 ++------------------- dlls/user32/message.c | 22 +++++++++------------- dlls/win32u/driver.c | 1 + dlls/win32u/message.c | 28 ++++++++++++++++++++++++++++ dlls/win32u/ntuser_private.h | 3 +++ dlls/win32u/sysparams.c | 5 +++++ include/ntuser.h | 1 + 7 files changed, 49 insertions(+), 32 deletions(-)
diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c index d7609ba7faf..37e896210d1 100644 --- a/dlls/user32/driver.c +++ b/dlls/user32/driver.c @@ -124,11 +124,6 @@ static BOOL CDECL nulldrv_SetCursorPos( INT x, INT y ) return TRUE; }
-static BOOL CDECL nulldrv_ClipCursor( LPCRECT clip ) -{ - return TRUE; -} - static void CDECL nulldrv_UpdateClipboard(void) { } @@ -230,11 +225,6 @@ static BOOL CDECL nulldrv_UpdateLayeredWindow( HWND hwnd, const UPDATELAYEREDWIN return TRUE; }
-static LRESULT CDECL nulldrv_WindowMessage( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) -{ - return 0; -} - static BOOL CDECL nulldrv_WindowPosChanging( HWND hwnd, HWND insert_after, UINT swp_flags, const RECT *window_rect, const RECT *client_rect, RECT *visible_rect, struct window_surface **surface ) @@ -262,11 +252,6 @@ static BOOL CDECL loaderdrv_SetCursorPos( INT x, INT y ) return load_driver()->pSetCursorPos( x, y ); }
-static BOOL CDECL loaderdrv_ClipCursor( LPCRECT clip ) -{ - return load_driver()->pClipCursor( clip ); -} - static void CDECL loaderdrv_UpdateClipboard(void) { load_driver()->pUpdateClipboard(); @@ -327,7 +312,7 @@ static struct user_driver_funcs lazy_load_driver = NULL, NULL, loaderdrv_SetCursorPos, - loaderdrv_ClipCursor, + NULL, /* clipboard functions */ loaderdrv_UpdateClipboard, /* display modes */ @@ -354,7 +339,7 @@ static struct user_driver_funcs lazy_load_driver = nulldrv_ShowWindow, nulldrv_SysCommand, loaderdrv_UpdateLayeredWindow, - nulldrv_WindowMessage, + NULL, nulldrv_WindowPosChanging, nulldrv_WindowPosChanged, /* system parameters */ @@ -382,7 +367,6 @@ void CDECL __wine_set_user_driver( const struct user_driver_funcs *funcs, UINT v do { if (!driver->p##name) driver->p##name = nulldrv_##name; } while(0)
SET_USER_FUNC(SetCursorPos); - SET_USER_FUNC(ClipCursor); SET_USER_FUNC(UpdateClipboard); SET_USER_FUNC(CreateDesktopWindow); SET_USER_FUNC(CreateWindow); @@ -402,7 +386,6 @@ void CDECL __wine_set_user_driver( const struct user_driver_funcs *funcs, UINT v SET_USER_FUNC(ShowWindow); SET_USER_FUNC(SysCommand); SET_USER_FUNC(UpdateLayeredWindow); - SET_USER_FUNC(WindowMessage); SET_USER_FUNC(WindowPosChanging); SET_USER_FUNC(WindowPosChanged); #undef SET_USER_FUNC diff --git a/dlls/user32/message.c b/dlls/user32/message.c index 828915605f6..4ed55425d5d 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -1855,7 +1855,7 @@ static void reply_message( struct received_message_info *info, LRESULT result, B * * Handle an internal Wine message instead of calling the window proc. */ -static LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) +LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) { switch(msg) { @@ -1885,22 +1885,18 @@ static LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPAR
return call_current_hook( h_extra->handle, HC_ACTION, wparam, h_extra->lparam ); } - case WM_WINE_CLIPCURSOR: - if (wparam) - { - RECT rect; - GetClipCursor( &rect ); - return USER_Driver->pClipCursor( &rect ); - } - return USER_Driver->pClipCursor( NULL ); case WM_WINE_UPDATEWINDOWSTATE: update_window_state( hwnd ); return 0; default: - if (msg >= WM_WINE_FIRST_DRIVER_MSG && msg <= WM_WINE_LAST_DRIVER_MSG) - return USER_Driver->pWindowMessage( hwnd, msg, wparam, lparam ); - FIXME( "unknown internal message %x\n", msg ); - return 0; + { + MSG m; + m.hwnd = hwnd; + m.message = msg; + m.wParam = wparam; + m.lParam = lparam; + return NtUserCallOneParam( (UINT_PTR)&m, NtUserHandleInternalMessage ); + } } }
diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c index 3b75c7b1d31..c926bec1ab1 100644 --- a/dlls/win32u/driver.c +++ b/dlls/win32u/driver.c @@ -1065,6 +1065,7 @@ static const struct user_driver_funcs lazy_load_driver = /* windowing functions */ .pMsgWaitForMultipleObjectsEx = nulldrv_MsgWaitForMultipleObjectsEx, .pScrollDC = nulldrv_ScrollDC, + .pWindowMessage = nulldrv_WindowMessage, /* system parameters */ .pSystemParametersInfo = nulldrv_SystemParametersInfo, /* vulkan support */ diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index bc11400eaf3..e9eb7d29acf 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -26,7 +26,35 @@
#include "win32u_private.h" #include "wine/server.h" +#include "wine/debug.h"
+WINE_DEFAULT_DEBUG_CHANNEL(msg); + + +/*********************************************************************** + * handle_internal_message + * + * Handle an internal Wine message instead of calling the window proc. + */ +LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) +{ + switch(msg) + { + case WM_WINE_CLIPCURSOR: + if (wparam) + { + RECT rect; + get_clip_cursor( &rect ); + return user_driver->pClipCursor( &rect ); + } + return user_driver->pClipCursor( NULL ); + default: + if (msg >= WM_WINE_FIRST_DRIVER_MSG && msg <= WM_WINE_LAST_DRIVER_MSG) + return user_driver->pWindowMessage( hwnd, msg, wparam, lparam ); + FIXME( "unknown internal message %x\n", msg ); + return 0; + } +}
/********************************************************************** * NtUserGetGUIThreadInfo (win32u.@) diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 00e571f6460..ca5068c02f6 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -131,6 +131,9 @@ struct user_key_state_info /* cursoricon.c */ HICON alloc_cursoricon_handle( BOOL is_icon ) DECLSPEC_HIDDEN;
+/* message.c */ +LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN; + /* window.c */ HANDLE alloc_user_handle( struct user_object *ptr, unsigned int type ) DECLSPEC_HIDDEN; void *free_user_handle( HANDLE handle, unsigned int type ) DECLSPEC_HIDDEN; diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 4eaaceb2892..df35262d520 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -4584,6 +4584,11 @@ ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code ) return 0; case NtUserGetDeskPattern: return get_entry( &entry_DESKPATTERN, 256, (WCHAR *)arg ); + case NtUserHandleInternalMessage: + { + MSG *msg = (MSG *)arg; + return handle_internal_message( msg->hwnd, msg->message, msg->wParam, msg->lParam ); + } case NtUserIncrementKeyStateCounter: return InterlockedAdd( &global_key_state_counter, arg ); case NtUserLock: diff --git a/include/ntuser.h b/include/ntuser.h index c999be08c75..6919de56fa4 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -92,6 +92,7 @@ enum /* temporary exports */ NtUserFlushWindowSurfaces, NtUserGetDeskPattern, + NtUserHandleInternalMessage, NtUserIncrementKeyStateCounter, NtUserLock, NtUserNextThreadWindow,