Comment 33 for bug 1307701

Revision history for this message
In , Daniel d'Andrada (dandrader) wrote :

It happens on Ubuntu running on laptop with a touchscreen.

Scenario:

- There's a small window whose client called XISelectEvents on it for the touchscreen slave device with mask=XI_TouchBegin|XI_TouchUpdate|XI_TouchEnd (client[5290, /usr/lib/x86_64-linux-gnu/qt5/bin/qmlscene qml-demo-minimal-client.qml] in the logs).

- compiz and nautilus (which handles the desktop background) have selections and/or grabs on the master device

Actions:

1- user taps the qmlscene window. Touch events are reported to both qmlscene (from the slave device) and to compiz (from the master device). compiz rejects the touch sequence and it's not delivered to anyone else

2- user now presses on the desktop background. TouchBegin, TouchOwnership and further TouchUpdates are sent to compiz.

3- compiz rejects the touch sequence. TouchPuntToNextOwner fails to emulate a pointer and pass it to nautilus as it still thinks that touch 1 is active. And as per pointer emulation rules, only the oldest active touch is used for touch emulation. From the logs, the lines are:

"""
[ 9223.917] (II) TouchPuntToNextOwner: touch 2
[ 9223.917] (II) - Not all older pointer emulated touches have been seen yet. Oldest touch(client_id=1, active=1, pending_finish=0, emulate_pointer=1).
"""

4- user lifts his finger

So that scenario on touch 1 clearly left xserver in an inconsistent, buggy, state.