Touch: Fix duplicate TouchBegin selection with virtual devices
Given the following scenario: 1) client A selects for TouchBegin on window W for device D 2) client B selects for TouchBegin on window W for XIAllDevices 3) client C selects for TouchBegin on window W with device E Step 3 will fail with BadImplementation, because attempting to look up XIAllDevices or XIAllMasterDevices with dixLookupDevices doesn't work. This should succeed (or, if it was selecting for device D, fail with BadAccess as it would be a duplicate selection). Fix this by performing the appropriate lookup for virtual devices. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Cc: Peter Hutterer <peter.hutterer@who-t.net> Cc: Chase Douglas <chase.douglas@ubuntu.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
3e6358ee6c
commit
314776eb36
|
@ -180,8 +180,13 @@ ProcXISelectEvents(ClientPtr client)
|
|||
if (CLIENT_ID(iclient->resource) == client->index)
|
||||
continue;
|
||||
|
||||
dixLookupDevice(&tmp, evmask->deviceid, serverClient,
|
||||
DixReadAccess);
|
||||
if (evmask->deviceid == XIAllDevices)
|
||||
tmp = inputInfo.all_devices;
|
||||
else if (evmask->deviceid == XIAllMasterDevices)
|
||||
tmp = inputInfo.all_master_devices;
|
||||
else
|
||||
dixLookupDevice(&tmp, evmask->deviceid, serverClient,
|
||||
DixReadAccess);
|
||||
if (!tmp)
|
||||
return BadImplementation; /* this shouldn't happen */
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user