From f31315aaa8df8630415a9ba6aeeb8b97dcd5094b Mon Sep 17 00:00:00 2001 From: marha Date: Wed, 20 Oct 2010 16:43:00 +0000 Subject: xserver git update 20/10/2010 --- xorg-server/hw/xfree86/common/xf86DGA.c | 4 ++++ xorg-server/xkb/xkb.c | 37 +++++++++++++++++++-------------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/xorg-server/hw/xfree86/common/xf86DGA.c b/xorg-server/hw/xfree86/common/xf86DGA.c index 1d46a67d3..9a99a339b 100644 --- a/xorg-server/hw/xfree86/common/xf86DGA.c +++ b/xorg-server/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); } } diff --git a/xorg-server/xkb/xkb.c b/xorg-server/xkb/xkb.c index 7ed875225..0f6daa573 100644 --- a/xorg-server/xkb/xkb.c +++ b/xorg-server/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;gkt_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;inKeySyms;i++) { KeySym *pSyms; register unsigned nG; @@ -2343,8 +2329,10 @@ _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}; + 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;imax_key_code;i++,map++) { + register int g,ng,w; + ng= XkbNumGroups(map->group_info); + for (w=g=0;gkt_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))) { -- cgit v1.2.3