summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2012-12-11 13:36:02 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-01-08 12:35:42 +1000
commit7800cf99f52081b7f6b8870d430730c595ffca60 (patch)
tree79fdad0ec742961dc7a772dfd0ce60503166d927
parentc15bdf316386dad275dd4f691e7a6a3b306f9327 (diff)
dix: don't copy the wrong event mask when activating a passive grab
GrabMask is a union of core, XI1 and XI2 masks. If a XI2 grab is activated, the value is a random pointer value, using it as mask has unpredictable effects. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Jasper St. Pierre <jstpierre@mecheye.net> Reviewed-by: Keith Packard <keithp@keithp.com> (cherry picked from commit f793b5fd3eb16a2ada130367c2ffebeede69a322)
-rw-r--r--dix/grabs.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/dix/grabs.c b/dix/grabs.c
index 55bf64f2c..d55a69cf0 100644
--- a/dix/grabs.c
+++ b/dix/grabs.c
@@ -219,7 +219,10 @@ CreateGrab(int client, DeviceIntPtr device, DeviceIntPtr modDevice,
grab->resource = FakeClientID(client);
grab->device = device;
grab->window = window;
- grab->eventMask = mask->core; /* same for XI */
+ if (grabtype == CORE || grabtype == XI)
+ grab->eventMask = mask->core; /* same for XI */
+ else
+ grab->eventMask = 0;
grab->deviceMask = 0;
grab->ownerEvents = param->ownerEvents;
grab->keyboardMode = param->this_device_mode;