Check core event mask properly for pointer emulated touch events
The current code checks the core event mask as though it were an XI2 mask. This change fixes the checks so the proper client and event masks are used. Signed-off-by: Chase Douglas <chase.douglas@canonical.com> Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> Acked-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
80fefc42f5
commit
4c1dfd2193
|
@ -1377,6 +1377,8 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
||||||
BUG_WARN(!iclients);
|
BUG_WARN(!iclients);
|
||||||
if (!iclients)
|
if (!iclients)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
*client = rClient(iclients);
|
||||||
}
|
}
|
||||||
else if (listener->level == XI) {
|
else if (listener->level == XI) {
|
||||||
int xi_type = GetXIType(TouchGetPointerEventType(ev));
|
int xi_type = GetXIType(TouchGetPointerEventType(ev));
|
||||||
|
@ -1389,20 +1391,24 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
||||||
BUG_WARN(!iclients);
|
BUG_WARN(!iclients);
|
||||||
if (!iclients)
|
if (!iclients)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
*client = rClient(iclients);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int coretype = GetCoreType(TouchGetPointerEventType(ev));
|
int coretype = GetCoreType(TouchGetPointerEventType(ev));
|
||||||
Mask core_filter = event_get_filter_from_type(dev, coretype);
|
Mask core_filter = event_get_filter_from_type(dev, coretype);
|
||||||
|
OtherClients *oclients;
|
||||||
|
|
||||||
/* all others */
|
/* all others */
|
||||||
nt_list_for_each_entry(iclients,
|
nt_list_for_each_entry(oclients,
|
||||||
(InputClients *) wOtherClients(*win), next)
|
(OtherClients *) wOtherClients(*win), next)
|
||||||
if (iclients->mask[XIAllDevices] & core_filter)
|
if (oclients->mask & core_filter)
|
||||||
break;
|
break;
|
||||||
/* if owner selected, iclients is NULL */
|
|
||||||
|
/* if owner selected, oclients is NULL */
|
||||||
|
*client = oclients ? rClient(oclients) : wClient(*win);
|
||||||
}
|
}
|
||||||
|
|
||||||
*client = iclients ? rClient(iclients) : wClient(*win);
|
|
||||||
*mask = iclients ? iclients->xi2mask : NULL;
|
*mask = iclients ? iclients->xi2mask : NULL;
|
||||||
*grab = NULL;
|
*grab = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue