From a96d0f2e49227bab4a3181ce083afabb65adb950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Fri, 17 Jan 2020 16:33:11 +0100 Subject: [PATCH] winex11.drv: Split XInput2 thread initialization. And rename the library and function loader to x11drv_xinput_load. --- dlls/winex11.drv/mouse.c | 46 +++++++++++++++++++++++----------- dlls/winex11.drv/x11drv.h | 3 ++- dlls/winex11.drv/x11drv_main.c | 4 ++- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c index c34f5fde77e..f9cf4a33255 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -278,6 +278,32 @@ static void update_relative_valuators(XIAnyClassInfo **valuators, int n_valuator } +/*********************************************************************** + * x11drv_xinput_init + */ +void x11drv_xinput_init(void) +{ +#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H + struct x11drv_thread_data *data = x11drv_thread_data(); + int major = 2, minor = 0; + + if (data->xi2_state != xi_unknown) return; + + if (xinput2_available && + !pXIQueryVersion( data->display, &major, &minor )) + { + TRACE( "XInput2 %d.%d available\n", major, minor ); + data->xi2_state = xi_disabled; + } + else + { + data->xi2_state = xi_unavailable; + WARN( "XInput 2.0 not available\n" ); + } +#endif +} + + /*********************************************************************** * enable_xinput2 */ @@ -289,19 +315,9 @@ static void enable_xinput2(void) unsigned char mask_bits[XIMaskLen(XI_LASTEVENT)]; int count; - if (!xinput2_available) return; + TRACE( "state:%d\n", data->xi2_state ); + if (data->xi2_state != xi_disabled) return; - if (data->xi2_state == xi_unknown) - { - int major = 2, minor = 0; - if (!pXIQueryVersion( data->display, &major, &minor )) data->xi2_state = xi_disabled; - else - { - data->xi2_state = xi_unavailable; - WARN( "X Input 2 not available\n" ); - } - } - if (data->xi2_state == xi_unavailable) return; if (!pXIGetClientPointer( data->display, None, &data->xi2_core_pointer )) return; mask.mask = mask_bits; @@ -342,9 +358,9 @@ static void disable_xinput2(void) struct x11drv_thread_data *data = x11drv_thread_data(); XIEventMask mask; + TRACE( "state:%d\n", data->xi2_state ); if (data->xi2_state != xi_enabled) return; - TRACE( "disabling\n" ); data->xi2_state = xi_disabled; mask.mask = NULL; @@ -1954,9 +1970,9 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev ) /*********************************************************************** - * X11DRV_XInput2_Init + * x11drv_xinput_load */ -void X11DRV_XInput2_Init(void) +void x11drv_xinput_load(void) { #if defined(SONAME_LIBXI) && defined(HAVE_X11_EXTENSIONS_XINPUT2_H) int event, error; diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 9ceec5ee6d8..dbdb9c530bb 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -258,7 +258,8 @@ extern void X11DRV_ThreadDetach(void) DECLSPEC_HIDDEN; /* X11 driver internal functions */ extern void X11DRV_Xcursor_Init(void) DECLSPEC_HIDDEN; -extern void X11DRV_XInput2_Init(void) DECLSPEC_HIDDEN; +extern void x11drv_xinput_load(void) DECLSPEC_HIDDEN; +extern void x11drv_xinput_init(void) DECLSPEC_HIDDEN; extern DWORD copy_image_bits( BITMAPINFO *info, BOOL is_r8g8b8, XImage *image, const struct gdi_image_bits *src_bits, struct gdi_image_bits *dst_bits, diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c index 3a1e1973b24..6457c0a0b93 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -704,7 +704,7 @@ static NTSTATUS x11drv_init( void *arg ) #ifdef SONAME_LIBXCOMPOSITE X11DRV_XComposite_Init(); #endif - X11DRV_XInput2_Init(); + x11drv_xinput_load(); XkbUseExtension( gdi_display, NULL, NULL ); X11DRV_InitKeyboard( gdi_display ); @@ -794,6 +794,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void) if (use_xim) xim_thread_attach( data ); + x11drv_xinput_init(); + return data; } -- 2.40.0