On Fri, Jan 09, 2009 at 02:13:34PM -0500, Thomas Jaeger wrote:
> > 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.

this pretty much sums up the "really special" cases I mentioned in my previous
email.
The general rule for button mappings in the driver is - only map it if you do
purposly do not want users to remap this with standard X tools.

Another example I can think of is to remap a button in the driver that needs
to appear hard-wired to a different button.

> 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).

ACK. The driver should not worry about the DIX button map, i.e. it should post
button 1 as button 1, regardless of the server's button mapping. 

Cheers,
  Peter

> From d760878f4c74a52467b0b9d5e4ac0ba0af4e583f Mon Sep 17 00:00:00 2001
> From: Thomas Jaeger <[email protected]>
> 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;

_______________________________________________
xorg mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to