diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-07-24 11:50:00 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-07-30 15:39:46 +1000 |
commit | ef54bd89b17f3dd1f854435339f66d357121c64c (patch) | |
tree | 2665c4b982e24141d2e42ece0a4a5717b7d37f96 | |
parent | bc41226f7741098e55a3b0df924986991576d50a (diff) |
dix: check the xi2mask, not the grab type for touch listeners
grab->type is only non-zero for passive grabs. We're checking an active grab
here, so we need to check if the touch mask is set on the grab.
Test case: grab the device, then start two simultaneous touches. The
grabbing client won't see the second touchpoints because grab->type is 0
and the second touch is not an emulating pointer.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 4fb686d6a6777950f0e0d55b848cd2af4cbad372)
-rw-r--r-- | dix/touch.c | 3 | ||||
-rw-r--r-- | include/inputstr.h | 2 |
2 files changed, 2 insertions, 3 deletions
diff --git a/dix/touch.c b/dix/touch.c index a4b6d7eea..a7ea213ba 100644 --- a/dix/touch.c +++ b/dix/touch.c @@ -895,8 +895,7 @@ TouchAddActiveGrabListener(DeviceIntPtr dev, TouchPointInfoPtr ti, if (!ti->emulate_pointer && grab->grabtype == XI2 && - (grab->type != XI_TouchBegin && grab->type != XI_TouchEnd && - grab->type != XI_TouchUpdate)) + !xi2mask_isset(grab->xi2mask, dev, XI_TouchBegin)) return; TouchAddGrabListener(dev, ti, ev, grab); diff --git a/include/inputstr.h b/include/inputstr.h index 85be885a0..2da72c1ec 100644 --- a/include/inputstr.h +++ b/include/inputstr.h @@ -195,7 +195,7 @@ typedef struct _GrabRec { unsigned keyboardMode:1; unsigned pointerMode:1; enum InputLevel grabtype; - CARD8 type; /* event type */ + CARD8 type; /* event type for passive grabs, 0 for active grabs */ DetailRec modifiersDetail; DeviceIntPtr modifierDevice; DetailRec detail; /* key or button */ |