xserver: Branch 'master'

Peter Hutterer whot at kemper.freedesktop.org
Thu Jan 15 16:46:07 PST 2009


 Xi/exevents.c      |    8 ++++----
 include/inputstr.h |    6 +++++-
 2 files changed, 9 insertions(+), 5 deletions(-)

New commits:
commit f7f85f696570541e2dd43462675de9e6ee46f545
Author: Thomas Jaeger <ThJaeger at gmail.com>
Date:   Mon Dec 22 00:55:09 2008 +0100

    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-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 5ab9d66..f3f9d39 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -946,10 +946,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);
@@ -978,10 +978,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 039d5bc..adb7b9a 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];


More information about the xorg-commit mailing list