xserver: Branch 'master' - 4 commits

Keith Packard keithp at kemper.freedesktop.org
Tue Oct 19 22:50:36 PDT 2010


 hw/xfree86/common/xf86DGA.c |    4 ++++
 xkb/xkb.c                   |   37 +++++++++++++++++++++----------------
 2 files changed, 25 insertions(+), 16 deletions(-)

New commits:
commit d738175eaf1098e29b8afb6de8e99b5098e366a7
Merge: 8806a04... 9872e0f...
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Oct 19 22:50:15 2010 -0700

    Merge remote branch 'whot/for-keith'

commit 9872e0f0115cd7d0543e55a1831facddf3aff90c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Oct 13 10:31:51 2010 +1000

    xfree86: set mask for valuators 0/1 when emulating core events (#30267)
    
    EventToCore as of the commit below won't generate core motion events if the
    valuator mask for x/y isn't set. For DGA, we work around this check by
    forcibly setting the mask in the event we pass down.
    
    commit de8be07cc0a8163b6ef04455706fd5ca2cebe587
    Author: Peter Hutterer <peter.hutterer at who-t.net>
    Date:   Tue Aug 17 12:08:52 2010 +1000
    
        dix: don't create core motion events for non-x/y valuators.
    
    X.Org Bug 30267 <http://bugs.freedesktop.org/show_bug.cgi?id=30267>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Tested-by: Andrew Randrianasulu <randrik at mail.ru>
    Tested-by: Andy Furniss
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index c468c60..1058a46 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -1133,6 +1133,10 @@ DGAProcessPointerEvent (ScreenPtr pScreen, DGAEvent *event, DeviceIntPtr mouse)
             ev.root_x           = event->dx;
             ev.root_y           = event->dy;
             ev.corestate        = event->state;
+            /* DGA is core only, so valuators.data doesn't actually matter.
+             * Mask must be set for EventToCore to create motion events. */
+            SetBit(ev.valuators.mask, 0);
+            SetBit(ev.valuators.mask, 1);
 	    DeliverGrabbedEvent ((InternalEvent*)&ev, mouse, FALSE);
 	}
     }
commit 649293f6b634e6305b6737a841d6e9d0f0065d6c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Oct 11 16:09:18 2010 +1000

    xkb: always fill the symsPerKey array, regardless of client flags (#30527)
    
    Even if a client does not modify the symbols, symsPerKey and mapWidths must
    be filled from the current configuration. Both arrays are then passed into
    other functions (pending the right flag), thus they must contain valid
    values regardless of the XkbKeySymsMask flag in req->present.
    
    X.Org Bug 30527 <http://bugs.freedesktop.org/show_bug.cgi?id=30527>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/xkb/xkb.c b/xkb/xkb.c
index 7d95bc0..bbb1d9d 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -1677,20 +1677,6 @@ xkbSymMapWireDesc*	wire = *wireRtrn;
     if (!(XkbKeySymsMask&req->present))
 	return 1;
     CHK_REQ_KEY_RANGE2(0x11,req->firstKeySym,req->nKeySyms,req,(*errorRtrn),0);
-    map = &xkb->map->key_sym_map[xkb->min_key_code];
-    for (i=xkb->min_key_code;i<(unsigned)req->firstKeySym;i++,map++) {
-	register int g,ng,w;
-	ng= XkbNumGroups(map->group_info);
-	for (w=g=0;g<ng;g++) {
-	    if (map->kt_index[g]>=(unsigned)nTypes) {
-		*errorRtrn = _XkbErrCode4(0x13,i,g,map->kt_index[g]);
-		return 0;
-	    }
-	    if (mapWidths[map->kt_index[g]]>w)
-		w= mapWidths[map->kt_index[g]];
-	}
-	symsPerKey[i] = w*ng;
-    }
     for (i=0;i<req->nKeySyms;i++) {
 	KeySym *pSyms;
 	register unsigned nG;
@@ -2345,6 +2331,8 @@ _XkbSetMapChecks(ClientPtr client, DeviceIntPtr dev, xkbSetMapReq *req, char* va
     int                 nTypes = 0, nActions;
     CARD8               mapWidths[XkbMaxLegalKeyCode + 1] = {0};
     CARD16              symsPerKey[XkbMaxLegalKeyCode + 1] = {0};
+    XkbSymMapPtr        map;
+    int                 i;
 
     xkbi= dev->key->xkbInfo;
     xkb = xkbi->desc;
@@ -2373,6 +2361,23 @@ _XkbSetMapChecks(ClientPtr client, DeviceIntPtr dev, xkbSetMapReq *req, char* va
 	client->errorValue = nTypes;
 	return BadValue;
     }
+
+    /* symsPerKey/mapWidths must be filled regardless of client-side flags */
+    map = &xkb->map->key_sym_map[xkb->min_key_code];
+    for (i=xkb->min_key_code;i<xkb->max_key_code;i++,map++) {
+	register int g,ng,w;
+	ng= XkbNumGroups(map->group_info);
+	for (w=g=0;g<ng;g++) {
+	    if (map->kt_index[g]>=(unsigned)nTypes) {
+		client->errorValue = _XkbErrCode4(0x13,i,g,map->kt_index[g]);
+		return 0;
+	    }
+	    if (mapWidths[map->kt_index[g]]>w)
+		w= mapWidths[map->kt_index[g]];
+	}
+	symsPerKey[i] = w*ng;
+    }
+
     if ((req->present & XkbKeySymsMask) &&
 	(!CheckKeySyms(client,xkb,req,nTypes,mapWidths,symsPerKey,
 					(xkbSymMapWireDesc **)&values,&error))) {
commit ca21a266224b6eff4fd817c2082d2e144f1ea58c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Oct 11 15:38:38 2010 +1000

    xkb: init mapWidth and symsPerKey arrays to 0.
    
    Helps debugging greatly, random 8 or 16 bit values can sometimes look like
    valid values, causing much excitement on the client front.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/xkb/xkb.c b/xkb/xkb.c
index 4105c1c..7d95bc0 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -2343,8 +2343,8 @@ _XkbSetMapChecks(ClientPtr client, DeviceIntPtr dev, xkbSetMapReq *req, char* va
     XkbDescPtr          xkb;
     int                 error;
     int                 nTypes = 0, nActions;
-    CARD8               mapWidths[XkbMaxLegalKeyCode + 1];
-    CARD16              symsPerKey[XkbMaxLegalKeyCode + 1];
+    CARD8               mapWidths[XkbMaxLegalKeyCode + 1] = {0};
+    CARD16              symsPerKey[XkbMaxLegalKeyCode + 1] = {0};
 
     xkbi= dev->key->xkbInfo;
     xkb = xkbi->desc;


More information about the xorg-commit mailing list