[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

X Strike Force SVN commit: rev 484 - in trunk/debian: . patches



Author: branden
Date: 2003-09-07 04:42:10 -0500 (Sun, 07 Sep 2003)
New Revision: 484

Added:
   trunk/debian/patches/097_mouse_zaxis_mapping_pushes_up_buttons.diff
Modified:
   trunk/debian/changelog
Log:
debian/patches/097_mouse_zaxis_mapping_pushes_up_buttons.diff: add Bartosz
  Zapalowski's patch for supporting wheel mice with large numbers of
  buttons; the ZAxisMapping option "pushes up" the other buttons so that
  the mouse behaves sanely.  This addresses problems with how the X server
  parses wheel data from at least some devices that use the ExplorerPS/2
  protocol. (Closes: #166550)


Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog	2003-09-07 09:20:15 UTC (rev 483)
+++ trunk/debian/changelog	2003-09-07 09:42:10 UTC (rev 484)
@@ -13,8 +13,14 @@
     of the newport driver: depth 8 and resolution 1280x1024 (thanks, Bernhard
     R. Link) (Closes: #208500)
 
- -- Branden Robinson <branden@debian.org>  Wed,  3 Sep 2003 11:28:44 -0500
+  * patch #097: new; add Bartosz Zapalowski's patch for supporting wheel mice
+    with large numbers of buttons; the ZAxisMapping option "pushes up" the
+    other buttons so that the mouse behaves sanely.  This addresses problems
+    with how the X server parses wheel data from at least some devices that
+    use the ExplorerPS/2 protocol. (Closes: #166550)
 
+ -- Branden Robinson <branden@debian.org>  Sun,  7 Sep 2003 04:28:23 -0500
+
 xfree86 (4.2.1-11) unstable; urgency=medium
 
   * urgency set to medium because bug #206790 bites a lot of people (but,

Added: trunk/debian/patches/097_mouse_zaxis_mapping_pushes_up_buttons.diff
===================================================================
--- trunk/debian/patches/097_mouse_zaxis_mapping_pushes_up_buttons.diff	2003-09-07 09:20:15 UTC (rev 483)
+++ trunk/debian/patches/097_mouse_zaxis_mapping_pushes_up_buttons.diff	2003-09-07 09:42:10 UTC (rev 484)
@@ -0,0 +1,108 @@
+This patch by Bartosz Zapalowski.
+
+Already submitted upstream; see
+<http://bugs.xfree86.org/show_bug.cgi?id=346>.
+
+diff -ruN xc/programs/Xserver/hw/xfree86/input/mouse/mouse.c xc.new/programs/Xserver/hw/xfree86/input/mouse/mouse.c
+--- xc/programs/Xserver/hw/xfree86/input/mouse/mouse.c	2001-12-19 17:05:22.000000000 +0100
++++ xc/programs/Xserver/hw/xfree86/input/mouse/mouse.c	2003-08-15 13:55:08.000000000 +0200
+@@ -406,6 +406,45 @@
+ 			       int i,
+ 			       pointer LastSelectMask);
+ 
++static void
++MousePrepareShiftData(MouseDevPtr pMse)
++{
++    int wheels = 0;
++    int c, cs = 1, shifted = 0, s, ss, seen, mayshift = 0;
++    
++    if (!pMse->buttonsShiftData)
++	return;
++
++    wheels |= pMse->negativeZ | pMse->positiveZ
++	    | pMse->negativeW | pMse->positiveW;
++    
++    for (c = 0; c < pMse->buttons; c++, cs = cs << 1)
++    {
++	if ((wheels & cs) == cs)
++	    shifted++;
++	else if (shifted > 0)
++	    mayshift++;
++
++	if (shifted == 0)
++	    pMse->buttonsShiftData[c] = cs;
++	else {
++	    ss = cs;
++	    seen = 1;
++	    for (s = c; s < pMse->buttons; s++, ss = ss << 1)
++	    {
++		if ((wheels & ss) == ss)
++		    continue;
++		if (seen < (shifted + mayshift)) {
++		    seen++;
++		    continue;
++		}
++		pMse->buttonsShiftData[c] = ss;
++		break;
++	    }
++	}
++    }
++}
++
+ /* Process options common to all mouse types. */
+ static void
+ MouseCommonOptions(InputInfoPtr pInfo)
+@@ -588,6 +627,10 @@
+     if (origButtons != pMse->buttons)
+ 	from = X_CONFIG;
+     xf86Msg(from, "%s: Buttons: %d\n", pInfo->name, pMse->buttons);
++
++    pMse->buttonsShiftData = xcalloc(sizeof(int), pMse->buttons);
++
++    MousePrepareShiftData(pMse);
+     
+ }
+ 
+@@ -2036,6 +2079,23 @@
+     }
+ }
+ 
++static int
++MouseShiftButtons (MouseDevPtr pMse, int buttons)
++{
++    int i, s = 1;
++    int newbuttons = 0;
++    
++    if (!pMse->buttonsShiftData)
++	return buttons;
++
++    for (i = 0; i < pMse->buttons; i++, s = s << 1)  {
++	if (buttons & s)
++	    newbuttons |= pMse->buttonsShiftData[i];
++    }
++    
++    return newbuttons;
++}
++
+ static void
+ MousePostEvent(InputInfoPtr pInfo, int buttons, int dx, int dy, int dz, int dw)
+ {
+@@ -2063,6 +2123,7 @@
+ 	}
+ 	break;
+     default:	/* buttons */
++	buttons = MouseShiftButtons (pMse, buttons);
+ 	buttons &= ~(pMse->negativeZ | pMse->positiveZ
+ 		   | pMse->negativeW | pMse->positiveW);
+ 	if (dw < 0 || dz < -1)
+diff -ruN xc/programs/Xserver/hw/xfree86/os-support/xf86OSmouse.h xc.new/programs/Xserver/hw/xfree86/os-support/xf86OSmouse.h
+--- xc/programs/Xserver/hw/xfree86/os-support/xf86OSmouse.h	2001-08-06 22:51:10.000000000 +0200
++++ xc/programs/Xserver/hw/xfree86/os-support/xf86OSmouse.h	2003-08-13 16:52:37.000000000 +0200
+@@ -151,6 +151,7 @@
+     int			positiveY;
+     int			wheelYDistance;
+     int			wheelXDistance;
++    int	*		buttonsShiftData;
+ } MouseDevRec, *MouseDevPtr;
+ 
+ /* Z axis mapping */



Reply to: