2f360aa76d
From IRC: 14:07 <Jasper> ajax, airlied: can we backport http://cgit.freedesktop.org/xorg/xserver/commit/?id=314776eb369ca2e438907795ae030dd743c281fc to the Fedora X server? It's causing some issues for GTK+ clients. 14:07 <ajax> i don't see why not
50 lines
2.0 KiB
Diff
50 lines
2.0 KiB
Diff
From 314776eb369ca2e438907795ae030dd743c281fc Mon Sep 17 00:00:00 2001
|
|
From: Daniel Stone <daniel@fooishbar.org>
|
|
Date: Fri, 7 Sep 2012 18:30:23 +0100
|
|
Subject: [PATCH] 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>
|
|
---
|
|
Xi/xiselectev.c | 9 +++++++--
|
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c
|
|
index 0e45cb8..ab1b624 100644
|
|
--- a/Xi/xiselectev.c
|
|
+++ b/Xi/xiselectev.c
|
|
@@ -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 */
|
|
|
|
--
|
|
1.8.0.1
|
|
|