dix: Send touch end to clients that do async grab without touch events in the mask while the touch is active

If a XI2 client started listening to touches due to a selection and then creates an active async grab that does not include touch events, then it currently won't get the touch end event which will produce inconsistent view of the pending touches.

We only need to consider touch listeners and can ignore pointer emulation. Under XI2 if a active grab replaces a passive implicit grab and the active grab does not include the button release event, the client won't get it either (explicit tests have been added for this edge case in xorg/test/xorg-integration-tests!20 (merged)).

The tests for this MR are in xorg/test/xorg-integration-tests!17 (merged).

cc @whot

Edited by Povilas Kanapickas

Merge request reports