2023-02-28 15:05:20 -08:00
|
|
|
From 5cd6a66d34a8844d757413804a6b4b358075993d Mon Sep 17 00:00:00 2001
|
2021-04-09 15:39:38 -07:00
|
|
|
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
|
|
|
Date: Fri, 17 Jan 2020 16:33:11 +0100
|
2021-12-22 15:22:27 -08:00
|
|
|
Subject: [PATCH] winex11.drv: Split XInput2 thread initialization.
|
2021-04-09 15:39:38 -07:00
|
|
|
|
|
|
|
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
|
2023-02-28 15:05:20 -08:00
|
|
|
index c34f5fde77e..f9cf4a33255 100644
|
2021-04-09 15:39:38 -07:00
|
|
|
--- a/dlls/winex11.drv/mouse.c
|
|
|
|
+++ b/dlls/winex11.drv/mouse.c
|
2023-02-28 15:05:20 -08:00
|
|
|
@@ -278,6 +278,32 @@ static void update_relative_valuators(XIAnyClassInfo **valuators, int n_valuator
|
2021-12-22 15:22:27 -08:00
|
|
|
}
|
2021-04-09 15:39:38 -07:00
|
|
|
|
|
|
|
|
|
|
|
+/***********************************************************************
|
|
|
|
+ * 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
|
|
|
|
*/
|
2023-02-28 15:05:20 -08:00
|
|
|
@@ -289,19 +315,9 @@ static void enable_xinput2(void)
|
2021-04-09 15:39:38 -07:00
|
|
|
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;
|
2023-02-28 15:05:20 -08:00
|
|
|
@@ -342,9 +358,9 @@ static void disable_xinput2(void)
|
2021-04-09 15:39:38 -07:00
|
|
|
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;
|
2023-02-28 15:05:20 -08:00
|
|
|
@@ -1954,9 +1970,9 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
|
2021-04-09 15:39:38 -07:00
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
- * 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
|
2023-02-28 15:05:20 -08:00
|
|
|
index 10a68779003..a8bbc207007 100644
|
2021-04-09 15:39:38 -07:00
|
|
|
--- a/dlls/winex11.drv/x11drv.h
|
|
|
|
+++ b/dlls/winex11.drv/x11drv.h
|
2023-02-28 15:05:20 -08:00
|
|
|
@@ -258,7 +258,8 @@ extern void X11DRV_ThreadDetach(void) DECLSPEC_HIDDEN;
|
2021-04-09 15:39:38 -07:00
|
|
|
/* 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
|
2023-02-28 15:05:20 -08:00
|
|
|
index 03a09a32d8a..657d8f52db0 100644
|
2021-04-09 15:39:38 -07:00
|
|
|
--- a/dlls/winex11.drv/x11drv_main.c
|
|
|
|
+++ b/dlls/winex11.drv/x11drv_main.c
|
2023-02-28 15:05:20 -08:00
|
|
|
@@ -704,7 +704,7 @@ static NTSTATUS x11drv_init( void *arg )
|
2021-04-09 15:39:38 -07:00
|
|
|
#ifdef SONAME_LIBXCOMPOSITE
|
|
|
|
X11DRV_XComposite_Init();
|
|
|
|
#endif
|
|
|
|
- X11DRV_XInput2_Init();
|
|
|
|
+ x11drv_xinput_load();
|
|
|
|
|
2023-02-28 15:05:20 -08:00
|
|
|
XkbUseExtension( gdi_display, NULL, NULL );
|
|
|
|
X11DRV_InitKeyboard( gdi_display );
|
|
|
|
@@ -794,6 +794,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
|
2021-04-09 15:39:38 -07:00
|
|
|
|
|
|
|
if (use_xim) X11DRV_SetupXIM();
|
|
|
|
|
|
|
|
+ x11drv_xinput_init();
|
|
|
|
+
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
|
|
|
--
|
2023-02-28 15:05:20 -08:00
|
|
|
2.39.2
|
2021-04-09 15:39:38 -07:00
|
|
|
|