Module: wine Branch: master Commit: 165830c317b63999ee7e32b58c73599591a65610 URL: https://gitlab.winehq.org/wine/wine/-/commit/165830c317b63999ee7e32b58c73599...
Author: Rémi Bernon rbernon@codeweavers.com Date: Sun Oct 24 16:27:40 2021 +0200
winex11: Simplify XInput2 device valuator lookup.
Valuator names aren't well specified, and although they are usually named "Rel X/Y" or "Abs X/Y", there are cases where the names are different.
Lets just assume that the first two valuators are the X/Y axes, as it seems to be generally the case.
---
dlls/winex11.drv/mouse.c | 21 ++++++++++----------- dlls/winex11.drv/x11drv.h | 2 -- dlls/winex11.drv/x11drv_main.c | 2 -- 3 files changed, 10 insertions(+), 15 deletions(-)
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c index 143837adede..bdbd559b107 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -228,26 +228,25 @@ void set_window_cursor( Window window, HCURSOR handle ) /*********************************************************************** * update_relative_valuators */ -static void update_relative_valuators(XIAnyClassInfo **valuators, int n_valuators) +static void update_relative_valuators( XIAnyClassInfo **classes, int num_classes ) { struct x11drv_thread_data *thread_data = x11drv_thread_data(); - int i; + XIValuatorClassInfo *valuator;
thread_data->x_valuator.number = -1; thread_data->y_valuator.number = -1;
- for (i = 0; i < n_valuators; i++) + while (num_classes--) { - XIValuatorClassInfo *class = (XIValuatorClassInfo *)valuators[i]; - if (valuators[i]->type != XIValuatorClass) continue; - if (class->label == x11drv_atom( Rel_X ) || - (!class->label && class->number == 0 && class->mode == XIModeRelative)) - thread_data->x_valuator = *class; - else if (class->label == x11drv_atom( Rel_Y ) || - (!class->label && class->number == 1 && class->mode == XIModeRelative)) - thread_data->y_valuator = *class; + valuator = (XIValuatorClassInfo *)classes[num_classes]; + if (classes[num_classes]->type != XIValuatorClass) continue; + if (valuator->number == 0 && valuator->mode == XIModeRelative) thread_data->x_valuator = *valuator; + if (valuator->number == 1 && valuator->mode == XIModeRelative) thread_data->y_valuator = *valuator; }
+ if (thread_data->x_valuator.number < 0 || thread_data->y_valuator.number < 0) + WARN( "X/Y axis valuators not found, ignoring RawMotion events\n" ); + thread_data->x_valuator.value = 0; thread_data->y_valuator.value = 0; } diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index e8a87283fe2..71a3582ff76 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -471,8 +471,6 @@ enum x11drv_atoms XATOM_RAW_ASCENT, XATOM_RAW_DESCENT, XATOM_RAW_CAP_HEIGHT, - XATOM_Rel_X, - XATOM_Rel_Y, XATOM_WM_PROTOCOLS, XATOM_WM_DELETE_WINDOW, XATOM_WM_STATE, diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c index 097dd9c3dc8..0925fe54b9c 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -142,8 +142,6 @@ static const char * const atom_names[NB_XATOMS - FIRST_XATOM] = "RAW_ASCENT", "RAW_DESCENT", "RAW_CAP_HEIGHT", - "Rel X", - "Rel Y", "WM_PROTOCOLS", "WM_DELETE_WINDOW", "WM_STATE",