diff options
author | Daniel Stone <daniel@fooishbar.org> | 2008-04-16 19:15:30 +0300 |
---|---|---|
committer | Daniel Stone <daniel@fooishbar.org> | 2009-01-22 15:08:55 +1100 |
commit | f062e90a95f9b7ae5458ef2100615e8ace9b66a7 (patch) | |
tree | 3a75bce36e2a95e085a268186c8a268bddd9bccf /Xi/getmmap.c | |
parent | cf6a2fc2bd94b392cfea120444d5e032d26f1d37 (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.c | 28 |
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; } |