From: Torge Matthies tmatthies@codeweavers.com
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/winex11.drv/dllmain.c | 10 +++------- dlls/winex11.drv/unixlib.h | 4 +--- dlls/winex11.drv/x11drv_main.c | 3 ++- 3 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/dlls/winex11.drv/dllmain.c b/dlls/winex11.drv/dllmain.c index 8ed0e40d1ac..a069aca42a3 100644 --- a/dlls/winex11.drv/dllmain.c +++ b/dlls/winex11.drv/dllmain.c @@ -46,8 +46,7 @@ static NTSTATUS WINAPI x11drv_callback( void *arg, ULONG size ) return callback_funcs[params->id]( params->arg ); }
-typedef NTSTATUS (WINAPI *kernel_callback)( void *params, ULONG size ); -static const kernel_callback kernel_callbacks[] = +static const user32_callback_func user32_callback_table[] = { x11drv_callback, x11drv_dnd_enter_event, @@ -58,9 +57,6 @@ static const kernel_callback kernel_callbacks[] = x11drv_systray_change_owner, };
-C_ASSERT( NtUserDriverCallbackFirst + ARRAYSIZE(kernel_callbacks) == client_func_last ); - - BOOL WINAPI DllMain( HINSTANCE instance, DWORD reason, void *reserved ) { void **callback_table; @@ -80,8 +76,8 @@ BOOL WINAPI DllMain( HINSTANCE instance, DWORD reason, void *reserved )
if (X11DRV_CALL( init, ¶ms )) return FALSE;
- callback_table = NtCurrentTeb()->Peb->KernelCallbackTable; - memcpy( callback_table + NtUserDriverCallbackFirst, kernel_callbacks, sizeof(kernel_callbacks) ); + __wine_set_user32_callback_table( user32_callback_destination_driver, user32_callback_table, + ARRAY_SIZE(user32_callback_table) ); return TRUE; }
diff --git a/dlls/winex11.drv/unixlib.h b/dlls/winex11.drv/unixlib.h index e8b243d67a1..960f51b89f3 100644 --- a/dlls/winex11.drv/unixlib.h +++ b/dlls/winex11.drv/unixlib.h @@ -80,7 +80,7 @@ struct xim_preedit_state_params /* driver client callbacks exposed with KernelCallbackTable interface */ enum x11drv_client_funcs { - client_func_callback = NtUserDriverCallbackFirst, + client_func_callback, client_func_dnd_enter_event, client_func_dnd_position_event, client_func_dnd_post_drop, @@ -90,8 +90,6 @@ enum x11drv_client_funcs client_func_last };
-C_ASSERT( client_func_last <= NtUserDriverCallbackLast + 1 ); - /* simplified interface for client callbacks requiring only a single UINT parameter */ enum client_callback { diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c index 497e270ee8a..411241f320e 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -1313,7 +1313,8 @@ NTSTATUS x11drv_client_func( enum x11drv_client_funcs id, const void *params, UL { void *ret_ptr; ULONG ret_len; - return KeUserModeCallback( id, params, size, &ret_ptr, &ret_len ); + struct user32_callback_params cbparams = { user32_callback_destination_driver, id, params, size }; + return KeUserModeCallback( NtUserDispatchCallback, &cbparams, sizeof(cbparams), &ret_ptr, &ret_len ); }