diff options
author | Thomas Jaeger <thjaeger@gmail.com> | 2009-01-05 01:26:42 -0500 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2009-01-30 17:13:28 -0800 |
commit | 3441917008021fb13cf86fa619970859d927e17a (patch) | |
tree | 223d8e76cd73dfa7f988590813f12cad9628f13c /dix/devices.c | |
parent | 364bcbea48d5e49bef8d36f6724e2702cbb4b1af (diff) |
Don't alter device button maps in DoSetPointerMapping
Currently, if a device map differs from the core pointer map, then the
request may return MappingBusy, even though all the affected core
buttons are in the up state.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 3d549438c29004d78032ecc50ab45ca0e3f49623)
Diffstat (limited to 'dix/devices.c')
-rw-r--r-- | dix/devices.c | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/dix/devices.c b/dix/devices.c index 47e07f94f..0858f20cf 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -1831,36 +1831,23 @@ static int DoSetPointerMapping(ClientPtr client, DeviceIntPtr device, BYTE *map, int n) { int rc, i = 0; - DeviceIntPtr dev = NULL; if (!device || !device->button) return BadDevice; - for (dev = inputInfo.devices; dev; dev = dev->next) { - if ((dev->coreEvents || dev == inputInfo.pointer) && dev->button) { - rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixManageAccess); - if (rc != Success) - return rc; - } - } + rc = XaceHook(XACE_DEVICE_ACCESS, client, device, DixManageAccess); + if (rc != Success) + return rc; - for (dev = inputInfo.devices; dev; dev = dev->next) { - if ((dev->coreEvents || dev == inputInfo.pointer) && dev->button) { - for (i = 0; i < n; i++) { - if ((device->button->map[i + 1] != map[i]) && - BitIsOn(device->button->down, i + 1)) { - return MappingBusy; - } - } + for (i = 0; i < n; i++) { + if ((device->button->map[i + 1] != map[i]) && + BitIsOn(device->button->down, i + 1)) { + return MappingBusy; } } - for (dev = inputInfo.devices; dev; dev = dev->next) { - if ((dev->coreEvents || dev == inputInfo.pointer) && dev->button) { - for (i = 0; i < n; i++) - dev->button->map[i + 1] = map[i]; - } - } + for (i = 0; i < n; i++) + device->button->map[i + 1] = map[i]; return Success; } @@ -1917,7 +1904,6 @@ ProcSetPointerMapping(ClientPtr client) return Success; } - /* FIXME: Send mapping notifies for all the extended devices as well. */ SendMappingNotify(ptr, MappingPointer, 0, 0, client); WriteReplyToClient(client, sizeof(xSetPointerMappingReply), &rep); return Success; |