xkb: simplify core device loop in GetKeyboardByName

This commit is contained in:
Daniel Stone 2006-10-06 16:12:36 +03:00 committed by Daniel Stone
parent 4b6e2f12f7
commit ab56f0c5b5

View File

@ -570,7 +570,7 @@ ProcXkbLatchLockState(ClientPtr client)
status = XkbLatchModifiers(tmpd, stuff->affectModLatches, status = XkbLatchModifiers(tmpd, stuff->affectModLatches,
stuff->modLatches); stuff->modLatches);
if (status == Success && stuff->latchGroup) if (status == Success && stuff->latchGroup)
status = XkbLatchGroup(tmp, stuff->groupLatch); status = XkbLatchGroup(tmpd, stuff->groupLatch);
if (status != Success) if (status != Success)
return status; return status;
@ -5111,6 +5111,8 @@ ProcXkbGetKbdByName(ClientPtr client)
unsigned fwant,fneed,reported; unsigned fwant,fneed,reported;
int status; int status;
Bool geom_changed; Bool geom_changed;
XkbSrvLedInfoPtr old_sli;
XkbSrvLedInfoPtr sli;
REQUEST(xkbGetKbdByNameReq); REQUEST(xkbGetKbdByNameReq);
REQUEST_AT_LEAST_SIZE(xkbGetKbdByNameReq); REQUEST_AT_LEAST_SIZE(xkbGetKbdByNameReq);
@ -5379,45 +5381,27 @@ ProcXkbGetKbdByName(ClientPtr client)
} }
xkb->ctrls->num_groups= nTG; xkb->ctrls->num_groups= nTG;
memcpy(dev->key->modifierMap,xkb->map->modmap,xkb->max_key_code+1); for (tmpd = inputInfo.devices; tmpd; tmpd = tmpd->next) {
XkbUpdateCoreDescription(dev,True); if ((dev == inputInfo.keyboard && tmpd->key && tmpd->coreEvents) ||
tmpd == inputInfo.keyboard) {
if (dev->kbdfeed && dev->kbdfeed->xkb_sli) { memcpy(tmpd->key->modifierMap, xkb->map->modmap,
XkbSrvLedInfoPtr old_sli; xkb->max_key_code + 1);
XkbSrvLedInfoPtr sli; if (dev != inputInfo.keyboard)
old_sli = dev->kbdfeed->xkb_sli;
dev->kbdfeed->xkb_sli = NULL;
sli = XkbAllocSrvLedInfo(dev,dev->kbdfeed,NULL,0);
if (sli) {
sli->explicitState = old_sli->explicitState;
sli->effectiveState = old_sli->effectiveState;
}
dev->kbdfeed->xkb_sli = sli;
XkbFreeSrvLedInfo(old_sli);
}
if (dev == inputInfo.keyboard) {
for (tmpd = inputInfo.devices; tmpd; tmpd = tmpd->next) {
if (tmpd->key && tmpd->coreEvents) {
memcpy(tmpd->key->modifierMap, xkb->map->modmap,
xkb->max_key_code + 1);
XkbCopyKeymap(dev->key->xkbInfo->desc, XkbCopyKeymap(dev->key->xkbInfo->desc,
tmpd->key->xkbInfo->desc, True); tmpd->key->xkbInfo->desc, True);
XkbUpdateCoreDescription(tmpd, True); XkbUpdateCoreDescription(tmpd, True);
if (tmpd->kbdfeed && tmpd->kbdfeed->xkb_sli) { if (tmpd->kbdfeed && tmpd->kbdfeed->xkb_sli) {
XkbSrvLedInfoPtr old_sli; old_sli = tmpd->kbdfeed->xkb_sli;
XkbSrvLedInfoPtr sli; tmpd->kbdfeed->xkb_sli = NULL;
old_sli = tmpd->kbdfeed->xkb_sli; sli = XkbAllocSrvLedInfo(tmpd, tmpd->kbdfeed, NULL, 0);
tmpd->kbdfeed->xkb_sli = NULL; if (sli) {
sli = XkbAllocSrvLedInfo(tmpd, tmpd->kbdfeed, NULL, 0); sli->explicitState = old_sli->explicitState;
if (sli) { sli->effectiveState = old_sli->effectiveState;
sli->explicitState = old_sli->explicitState;
sli->effectiveState = old_sli->effectiveState;
}
tmpd->kbdfeed->xkb_sli = sli;
XkbFreeSrvLedInfo(old_sli);
} }
tmpd->kbdfeed->xkb_sli = sli;
XkbFreeSrvLedInfo(old_sli);
} }
} }
} }