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; }
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; }
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; }
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; }
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; }
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; }