> that's not good. I think there's historical reason to do so, but by now the
> drivers should just let button mapping to the DIX (unless they need something
> really special). xsetwacom would be better off using libXi's
> XSetDeviceButtonMapping.

I've got a problem now, though.  Apparently some wacom devices have
various types of scroll wheels, and they are all mapped to button 4/5.
I initially thought (because of a comment in ProcSetPointerMapping) that
the restriction that no two physical buttons can be mapped to the same
logical button was lifted for extended devices, but looking at the spec,
this is not the case.  The other thing is that the wacom driver allows
for buttons to mapped to a double click, which once again needs a
duplicate assignment.  On older X servers, the situation is even worse
because any XSetPointerMapping() call will override our settings.

Because of all this, I'm inclined to just leave the device button map
alone and handle all the remapping in the driver (see the attached patch).

>From d760878f4c74a52467b0b9d5e4ac0ba0af4e583f Mon Sep 17 00:00:00 2001
From: Thomas Jaeger <thjae...@gmail.com>
Date: Fri, 9 Jan 2009 14:08:20 -0500
Subject: [PATCH] Don't touch the button map

---
 src/xdrv/wcmCommon.c |   25 ++++++-------------------
 1 files changed, 6 insertions(+), 19 deletions(-)

diff --git a/src/xdrv/wcmCommon.c b/src/xdrv/wcmCommon.c
index ff834f4..511bacf 100755
--- a/src/xdrv/wcmCommon.c
+++ b/src/xdrv/wcmCommon.c
@@ -548,12 +548,7 @@ static void sendAButton(LocalDevicePtr local, int button, int mask,
 	switch (button & AC_TYPE)
 	{
 	case AC_BUTTON:
-/*		xf86PostButtonEvent(local->dev, is_absolute, button & AC_CODE,
-*/		/* Dynamically modify the button map as required --
-		 * to be moved in the place where button mappings are changed
-		 */
-		local->dev->button->map [button_idx] = button & AC_CODE;
-		xf86PostButtonEvent(local->dev, is_absolute, button_idx,
+		xf86PostButtonEvent(local->dev, is_absolute, button & AC_CODE,
 			mask != 0,0,naxes,rx,ry,rz,v3,v4,v5);
 		break;
 
@@ -599,27 +594,21 @@ static void sendAButton(LocalDevicePtr local, int button, int mask,
 		break;
 
 	case AC_DBLCLICK:
-		/* Dynamically modify the button map as required --
-		 * to be moved in the place where button mappings are changed.
-		 * Only left double is supported.
-		 */
-		local->dev->button->map [button_idx] = 1;
-
 		if (mask)
 		{
 			/* Left button down */
 			xf86PostButtonEvent(local->dev, is_absolute,
-				button_idx, 1,0,naxes, 
+				1, 1,0,naxes, 
 				rx,ry,rz,v3,v4,v5);
 
 			/* Left button up */
 			xf86PostButtonEvent(local->dev, is_absolute,
-				button_idx,0,0,naxes,
+				1,0,0,naxes,
 				rx,ry,rz,v3,v4,v5);
 		}
 
 		/* Left button down/up upon mask is 1/0 */
-		xf86PostButtonEvent(local->dev, is_absolute, button_idx, 
+		xf86PostButtonEvent(local->dev, is_absolute, 1, 
 			mask != 0,0,naxes,rx,ry,rz,v3,v4,v5);
 		break;
 	}
@@ -748,12 +737,10 @@ static void sendWheelStripEvents(LocalDevicePtr local, const WacomDeviceState* d
 	{
 	    case AC_BUTTON:
 		/* send both button on/off in the same event for pad */
-		local->dev->button->map [0] = fakeButton & AC_CODE;
-	
-		xf86PostButtonEvent(local->dev, is_absolute, 0,
+		xf86PostButtonEvent(local->dev, is_absolute, fakeButton & AC_CODE,
 			1,0,naxes,x,y,z,v3,v4,v5);
 
-		xf86PostButtonEvent(local->dev, is_absolute, 0,
+		xf86PostButtonEvent(local->dev, is_absolute, fakeButton & AC_CODE,
 			0,0,naxes,x,y,z,v3,v4,v5);
 	    break;
 
-- 
1.6.0.6

_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to