From 0a9398421ce3d5a57419d1c8582d66ec31a31f91 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 25 Sep 2012 19:25:02 +0200 Subject: [PATCH] winex11: Add a workaround for XInput support with mouse drivers that don't provide labels. --- dlls/winex11.drv/mouse.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c index 580842021c2..2f9831c5ee7 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -286,6 +286,8 @@ static void enable_xinput2(void) class->number, class->min, class->max, class->resolution, class->mode, XGetAtomName( data->display, class->label )); if (class->label == x11drv_atom( Rel_X ) || class->label == x11drv_atom( Rel_Y )) count++; + /* workaround for drivers that don't provide labels */ + if (!class->label && class->number <= 1 && class->mode == XIModeRelative) count++; } if (count < 2) continue; TRACE( "Using %u (%s) as core pointer\n", @@ -1526,14 +1528,16 @@ static void X11DRV_RawMotion( XGenericEventCookie *xev ) if (XIMaskIsSet( event->valuators.mask, class->number )) { double val = *values++; - if (class->label == x11drv_atom( Rel_X )) + if (class->label == x11drv_atom( Rel_X ) || + (!class->label && class->number == 0 && class->mode == XIModeRelative)) { input.u.mi.dx = dx = val; if (class->min < class->max) input.u.mi.dx = val * (virtual_screen_rect.right - virtual_screen_rect.left) / (class->max - class->min); } - else if (class->label == x11drv_atom( Rel_Y )) + else if (class->label == x11drv_atom( Rel_Y ) || + (!class->label && class->number == 1 && class->mode == XIModeRelative)) { input.u.mi.dy = dy = val; if (class->min < class->max) -- 2.11.4.GIT