summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Jaeger <thjaeger@gmail.com>2009-01-05 01:26:42 -0500
committerKeith Packard <keithp@keithp.com>2009-01-30 17:13:28 -0800
commit3441917008021fb13cf86fa619970859d927e17a (patch)
tree223d8e76cd73dfa7f988590813f12cad9628f13c
parent364bcbea48d5e49bef8d36f6724e2702cbb4b1af (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)
-rw-r--r--dix/devices.c32
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;