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>
This commit is contained in:
parent
21ea7ebb6a
commit
4fb686d6a6
|
@ -895,8 +895,7 @@ TouchAddActiveGrabListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
||||||
|
|
||||||
if (!ti->emulate_pointer &&
|
if (!ti->emulate_pointer &&
|
||||||
grab->grabtype == XI2 &&
|
grab->grabtype == XI2 &&
|
||||||
(grab->type != XI_TouchBegin && grab->type != XI_TouchEnd &&
|
!xi2mask_isset(grab->xi2mask, dev, XI_TouchBegin))
|
||||||
grab->type != XI_TouchUpdate))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TouchAddGrabListener(dev, ti, ev, grab);
|
TouchAddGrabListener(dev, ti, ev, grab);
|
||||||
|
|
|
@ -195,7 +195,7 @@ typedef struct _GrabRec {
|
||||||
unsigned keyboardMode:1;
|
unsigned keyboardMode:1;
|
||||||
unsigned pointerMode:1;
|
unsigned pointerMode:1;
|
||||||
enum InputLevel grabtype;
|
enum InputLevel grabtype;
|
||||||
CARD8 type; /* event type */
|
CARD8 type; /* event type for passive grabs, 0 for active grabs */
|
||||||
DetailRec modifiersDetail;
|
DetailRec modifiersDetail;
|
||||||
DeviceIntPtr modifierDevice;
|
DeviceIntPtr modifierDevice;
|
||||||
DetailRec detail; /* key or button */
|
DetailRec detail; /* key or button */
|
||||||
|
|
Loading…
Reference in New Issue