Alexandre Julliard : winex11: Add a workaround for XInput support with mouse drivers that don' t provide labels.

Alexandre Julliard julliard at winehq.org
Wed Sep 26 14:06:49 CDT 2012


Module: wine
Branch: master
Commit: 0a9398421ce3d5a57419d1c8582d66ec31a31f91
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0a9398421ce3d5a57419d1c8582d66ec31a31f91

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Sep 25 19:25:02 2012 +0200

winex11: Add a workaround for XInput support with mouse drivers that don't provide labels.

---

 dlls/winex11.drv/mouse.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index 5808420..2f9831c 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)




More information about the wine-cvs mailing list