示例#1
0
int
XkbCFBindMods(XkbConfigRtrnPtr rtrn, XkbDescPtr xkb)
{
    register int n, v;
    Atom name;
    XkbConfigUnboundModPtr mod;
    int missing;

    if (rtrn->num_unbound_mods < 1)
        return 0;
    if ((xkb == NULL) || (xkb->names == NULL))
        return -1;

    missing = 0;
    for (n = 0, mod = rtrn->unbound_mods; n < rtrn->num_unbound_mods;
         n++, mod++) {
        if (mod->name != NULL) {
            name = XkbInternAtom(xkb->dpy, mod->name, True);
            if (name == None)
                continue;
            for (v = 0; v < XkbNumVirtualMods; v++) {
                if (xkb->names->vmods[v] == name) {
                    mod->vmods = (1 << v);
                    _XkbFree(mod->name);
                    mod->name = NULL;
                    break;
                }
            }
            if (mod->name != NULL)
                missing++;
        }
    }
    return missing;
}
示例#2
0
void
ClearIndicatorMapInfo(Display * dpy, LEDInfo * info)
{
    info->name = XkbInternAtom(dpy, "default", False);
    info->indicator = _LED_NotBound;
    info->flags = info->which_mods = info->real_mods = 0;
    info->vmods = 0;
    info->which_groups = info->groups = 0;
    info->ctrls = 0;
    return;
}
示例#3
0
Atom
XkbChangeAtomDisplay(Display *oldDpy, Display *newDpy, Atom atm)
{
    char *tmp;

    if (atm != None) {
        tmp = XkbAtomGetString(oldDpy, atm);
        if (tmp != NULL)
            return XkbInternAtom(newDpy, tmp, False);
    }
    return None;
}
示例#4
0
int
FindKeypadVMod(XkbDescPtr xkb)
{
Atom name;
ExprResult rtrn;

    name= XkbInternAtom(xkb->dpy,"NumLock",False);
    if ((xkb)&&
	LookupVModIndex((XPointer)xkb,None,name,TypeInt,&rtrn)) {
	return rtrn.ival;
    }
    return -1;
}
示例#5
0
static Bool
DefaultApplyNames(XkbConfigRtrnPtr rtrn, XkbDescPtr xkb)
{
    char *str;

    if (XkbAllocNames(xkb, XkbComponentNamesMask, 0, 0) != Success)
        return False;
    if ((str = rtrn->keycodes) != NULL) {
        xkb->names->keycodes = XkbInternAtom(xkb->dpy, str, False);
        _XkbFree(str);
        rtrn->keycodes = NULL;
    }
    if ((str = rtrn->geometry) != NULL) {
        xkb->names->geometry = XkbInternAtom(xkb->dpy, str, False);
        _XkbFree(str);
        rtrn->geometry = NULL;
    }
    if ((str = rtrn->symbols) != NULL) {
        xkb->names->symbols = XkbInternAtom(xkb->dpy, str, False);
        _XkbFree(str);
        rtrn->symbols = NULL;
    }
    if ((str = rtrn->phys_symbols) != NULL) {
        xkb->names->phys_symbols = XkbInternAtom(xkb->dpy, str, False);
        _XkbFree(str);
        rtrn->phys_symbols = NULL;
    }
    if ((str = rtrn->types) != NULL) {
        xkb->names->types = XkbInternAtom(xkb->dpy, str, False);
        _XkbFree(str);
        rtrn->types = NULL;
    }
    if ((str = rtrn->compat) != NULL) {
        xkb->names->compat = XkbInternAtom(xkb->dpy, str, False);
        _XkbFree(str);
        rtrn->compat = NULL;
    }
    return True;
}
示例#6
0
Bool
HandleVModDef(VModDef *stmt,unsigned mergeMode,VModInfo *info)
{
register int 	i,bit,nextFree;
ExprResult 	mod;
XkbServerMapPtr	srv;
XkbNamesPtr	names;
Atom		stmtName;
    
    srv= info->xkb->server;
    names= info->xkb->names;
    stmtName= XkbInternAtom(info->xkb->dpy,XkbAtomGetString(NULL,stmt->name),
    									False);
    for (i=0,bit=1,nextFree= -1;i<XkbNumVirtualMods;i++,bit<<=1) {
	if (info->defined&bit) {
	    if (names->vmods[i]==stmtName) {	/* already defined */
		info->available|= bit;
		if (stmt->value==NULL)
		    return True;
		else {
		    char *str1,*str2 = "";
		    if (!ExprResolveModMask(stmt->value,&mod,NULL,NULL)) {
			str1= XkbAtomText(NULL,stmt->name,XkbMessage);
			ACTION1("Declaration of %s ignored\n",str1);
			return False;
		    }
		    if (mod.uval==srv->vmods[i])
			return True;

		    str1= XkbAtomText(NULL,stmt->name,XkbMessage);
		    WARN1("Virtual modifier %s multiply defined\n",str1);
		    str1= XkbModMaskText(srv->vmods[i],XkbCFile);
		    if (mergeMode==MergeOverride) {
			str2= str1;
			str1= XkbModMaskText(mod.uval,XkbCFile);
		    }
		    ACTION2("Using %s, ignoring %s\n",str1,str2);
		    if (mergeMode==MergeOverride)
			srv->vmods[i]= mod.uval;
		    return True;
		}
	    }
	}
	else if (nextFree<0)
	    nextFree= i;
    }
    if (nextFree<0) {
	ERROR1("Too many virtual modifiers defined (maximum %d)\n",
						XkbNumVirtualMods);
	ACTION("Exiting\n");
	return False;
    }
    info->defined|= (1<<nextFree);
    info->newlyDefined|= (1<<nextFree);
    info->available|= (1<<nextFree);
    names->vmods[nextFree]= stmtName;
    if (stmt->value==NULL)
	return True;
    if (ExprResolveModMask(stmt->value,&mod,NULL,NULL)) {
	srv->vmods[nextFree]= mod.uval;
	return True;
    }
    ACTION1("Declaration of %s ignored\n",
    				XkbAtomText(NULL,stmt->name,XkbMessage));
    return False;
}