From: Jacek Caban jacek@codeweavers.com
--- dlls/win32u/driver.c | 13 +++++++++++++ dlls/win32u/message.c | 3 +++ dlls/wow64win/user.c | 3 +++ include/ntuser.h | 10 ++++++++++ include/wine/gdi_driver.h | 4 +++- 5 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c index 75d45a708b1..a13882bd139 100644 --- a/dlls/win32u/driver.c +++ b/dlls/win32u/driver.c @@ -900,6 +900,11 @@ static BOOL nulldrv_SystemParametersInfo( UINT action, UINT int_param, void *ptr return FALSE; }
+static LRESULT nulldrv_WintabProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, void *buffer ) +{ + return 0; +} + static UINT nulldrv_VulkanInit( UINT version, void *vulkan_handle, const struct vulkan_driver_funcs **driver_funcs ) { return STATUS_NOT_IMPLEMENTED; @@ -1220,6 +1225,11 @@ static void loaderdrv_UpdateLayeredWindow( HWND hwnd, BYTE alpha, UINT flags ) load_driver()->pUpdateLayeredWindow( hwnd, alpha, flags ); }
+static LRESULT loaderdrv_WintabProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, void *buffer ) +{ + return load_driver()->pWintabProc( hwnd, msg, wparam, lparam, buffer ); +} + static UINT loaderdrv_VulkanInit( UINT version, void *vulkan_handle, const struct vulkan_driver_funcs **driver_funcs ) { return load_driver()->pVulkanInit( version, vulkan_handle, driver_funcs ); @@ -1293,6 +1303,8 @@ static const struct user_driver_funcs lazy_load_driver = nulldrv_WindowPosChanged, /* system parameters */ nulldrv_SystemParametersInfo, + /* wintab support */ + loaderdrv_WintabProc, /* vulkan support */ loaderdrv_VulkanInit, /* opengl support */ @@ -1389,6 +1401,7 @@ void __wine_set_user_driver( const struct user_driver_funcs *funcs, UINT version SET_USER_FUNC(MoveWindowBits); SET_USER_FUNC(WindowPosChanged); SET_USER_FUNC(SystemParametersInfo); + SET_USER_FUNC(WintabProc); SET_USER_FUNC(VulkanInit); SET_USER_FUNC(OpenGLInit); SET_USER_FUNC(ThreadDetach); diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 6a5c257d878..e2535fed6d6 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -4707,6 +4707,9 @@ LRESULT WINAPI NtUserMessageCall( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa case NtUserPostDdeCall: return post_dde_message_call( hwnd, msg, wparam, lparam, result_info );
+ case NtUserWintabDriverCall: + return user_driver->pWintabProc( hwnd, msg, wparam, lparam, result_info ); + default: FIXME( "%p %x %lx %lx %p %x %x\n", hwnd, msg, (long)wparam, lparam, result_info, type, ansi ); } diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 66df9d04d54..d4f47773abe 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -3799,6 +3799,9 @@ NTSTATUS WINAPI wow64_NtUserMessageCall( UINT *args ) params.dest_tid = params32->dest_tid; return NtUserMessageCall( hwnd, msg, wparam, lparam, ¶ms, type, ansi ); } + + case NtUserWintabDriverCall: + return NtUserMessageCall( hwnd, msg, wparam, lparam, result_info, type, ansi ); }
return message_call_32to64( hwnd, msg, wparam, lparam, result_info, type, ansi ); diff --git a/include/ntuser.h b/include/ntuser.h index 556b8bbbf51..664bcfe459d 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -422,6 +422,16 @@ enum NtUserSystemTrayCall = 0x0306, NtUserDragDropCall = 0x0307, NtUserPostDdeCall = 0x0308, + NtUserWintabDriverCall = 0x0309, +}; + +/* NtUserWintabDriverCall codes */ +enum +{ + NtUserWintabAttach, + NtUserWintabInfo, + NtUserWintabInit, + NtUserWintabPacket, };
/* NtUserThunkedMenuItemInfo codes */ diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index cdc838d36d8..ff903f4a51d 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -218,7 +218,7 @@ struct gdi_dc_funcs };
/* increment this when you change the DC function table */ -#define WINE_GDI_DRIVER_VERSION 107 +#define WINE_GDI_DRIVER_VERSION 108
#define GDI_PRIORITY_NULL_DRV 0 /* null driver */ #define GDI_PRIORITY_FONT_DRV 100 /* any font driver */ @@ -427,6 +427,8 @@ struct user_driver_funcs void (*pWindowPosChanged)(HWND,HWND,HWND,UINT,BOOL,const struct window_rects*,struct window_surface*); /* system parameters */ BOOL (*pSystemParametersInfo)(UINT,UINT,void*,UINT); + /* wintab support */ + LRESULT (*pWintabProc)(HWND,UINT,WPARAM,LPARAM,void*); /* vulkan support */ UINT (*pVulkanInit)(UINT,void *,const struct vulkan_driver_funcs **); /* opengl support */