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>
This commit is contained in:
Jacek Caban 2022-02-25 16:01:15 +01:00 committed by Alexandre Julliard
parent 36378958f7
commit fcc1581938
7 changed files with 49 additions and 32 deletions

View File

@ -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

View File

@ -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 );
}
}
}

View File

@ -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 */

View File

@ -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.@)

View File

@ -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;

View File

@ -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:

View File

@ -92,6 +92,7 @@ enum
/* temporary exports */
NtUserFlushWindowSurfaces,
NtUserGetDeskPattern,
NtUserHandleInternalMessage,
NtUserIncrementKeyStateCounter,
NtUserLock,
NtUserNextThreadWindow,