xserver: Branch 'master' - 9 commits

Keith Packard keithp at kemper.freedesktop.org
Tue Jun 7 07:45:59 PDT 2011


 Xi/exevents.c   |    4 ++--
 dix/events.c    |    6 +++---
 dix/getevents.c |   43 ++++++++++++++++++++++++++++---------------
 test/input.c    |    3 +++
 4 files changed, 36 insertions(+), 20 deletions(-)

New commits:
commit bf9fd0a83eef771ee018438f05e2d9f20b43539b
Merge: 21eec36... 0d14056...
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Jun 7 07:45:22 2011 -0700

    Merge remote-tracking branch 'whot/for-keith'

commit 0d140567ba2b5bf364265dba07de519f691c67a1
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jun 7 10:42:50 2011 +1000

    dix: fix crashers with floating device.
    
    dc57f89959e549403f8488eb9f23425bd7118b22 accidentally reversed the
    conditions.
    
    in dix/events.c we try to detach floating devices. This leads to a
    NULL-dereference on GetMaster()->id.
    
    in dix/getevents.c we try to get the master device for the floating slave
    and dereference it.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/dix/events.c b/dix/events.c
index 3fae52d..3c7bd50 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1421,7 +1421,7 @@ CheckGrabForSyncs(DeviceIntPtr thisDev, Bool thisMode, Bool otherMode)
 static void
 DetachFromMaster(DeviceIntPtr dev)
 {
-    if (!IsFloating(dev))
+    if (IsFloating(dev))
         return;
 
     dev->saved_master_id = GetMaster(dev, MASTER_ATTACHED)->id;
diff --git a/dix/getevents.c b/dix/getevents.c
index 1352a81..c935c97 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -864,7 +864,7 @@ positionSprite(DeviceIntPtr dev, int mode,
      * to the current screen. */
     miPointerSetPosition(dev, mode, screenx, screeny);
 
-    if(!IsMaster(dev) || !IsFloating(dev)) {
+    if(!IsMaster(dev) && !IsFloating(dev)) {
         DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
         master->last.valuators[0] = *screenx;
         master->last.valuators[1] = *screeny;
@@ -911,7 +911,7 @@ updateHistory(DeviceIntPtr dev, ValuatorMask *mask, CARD32 ms)
         return;
 
     updateMotionHistory(dev, ms, mask, dev->last.valuators);
-    if(!IsMaster(dev) || !IsFloating(dev))
+    if(!IsMaster(dev) && !IsFloating(dev))
     {
         DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
         updateMotionHistory(master, ms, mask, dev->last.valuators);
commit bfd8422e8877acf02155ca0bd7fbd2416b029720
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri May 27 12:24:21 2011 +1000

    Xi: use __func__ instead of function name.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index c6f9d46..3b0411d 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -890,8 +890,8 @@ ProcessRawEvent(RawDeviceEvent *ev, DeviceIntPtr device)
         i = EventToXI2((InternalEvent*)ev, (xEvent**)&xi);
         if (i != Success)
         {
-            ErrorF("[Xi] %s: XI2 conversion failed in ProcessRawEvent (%d)\n",
-                    device->name, i);
+            ErrorF("[Xi] %s: XI2 conversion failed in %s (%d)\n",
+                    __func__, device->name, i);
             return;
         }
 
commit c042a267c40d35b4fb947f4bafdfeb541dd9d772
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri May 27 10:10:48 2011 +1000

    dix: use xi2_get_type instead of manual typecast
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/dix/events.c b/dix/events.c
index 1aadd57..3fae52d 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -3997,7 +3997,7 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev,
             rc = EventToXI2(event, &xi2);
             if (rc == Success)
             {
-                int evtype = ((xGenericEvent*)xi2)->evtype;
+                int evtype = xi2_get_type(xi2);
                 mask = grab->xi2mask[XIAllDevices][evtype/8] |
                     grab->xi2mask[XIAllMasterDevices][evtype/8] |
                     grab->xi2mask[thisDev->id][evtype/8];
commit b75cdb5bf76303162e947173e8ee68253a861272
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue May 31 10:51:19 2011 +1000

    dix: drop x/y back into the right valuators after transformation.
    
    If the matrix is used for rotation, the coordinates affected may change.
    e.g. a valuator mask of (x, nil) becomes [x, lasty] and is rotated to
    [lasty, x]. Since the second value was unset, we would not drop x back into
    the mask, resulting in a loss of movement.
    
    Thus, drop any value that changed after applying the matrix into the
    valuators. Thus, the example above becomes
    (x, nil) → [x, lasty] → [lasty, x] → (lasty, x)
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Simon Thum <simon.thum at gmx.de>

diff --git a/dix/getevents.c b/dix/getevents.c
index 6dcee3e..1352a81 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -1069,18 +1069,19 @@ transform(struct pixman_f_transform *m, int *x, int *y)
 static void
 transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
 {
-    int x, y;
+    int x, y, ox, oy;
 
-    x = valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) :
-                                       dev->last.valuators[0];
-    y = valuator_mask_isset(mask, 1) ? valuator_mask_get(mask, 1) :
-                                       dev->last.valuators[1];
+    ox = x = valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) :
+                                            dev->last.valuators[0];
+    oy = y = valuator_mask_isset(mask, 1) ? valuator_mask_get(mask, 1) :
+                                            dev->last.valuators[1];
 
     transform(&dev->transform, &x, &y);
 
-    if (valuator_mask_isset(mask, 0))
+    if (valuator_mask_isset(mask, 0) || ox != x)
         valuator_mask_set(mask, 0, x);
-    if (valuator_mask_isset(mask, 1))
+
+    if (valuator_mask_isset(mask, 1) || oy != y)
         valuator_mask_set(mask, 1, y);
 }
 
commit fe4b818700453b76d9f46749dac5d12540b91e63
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue May 31 10:23:57 2011 +1000

    dix: don't pass x/y to transformAbsolute
    
    We passed in the mask, but didn't do anything with it. Move the logic to
    take the axes out of the valuator masks into transformAbsolute.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Simon Thum <simon.thum at gmx.de>

diff --git a/dix/getevents.c b/dix/getevents.c
index 13789f6..6dcee3e 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -1052,17 +1052,38 @@ FreeEventList(InternalEvent *list, int num_events)
     free(list);
 }
 
+/**
+ * Transform vector x/y according to matrix m and drop the rounded coords
+ * back into x/y.
+ */
 static void
-transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask, int *x, int *y)
+transform(struct pixman_f_transform *m, int *x, int *y)
 {
     struct pixman_f_vector p = {.v = {*x, *y, 1}};
-
-    pixman_f_transform_point(&dev->transform, &p);
+    pixman_f_transform_point(m, &p);
 
     *x = lround(p.v[0]);
     *y = lround(p.v[1]);
 }
 
+static void
+transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
+{
+    int x, y;
+
+    x = valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) :
+                                       dev->last.valuators[0];
+    y = valuator_mask_isset(mask, 1) ? valuator_mask_get(mask, 1) :
+                                       dev->last.valuators[1];
+
+    transform(&dev->transform, &x, &y);
+
+    if (valuator_mask_isset(mask, 0))
+        valuator_mask_set(mask, 0, x);
+    if (valuator_mask_isset(mask, 1))
+        valuator_mask_set(mask, 1, y);
+}
+
 /**
  * Generate internal events representing this pointer event and enqueue them
  * on the event queue.
@@ -1175,16 +1196,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
             }
         }
 
-        x = (valuator_mask_isset(&mask, 0) ? valuator_mask_get(&mask, 0) :
-             pDev->last.valuators[0]);
-        y = (valuator_mask_isset(&mask, 1) ? valuator_mask_get(&mask, 1) :
-             pDev->last.valuators[1]);
-        transformAbsolute(pDev, &mask, &x, &y);
-        if (valuator_mask_isset(&mask, 0))
-            valuator_mask_set(&mask, 0, x);
-        if (valuator_mask_isset(&mask, 1))
-            valuator_mask_set(&mask, 1, y);
-
+        transformAbsolute(pDev, &mask);
         moveAbsolute(pDev, &x, &y, &mask);
     } else {
         if (flags & POINTER_ACCELERATE) {
commit 62f1bf96e1ea27e1eff137cb9333f3dd3b014dd0
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Jun 1 10:22:44 2011 +1000

    test: fix memset size for WindowRec (#37801)
    
    X.Org Bug 37801 <http://bugs.freedesktop.org/show_bug.cgi?id=37801>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>

diff --git a/test/xi2/protocol-common.c b/test/xi2/protocol-common.c
index 6ffc697..4234533 100644
--- a/test/xi2/protocol-common.c
+++ b/test/xi2/protocol-common.c
@@ -121,7 +121,7 @@ ClientRec init_client(int len, void *data)
 
 void init_window(WindowPtr window, WindowPtr parent, int id)
 {
-    memset(window, 0, sizeof(window));
+    memset(window, 0, sizeof(*window));
 
     window->drawable.id = id;
     if (parent)
commit f94898928dfaf8df648bc3eea7d304826b7ac1b8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue May 31 14:48:33 2011 +1000

    dix: fix an error message.
    
    event type, not device type.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index b60c299..1aadd57 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -432,7 +432,7 @@ GetEventFilter(DeviceIntPtr dev, xEvent *event)
         return filters[dev ? dev->id : 0][event->u.u.type];
     else if ((evtype = xi2_get_type(event)))
         return (1 << (evtype % 8));
-    ErrorF("[dix] Unknown device type %d. No filter\n", event->u.u.type);
+    ErrorF("[dix] Unknown event type %d. No filter\n", event->u.u.type);
     return 0;
 }
 
commit 8ef0974874f322e3ce2f3e6be4ab3c7e73a7b380
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu May 19 14:50:17 2011 +1000

    test: don't test for double alignment on i386. (#36986)
    
    i386 is one of the few architectures that doesn't need double alignment.
    
    X.Org Bug 36986 <http://bugs.freedesktop.org/show_bug.cgi?id=36986>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/input.c b/test/input.c
index ac37d67..837ce49 100644
--- a/test/input.c
+++ b/test/input.c
@@ -1223,8 +1223,11 @@ static void dix_valuator_alloc(void)
 
         assert(v);
         assert(v->numAxes == num_axes);
+#ifndef __i386__
+        /* must be double-aligned on 64 bit */
         assert(((void*)v->axisVal - (void*)v) % sizeof(double) == 0);
         assert(((void*)v->axes - (void*)v) % sizeof(double) == 0);
+#endif
         num_axes ++;
     }
 


More information about the xorg-commit mailing list