From 05d2f03034c4bd2cc97f22c67e7bd9de3c3f710b 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 51a6828f10c..121f42eb541 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -277,6 +277,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 */ @@ -288,19 +314,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; @@ -341,9 +357,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; @@ -1921,9 +1937,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 8bcc204db9b..3f3e386ea4a 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -247,7 +247,8 @@ extern void CDECL 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 32beb84a009..2e083e322ec 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -619,7 +619,7 @@ static BOOL process_attach(void) #ifdef SONAME_LIBXCOMPOSITE X11DRV_XComposite_Init(); #endif - X11DRV_XInput2_Init(); + x11drv_xinput_load(); #ifdef HAVE_XKB if (use_xkb) use_xkb = XkbUseExtension( gdi_display, NULL, NULL ); @@ -713,6 +713,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void) if (use_xim) X11DRV_SetupXIM(); + x11drv_xinput_init(); + return data; } -- 2.34.1