xkb: ProcXkbGetKbdByName() simplify reply struct initialization
Move down the declaration of the reply struct, right before swapping and sending and use static initialization. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
parent
5316da3795
commit
5de54750ec
84
xkb/xkb.c
84
xkb/xkb.c
|
@ -5830,7 +5830,7 @@ ProcXkbGetKbdByName(ClientPtr client)
|
||||||
unsigned char *str;
|
unsigned char *str;
|
||||||
char mapFile[PATH_MAX] = { 0 };
|
char mapFile[PATH_MAX] = { 0 };
|
||||||
unsigned len;
|
unsigned len;
|
||||||
unsigned fwant, fneed, reported;
|
unsigned fwant, fneed;
|
||||||
int status;
|
int status;
|
||||||
Bool geom_changed;
|
Bool geom_changed;
|
||||||
XkbSrvLedInfoPtr old_sli;
|
XkbSrvLedInfoPtr old_sli;
|
||||||
|
@ -5917,34 +5917,30 @@ ProcXkbGetKbdByName(ClientPtr client)
|
||||||
fwant |= XkmIndicatorsIndex;
|
fwant |= XkmIndicatorsIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
xkbGetKbdByNameReply rep = {
|
|
||||||
.type = X_Reply,
|
|
||||||
.deviceID = dev->id,
|
|
||||||
.sequenceNumber = client->sequence,
|
|
||||||
.minKeyCode = xkb->min_key_code,
|
|
||||||
.maxKeyCode = xkb->max_key_code,
|
|
||||||
.reported = XkbConvertGetByNameComponents(FALSE, fwant | fneed),
|
|
||||||
/* We pass dev in here so we can get the old names out if needed. */
|
/* We pass dev in here so we can get the old names out if needed. */
|
||||||
.found = XkbDDXLoadKeymapByNames(dev, &names, fwant, fneed, &new,
|
unsigned int found = XkbDDXLoadKeymapByNames(dev, &names, fwant, fneed, &new,
|
||||||
mapFile, PATH_MAX),
|
mapFile, PATH_MAX);
|
||||||
};
|
unsigned int reported = XkbConvertGetByNameComponents(FALSE, fwant | fneed);
|
||||||
|
if (new == NULL)
|
||||||
|
reported = 0;
|
||||||
|
|
||||||
|
int payload_length = 0;
|
||||||
|
Bool loaded = 0;
|
||||||
|
|
||||||
stuff->want |= stuff->need;
|
stuff->want |= stuff->need;
|
||||||
if (new == NULL)
|
if (new) {
|
||||||
rep.reported = 0;
|
|
||||||
else {
|
|
||||||
if (stuff->load)
|
if (stuff->load)
|
||||||
rep.loaded = TRUE;
|
loaded = TRUE;
|
||||||
if (stuff->load ||
|
if (stuff->load ||
|
||||||
((rep.reported & XkbGBN_SymbolsMask) && (new->compat))) {
|
((reported & XkbGBN_SymbolsMask) && (new->compat))) {
|
||||||
XkbChangesRec changes = { 0 };
|
XkbChangesRec changes = { 0 };
|
||||||
XkbUpdateDescActions(new,
|
XkbUpdateDescActions(new,
|
||||||
new->min_key_code, XkbNumKeys(new), &changes);
|
new->min_key_code, XkbNumKeys(new), &changes);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new->map == NULL)
|
if (new->map == NULL)
|
||||||
rep.reported &= ~(XkbGBN_SymbolsMask | XkbGBN_TypesMask);
|
reported &= ~(XkbGBN_SymbolsMask | XkbGBN_TypesMask);
|
||||||
else if (rep.reported & (XkbGBN_SymbolsMask | XkbGBN_TypesMask)) {
|
else if (reported & (XkbGBN_SymbolsMask | XkbGBN_TypesMask)) {
|
||||||
mrep.type = X_Reply;
|
mrep.type = X_Reply;
|
||||||
mrep.deviceID = dev->id;
|
mrep.deviceID = dev->id;
|
||||||
mrep.sequenceNumber = client->sequence;
|
mrep.sequenceNumber = client->sequence;
|
||||||
|
@ -5955,16 +5951,16 @@ ProcXkbGetKbdByName(ClientPtr client)
|
||||||
mrep.totalSyms = mrep.totalActs =
|
mrep.totalSyms = mrep.totalActs =
|
||||||
mrep.totalKeyBehaviors = mrep.totalKeyExplicit =
|
mrep.totalKeyBehaviors = mrep.totalKeyExplicit =
|
||||||
mrep.totalModMapKeys = mrep.totalVModMapKeys = 0;
|
mrep.totalModMapKeys = mrep.totalVModMapKeys = 0;
|
||||||
if (rep.reported & (XkbGBN_TypesMask | XkbGBN_ClientSymbolsMask)) {
|
if (reported & (XkbGBN_TypesMask | XkbGBN_ClientSymbolsMask)) {
|
||||||
mrep.present |= XkbKeyTypesMask;
|
mrep.present |= XkbKeyTypesMask;
|
||||||
mrep.nTypes = mrep.totalTypes = new->map->num_types;
|
mrep.nTypes = mrep.totalTypes = new->map->num_types;
|
||||||
}
|
}
|
||||||
if (rep.reported & XkbGBN_ClientSymbolsMask) {
|
if (reported & XkbGBN_ClientSymbolsMask) {
|
||||||
mrep.present |= (XkbKeySymsMask | XkbModifierMapMask);
|
mrep.present |= (XkbKeySymsMask | XkbModifierMapMask);
|
||||||
mrep.firstKeySym = mrep.firstModMapKey = new->min_key_code;
|
mrep.firstKeySym = mrep.firstModMapKey = new->min_key_code;
|
||||||
mrep.nKeySyms = mrep.nModMapKeys = XkbNumKeys(new);
|
mrep.nKeySyms = mrep.nModMapKeys = XkbNumKeys(new);
|
||||||
}
|
}
|
||||||
if (rep.reported & XkbGBN_ServerSymbolsMask) {
|
if (reported & XkbGBN_ServerSymbolsMask) {
|
||||||
mrep.present |= XkbAllServerInfoMask;
|
mrep.present |= XkbAllServerInfoMask;
|
||||||
mrep.virtualMods = ~0;
|
mrep.virtualMods = ~0;
|
||||||
mrep.firstKeyAct = mrep.firstKeyBehavior =
|
mrep.firstKeyAct = mrep.firstKeyBehavior =
|
||||||
|
@ -5975,38 +5971,38 @@ ProcXkbGetKbdByName(ClientPtr client)
|
||||||
mrep.nVModMapKeys = XkbNumKeys(new);
|
mrep.nVModMapKeys = XkbNumKeys(new);
|
||||||
}
|
}
|
||||||
XkbComputeGetMapReplySize(new, &mrep);
|
XkbComputeGetMapReplySize(new, &mrep);
|
||||||
rep.length += SIZEOF(xGenericReply) / 4 + mrep.length;
|
payload_length += SIZEOF(xGenericReply) / 4 + mrep.length;
|
||||||
}
|
}
|
||||||
if (new->compat == NULL)
|
if (new->compat == NULL)
|
||||||
rep.reported &= ~XkbGBN_CompatMapMask;
|
reported &= ~XkbGBN_CompatMapMask;
|
||||||
else if (rep.reported & XkbGBN_CompatMapMask) {
|
else if (reported & XkbGBN_CompatMapMask) {
|
||||||
crep.type = X_Reply;
|
crep.type = X_Reply;
|
||||||
crep.deviceID = dev->id;
|
crep.deviceID = dev->id;
|
||||||
crep.sequenceNumber = client->sequence;
|
crep.sequenceNumber = client->sequence;
|
||||||
crep.groups = XkbAllGroupsMask;
|
crep.groups = XkbAllGroupsMask;
|
||||||
crep.nSI = crep.nTotalSI = new->compat->num_si;
|
crep.nSI = crep.nTotalSI = new->compat->num_si;
|
||||||
XkbComputeGetCompatMapReplySize(new->compat, &crep);
|
XkbComputeGetCompatMapReplySize(new->compat, &crep);
|
||||||
rep.length += SIZEOF(xGenericReply) / 4 + crep.length;
|
payload_length += SIZEOF(xGenericReply) / 4 + crep.length;
|
||||||
}
|
}
|
||||||
if (new->indicators == NULL)
|
if (new->indicators == NULL)
|
||||||
rep.reported &= ~XkbGBN_IndicatorMapMask;
|
reported &= ~XkbGBN_IndicatorMapMask;
|
||||||
else if (rep.reported & XkbGBN_IndicatorMapMask) {
|
else if (reported & XkbGBN_IndicatorMapMask) {
|
||||||
irep.type = X_Reply;
|
irep.type = X_Reply;
|
||||||
irep.deviceID = dev->id;
|
irep.deviceID = dev->id;
|
||||||
irep.sequenceNumber = client->sequence;
|
irep.sequenceNumber = client->sequence;
|
||||||
irep.which = XkbAllIndicatorsMask;
|
irep.which = XkbAllIndicatorsMask;
|
||||||
XkbComputeGetIndicatorMapReplySize(new->indicators, &irep);
|
XkbComputeGetIndicatorMapReplySize(new->indicators, &irep);
|
||||||
rep.length += SIZEOF(xGenericReply) / 4 + irep.length;
|
payload_length += SIZEOF(xGenericReply) / 4 + irep.length;
|
||||||
}
|
}
|
||||||
if (new->names == NULL)
|
if (new->names == NULL)
|
||||||
rep.reported &= ~(XkbGBN_OtherNamesMask | XkbGBN_KeyNamesMask);
|
reported &= ~(XkbGBN_OtherNamesMask | XkbGBN_KeyNamesMask);
|
||||||
else if (rep.reported & (XkbGBN_OtherNamesMask | XkbGBN_KeyNamesMask)) {
|
else if (reported & (XkbGBN_OtherNamesMask | XkbGBN_KeyNamesMask)) {
|
||||||
nrep.type = X_Reply;
|
nrep.type = X_Reply;
|
||||||
nrep.deviceID = dev->id;
|
nrep.deviceID = dev->id;
|
||||||
nrep.sequenceNumber = client->sequence;
|
nrep.sequenceNumber = client->sequence;
|
||||||
nrep.minKeyCode = new->min_key_code;
|
nrep.minKeyCode = new->min_key_code;
|
||||||
nrep.maxKeyCode = new->max_key_code;
|
nrep.maxKeyCode = new->max_key_code;
|
||||||
if (rep.reported & XkbGBN_OtherNamesMask) {
|
if (reported & XkbGBN_OtherNamesMask) {
|
||||||
nrep.which = XkbAllNamesMask;
|
nrep.which = XkbAllNamesMask;
|
||||||
if (new->map != NULL)
|
if (new->map != NULL)
|
||||||
nrep.nTypes = new->map->num_types;
|
nrep.nTypes = new->map->num_types;
|
||||||
|
@ -6015,7 +6011,7 @@ ProcXkbGetKbdByName(ClientPtr client)
|
||||||
nrep.indicators = XkbAllIndicatorsMask;
|
nrep.indicators = XkbAllIndicatorsMask;
|
||||||
nrep.nRadioGroups = new->names->num_rg;
|
nrep.nRadioGroups = new->names->num_rg;
|
||||||
}
|
}
|
||||||
if (rep.reported & XkbGBN_KeyNamesMask) {
|
if (reported & XkbGBN_KeyNamesMask) {
|
||||||
nrep.which |= XkbKeyNamesMask;
|
nrep.which |= XkbKeyNamesMask;
|
||||||
nrep.firstKey = new->min_key_code;
|
nrep.firstKey = new->min_key_code;
|
||||||
nrep.nKeys = XkbNumKeys(new);
|
nrep.nKeys = XkbNumKeys(new);
|
||||||
|
@ -6027,21 +6023,32 @@ ProcXkbGetKbdByName(ClientPtr client)
|
||||||
nrep.which &= ~(XkbKeyNamesMask | XkbKeyAliasesMask);
|
nrep.which &= ~(XkbKeyNamesMask | XkbKeyAliasesMask);
|
||||||
}
|
}
|
||||||
XkbComputeGetNamesReplySize(new, &nrep);
|
XkbComputeGetNamesReplySize(new, &nrep);
|
||||||
rep.length += SIZEOF(xGenericReply) / 4 + nrep.length;
|
payload_length += SIZEOF(xGenericReply) / 4 + nrep.length;
|
||||||
}
|
}
|
||||||
if (new->geom == NULL)
|
if (new->geom == NULL)
|
||||||
rep.reported &= ~XkbGBN_GeometryMask;
|
reported &= ~XkbGBN_GeometryMask;
|
||||||
else if (rep.reported & XkbGBN_GeometryMask) {
|
else if (reported & XkbGBN_GeometryMask) {
|
||||||
grep.type = X_Reply;
|
grep.type = X_Reply;
|
||||||
grep.deviceID = dev->id;
|
grep.deviceID = dev->id;
|
||||||
grep.sequenceNumber = client->sequence;
|
grep.sequenceNumber = client->sequence;
|
||||||
grep.found = TRUE;
|
grep.found = TRUE;
|
||||||
XkbComputeGetGeometryReplySize(new->geom, &grep, None);
|
XkbComputeGetGeometryReplySize(new->geom, &grep, None);
|
||||||
rep.length += SIZEOF(xGenericReply) / 4 + grep.length;
|
payload_length += SIZEOF(xGenericReply) / 4 + grep.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
reported = rep.reported;
|
xkbGetKbdByNameReply rep = {
|
||||||
|
.type = X_Reply,
|
||||||
|
.deviceID = dev->id,
|
||||||
|
.sequenceNumber = client->sequence,
|
||||||
|
.minKeyCode = xkb->min_key_code,
|
||||||
|
.maxKeyCode = xkb->max_key_code,
|
||||||
|
.reported = reported,
|
||||||
|
.found = found,
|
||||||
|
.loaded = loaded,
|
||||||
|
.length = payload_length,
|
||||||
|
};
|
||||||
|
|
||||||
if (client->swapped) {
|
if (client->swapped) {
|
||||||
swaps(&rep.sequenceNumber);
|
swaps(&rep.sequenceNumber);
|
||||||
swapl(&rep.length);
|
swapl(&rep.length);
|
||||||
|
@ -6059,7 +6066,8 @@ ProcXkbGetKbdByName(ClientPtr client)
|
||||||
XkbSendNames(client, new, nrep);
|
XkbSendNames(client, new, nrep);
|
||||||
if (reported & XkbGBN_GeometryMask)
|
if (reported & XkbGBN_GeometryMask)
|
||||||
XkbSendGeometry(client, new->geom, grep);
|
XkbSendGeometry(client, new->geom, grep);
|
||||||
if (rep.loaded) {
|
|
||||||
|
if (loaded) {
|
||||||
XkbDescPtr old_xkb;
|
XkbDescPtr old_xkb;
|
||||||
|
|
||||||
old_xkb = xkb;
|
old_xkb = xkb;
|
||||||
|
|
Loading…
Reference in New Issue