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:
Enrico Weigelt, metux IT consult 2024-07-25 15:32:06 +02:00
parent 5316da3795
commit 5de54750ec

View File

@ -5830,7 +5830,7 @@ ProcXkbGetKbdByName(ClientPtr client)
unsigned char *str;
char mapFile[PATH_MAX] = { 0 };
unsigned len;
unsigned fwant, fneed, reported;
unsigned fwant, fneed;
int status;
Bool geom_changed;
XkbSrvLedInfoPtr old_sli;
@ -5917,34 +5917,30 @@ ProcXkbGetKbdByName(ClientPtr client)
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. */
.found = XkbDDXLoadKeymapByNames(dev, &names, fwant, fneed, &new,
mapFile, PATH_MAX),
};
/* We pass dev in here so we can get the old names out if needed. */
unsigned int found = XkbDDXLoadKeymapByNames(dev, &names, fwant, fneed, &new,
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;
if (new == NULL)
rep.reported = 0;
else {
if (new) {
if (stuff->load)
rep.loaded = TRUE;
loaded = TRUE;
if (stuff->load ||
((rep.reported & XkbGBN_SymbolsMask) && (new->compat))) {
((reported & XkbGBN_SymbolsMask) && (new->compat))) {
XkbChangesRec changes = { 0 };
XkbUpdateDescActions(new,
new->min_key_code, XkbNumKeys(new), &changes);
}
if (new->map == NULL)
rep.reported &= ~(XkbGBN_SymbolsMask | XkbGBN_TypesMask);
else if (rep.reported & (XkbGBN_SymbolsMask | XkbGBN_TypesMask)) {
reported &= ~(XkbGBN_SymbolsMask | XkbGBN_TypesMask);
else if (reported & (XkbGBN_SymbolsMask | XkbGBN_TypesMask)) {
mrep.type = X_Reply;
mrep.deviceID = dev->id;
mrep.sequenceNumber = client->sequence;
@ -5955,16 +5951,16 @@ ProcXkbGetKbdByName(ClientPtr client)
mrep.totalSyms = mrep.totalActs =
mrep.totalKeyBehaviors = mrep.totalKeyExplicit =
mrep.totalModMapKeys = mrep.totalVModMapKeys = 0;
if (rep.reported & (XkbGBN_TypesMask | XkbGBN_ClientSymbolsMask)) {
if (reported & (XkbGBN_TypesMask | XkbGBN_ClientSymbolsMask)) {
mrep.present |= XkbKeyTypesMask;
mrep.nTypes = mrep.totalTypes = new->map->num_types;
}
if (rep.reported & XkbGBN_ClientSymbolsMask) {
if (reported & XkbGBN_ClientSymbolsMask) {
mrep.present |= (XkbKeySymsMask | XkbModifierMapMask);
mrep.firstKeySym = mrep.firstModMapKey = new->min_key_code;
mrep.nKeySyms = mrep.nModMapKeys = XkbNumKeys(new);
}
if (rep.reported & XkbGBN_ServerSymbolsMask) {
if (reported & XkbGBN_ServerSymbolsMask) {
mrep.present |= XkbAllServerInfoMask;
mrep.virtualMods = ~0;
mrep.firstKeyAct = mrep.firstKeyBehavior =
@ -5975,38 +5971,38 @@ ProcXkbGetKbdByName(ClientPtr client)
mrep.nVModMapKeys = XkbNumKeys(new);
}
XkbComputeGetMapReplySize(new, &mrep);
rep.length += SIZEOF(xGenericReply) / 4 + mrep.length;
payload_length += SIZEOF(xGenericReply) / 4 + mrep.length;
}
if (new->compat == NULL)
rep.reported &= ~XkbGBN_CompatMapMask;
else if (rep.reported & XkbGBN_CompatMapMask) {
reported &= ~XkbGBN_CompatMapMask;
else if (reported & XkbGBN_CompatMapMask) {
crep.type = X_Reply;
crep.deviceID = dev->id;
crep.sequenceNumber = client->sequence;
crep.groups = XkbAllGroupsMask;
crep.nSI = crep.nTotalSI = new->compat->num_si;
XkbComputeGetCompatMapReplySize(new->compat, &crep);
rep.length += SIZEOF(xGenericReply) / 4 + crep.length;
payload_length += SIZEOF(xGenericReply) / 4 + crep.length;
}
if (new->indicators == NULL)
rep.reported &= ~XkbGBN_IndicatorMapMask;
else if (rep.reported & XkbGBN_IndicatorMapMask) {
reported &= ~XkbGBN_IndicatorMapMask;
else if (reported & XkbGBN_IndicatorMapMask) {
irep.type = X_Reply;
irep.deviceID = dev->id;
irep.sequenceNumber = client->sequence;
irep.which = XkbAllIndicatorsMask;
XkbComputeGetIndicatorMapReplySize(new->indicators, &irep);
rep.length += SIZEOF(xGenericReply) / 4 + irep.length;
payload_length += SIZEOF(xGenericReply) / 4 + irep.length;
}
if (new->names == NULL)
rep.reported &= ~(XkbGBN_OtherNamesMask | XkbGBN_KeyNamesMask);
else if (rep.reported & (XkbGBN_OtherNamesMask | XkbGBN_KeyNamesMask)) {
reported &= ~(XkbGBN_OtherNamesMask | XkbGBN_KeyNamesMask);
else if (reported & (XkbGBN_OtherNamesMask | XkbGBN_KeyNamesMask)) {
nrep.type = X_Reply;
nrep.deviceID = dev->id;
nrep.sequenceNumber = client->sequence;
nrep.minKeyCode = new->min_key_code;
nrep.maxKeyCode = new->max_key_code;
if (rep.reported & XkbGBN_OtherNamesMask) {
if (reported & XkbGBN_OtherNamesMask) {
nrep.which = XkbAllNamesMask;
if (new->map != NULL)
nrep.nTypes = new->map->num_types;
@ -6015,7 +6011,7 @@ ProcXkbGetKbdByName(ClientPtr client)
nrep.indicators = XkbAllIndicatorsMask;
nrep.nRadioGroups = new->names->num_rg;
}
if (rep.reported & XkbGBN_KeyNamesMask) {
if (reported & XkbGBN_KeyNamesMask) {
nrep.which |= XkbKeyNamesMask;
nrep.firstKey = new->min_key_code;
nrep.nKeys = XkbNumKeys(new);
@ -6027,21 +6023,32 @@ ProcXkbGetKbdByName(ClientPtr client)
nrep.which &= ~(XkbKeyNamesMask | XkbKeyAliasesMask);
}
XkbComputeGetNamesReplySize(new, &nrep);
rep.length += SIZEOF(xGenericReply) / 4 + nrep.length;
payload_length += SIZEOF(xGenericReply) / 4 + nrep.length;
}
if (new->geom == NULL)
rep.reported &= ~XkbGBN_GeometryMask;
else if (rep.reported & XkbGBN_GeometryMask) {
reported &= ~XkbGBN_GeometryMask;
else if (reported & XkbGBN_GeometryMask) {
grep.type = X_Reply;
grep.deviceID = dev->id;
grep.sequenceNumber = client->sequence;
grep.found = TRUE;
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) {
swaps(&rep.sequenceNumber);
swapl(&rep.length);
@ -6059,7 +6066,8 @@ ProcXkbGetKbdByName(ClientPtr client)
XkbSendNames(client, new, nrep);
if (reported & XkbGBN_GeometryMask)
XkbSendGeometry(client, new->geom, grep);
if (rep.loaded) {
if (loaded) {
XkbDescPtr old_xkb;
old_xkb = xkb;