On Mon, Jan 05, 2009 at 11:55:40AM -0500, Thomas Jaeger wrote:
> From 3f8ba578ad18b7135031197f6ec5145afcd1479a Mon Sep 17 00:00:00 2001
> From: Thomas Jaeger <[email protected]>
> Date: Mon, 22 Dec 2008 00:55:09 +0100
> Subject: [PATCH] Count the number of logically down buttons in buttonsDown
> 
> This fixes the following bug.  Assuming your window manager grabs
> Alt+Button1 to move windows, map Button3 to 0 via XSetPointerMapping,
> then press the physical button 3 (this shouldn't have any effect), press
> Alt and then button 1.  The press event is delivered to the application
> instead of firing the grab.

Signed off and pushed (finally). Thanks for the patch.
Can you send me the updated version of the other patch please, AFAICT there
was a minor change missing.

Cheers,
  Peter

> ---
>  Xi/exevents.c      |    8 ++++----
>  include/inputstr.h |    6 +++++-
>  2 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/Xi/exevents.c b/Xi/exevents.c
> index 2aa3161..b4359a8 100644
> --- a/Xi/exevents.c
> +++ b/Xi/exevents.c
> @@ -895,10 +895,10 @@ UpdateDeviceState(DeviceIntPtr device, xEvent* xE, int 
> count)
>          *kptr |= bit;
>       if (device->valuator)
>           device->valuator->motionHintWindow = NullWindow;
> -        b->buttonsDown++;
> -     b->motionMask = DeviceButtonMotionMask;
>          if (!b->map[key])
>              return DONT_PROCESS;
> +        b->buttonsDown++;
> +     b->motionMask = DeviceButtonMotionMask;
>          if (b->map[key] <= 5)
>           b->state |= (Button1Mask >> 1) << b->map[key];
>       SetMaskForEvent(device->id, Motion_Filter(b), DeviceMotionNotify);
> @@ -927,10 +927,10 @@ UpdateDeviceState(DeviceIntPtr device, xEvent* xE, int 
> count)
>          *kptr &= ~bit;
>       if (device->valuator)
>           device->valuator->motionHintWindow = NullWindow;
> -        if (b->buttonsDown >= 1 && !--b->buttonsDown)
> -         b->motionMask = 0;
>          if (!b->map[key])
>              return DONT_PROCESS;
> +        if (b->buttonsDown >= 1 && !--b->buttonsDown)
> +         b->motionMask = 0;
>       if (b->map[key] <= 5)
>           b->state &= ~((Button1Mask >> 1) << b->map[key]);
>       SetMaskForEvent(device->id, Motion_Filter(b), DeviceMotionNotify);
> diff --git a/include/inputstr.h b/include/inputstr.h
> index 4719d37..515b6aa 100644
> --- a/include/inputstr.h
> +++ b/include/inputstr.h
> @@ -185,7 +185,11 @@ typedef struct _ValuatorClassRec {
>  
>  typedef struct _ButtonClassRec {
>      CARD8            numButtons;
> -    CARD8            buttonsDown;    /* number of buttons currently down */
> +    CARD8            buttonsDown;    /* number of buttons currently down
> +                                           This counts logical buttons, not 
> +                                        physical ones, i.e if some buttons
> +                                        are mapped to 0, they're not counted
> +                                        here */
>      unsigned short   state;
>      Mask             motionMask;
>      CARD8            down[DOWN_LENGTH];
> -- 
> 1.6.0.4
> 

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

Reply via email to