Example #1
0
static Status
XkbInitCompatStructs(XkbDescPtr xkb)
{
register int 	i;
XkbCompatMapPtr	compat;

    if (xkb->defined & XkmCompatMapMask)
        return TRUE;

    if (XkbAllocCompatMap(xkb,XkbAllCompatMask,num_dfltSI)!=Success)
	return BadAlloc;
    compat = xkb->compat;
    if (compat->sym_interpret) {
	compat->num_si = num_dfltSI;
	memcpy((char *)compat->sym_interpret,(char *)dfltSI,sizeof(dfltSI));
    }
    for (i=0;i<XkbNumKbdGroups;i++) {
	compat->groups[i]= compatMap.groups[i];
	if (compat->groups[i].vmods!=0) {
	    unsigned mask;
	    mask= XkbMaskForVMask(xkb,compat->groups[i].vmods);
	    compat->groups[i].mask= compat->groups[i].real_mods|mask;
	}
	else compat->groups[i].mask= compat->groups[i].real_mods;
    }
    return Success;
}
Example #2
0
Status
_XkbReadGetCompatMapReply(	Display *		dpy,
				xkbGetCompatMapReply *	rep,
				XkbDescPtr		xkb,
				int	*		nread_rtrn)
{
register int 		i;
XkbReadBufferRec	buf;

    if (!_XkbInitReadBuffer(dpy,&buf,(int)rep->length*4))
	return BadAlloc;

    if (nread_rtrn)
	*nread_rtrn= (int)rep->length*4;

    i= rep->firstSI+rep->nSI;
    if ((!xkb->compat)&&
	(XkbAllocCompatMap(xkb,XkbAllCompatMask,i)!=Success))
	return BadAlloc;

    if (rep->nSI!=0) {
	XkbSymInterpretRec *syms;
	xkbSymInterpretWireDesc *wire;

	wire= (xkbSymInterpretWireDesc *)_XkbGetReadBufferPtr(&buf,
				   rep->nSI*SIZEOF(xkbSymInterpretWireDesc));
	if (wire==NULL)
	    goto BAILOUT;
	syms= &xkb->compat->sym_interpret[rep->firstSI];

	for (i=0;i<rep->nSI;i++,syms++,wire++) {
	    syms->sym= wire->sym;
	    syms->mods= wire->mods;
	    syms->match= wire->match;
	    syms->virtual_mod= wire->virtualMod;
	    syms->flags= wire->flags;
	    syms->act= *((XkbAnyAction *)&wire->act);
	}
	xkb->compat->num_si+= rep->nSI;
    }

    if (rep->groups&XkbAllGroupsMask) {
	register unsigned	bit,nGroups;
	xkbModsWireDesc * 	wire;
	for (i=0,nGroups=0,bit=1;i<XkbNumKbdGroups;i++,bit<<=1) {
	    if (rep->groups&bit)
		nGroups++;
	}
	wire= (xkbModsWireDesc *)_XkbGetReadBufferPtr(&buf,
				  nGroups*SIZEOF(xkbModsWireDesc));
	if (wire==NULL)
	    goto BAILOUT;
	for (i=0,bit=1;i<XkbNumKbdGroups;i++,bit<<=1) {
	    if ((rep->groups&bit)==0)
		continue;
	    xkb->compat->groups[i].mask= wire->mask;
	    xkb->compat->groups[i].real_mods= wire->realMods;
	    xkb->compat->groups[i].vmods= wire->virtualMods;
	    wire++;
	}
    }
    i= _XkbFreeReadBuffer(&buf);
    if (i)
	fprintf(stderr,"CompatMapReply! Bad length (%d extra bytes)\n",i);
    if (i || buf.error)
	return BadLength;
    return Success;
BAILOUT:
    _XkbFreeReadBuffer(&buf);
    return BadLength;
}