summaryrefslogtreecommitdiff
path: root/Xi/getmmap.c
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2008-04-16 19:15:30 +0300
committerDaniel Stone <daniel@fooishbar.org>2009-01-22 15:08:55 +1100
commitf062e90a95f9b7ae5458ef2100615e8ace9b66a7 (patch)
tree3a75bce36e2a95e085a268186c8a268bddd9bccf /Xi/getmmap.c
parentcf6a2fc2bd94b392cfea120444d5e032d26f1d37 (diff)
Input: Remove modifierKeyMap
Since modifierKeyMap is generated from modifierMap, just remove it, and only generate it when we need to send the modifier map to the client. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'Xi/getmmap.c')
-rw-r--r--Xi/getmmap.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/Xi/getmmap.c b/Xi/getmmap.c
index 0ae2ccc52..ddf27a5f0 100644
--- a/Xi/getmmap.c
+++ b/Xi/getmmap.c
@@ -87,36 +87,34 @@ SProcXGetDeviceModifierMapping(ClientPtr client)
int
ProcXGetDeviceModifierMapping(ClientPtr client)
{
- CARD8 maxkeys;
DeviceIntPtr dev;
xGetDeviceModifierMappingReply rep;
- KeyClassPtr kp;
- int rc;
+ KeyCode *modkeymap = NULL;
+ int ret, max_keys_per_mod;
REQUEST(xGetDeviceModifierMappingReq);
REQUEST_SIZE_MATCH(xGetDeviceModifierMappingReq);
- rc = dixLookupDevice(&dev, stuff->deviceid, client, DixGetAttrAccess);
- if (rc != Success)
- return rc;
+ ret = dixLookupDevice(&dev, stuff->deviceid, client, DixGetAttrAccess);
+ if (ret != Success)
+ return ret;
- kp = dev->key;
- if (kp == NULL)
- return BadMatch;
-
- maxkeys = kp->maxKeysPerModifier;
+ ret = generate_modkeymap(client, dev, &modkeymap, &max_keys_per_mod);
+ if (ret != Success)
+ return ret;
rep.repType = X_Reply;
rep.RepType = X_GetDeviceModifierMapping;
- rep.numKeyPerModifier = maxkeys;
+ rep.numKeyPerModifier = max_keys_per_mod;
rep.sequenceNumber = client->sequence;
/* length counts 4 byte quantities - there are 8 modifiers 1 byte big */
- rep.length = 2 * maxkeys;
+ rep.length = max_keys_per_mod << 1;
WriteReplyToClient(client, sizeof(xGetDeviceModifierMappingReply), &rep);
+ WriteToClient(client, max_keys_per_mod * 8, (char *) modkeymap);
+
+ xfree(modkeymap);
- /* Reply with the (modified by DDX) map that SetModifierMapping passed in */
- WriteToClient(client, 8 * maxkeys, (char *)kp->modifierKeyMap);
return Success;
}