Filtered XI_TouchEnd causing non root windows to have a non terminated touch sequence.
Submitted by Jay L.
Assigned to Xorg Project Team
Description
Created attachment 76680 Xorg.log file that contains the standard output from launching X
I am seeing a touch sequence of XI_TouchBegin, then sometimes I see an XI_TouchUpdate, then something goes wrong and the XI_TouchEnd that you would expect is instead created as an XI_RawTouchEnd. This causes the application to think that that finger is still down, and that it never comes back up.
In order to see this touch sequence I press one combo box, then press another combo box, then press an area of the application that doesn't have anything associated with it. It is not 100% reproducible, but it is very easy to get to happen. I have also seen this happen with the QT 5.0.1 fingerpaint example, as well as the drag and drop example (which becomes something more like drag and hold).
The XI_RawTouchEnd is then filtered because the window it is trying to send it to is not a root window and thus can't listen for it (at least that is what I think is going on, the actual code shows the xi2mask_isset is returning false on the XI_RawTouchEnd event).
Based on debugging prints that I have put into the xorg-server code it shows that in DeliverOneGrabbedEvent (of dix/events.c) (when the XI_RawTouchEnd event is generated instead of an XI_TouchEnd) in the XI2 section of the switch (level) scope: GetXI2MaskByte is returning 0 because xi2mask_isset is returning false for the XI_RawTouchEnd event.
I am using Xorg 7.7, xorg-server 1.12.2, and xf86-input-evdev-2.7.0. The application I am using to see this behavior is the QT 5.0.1 example program called "lineedits."
I have attached my xorg.conf. I have attached a the xorg.log.
Attachment 76680, "Xorg.log file that contains the standard output from launching X":
xorg.log
Version: 7.7 (2012.06)