Remove last listener on touch reject

The current code short-circuits around the block that removes the
rejecting listener if it is the only listener left. It also does not
delete the touchpoint record if the touch has not physically ended.

This change ensures the listener is removed under these circumstances.

Signed-off-by: Chase Douglas <chase.douglas@ubuntu.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Chase Douglas 2012-01-05 16:43:40 -08:00 committed by Peter Hutterer
parent e30c3c5c59
commit 146008358e

View File

@ -1159,13 +1159,11 @@ TouchEventRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
DeliverTouchEvents(sourcedev, ti, tel + i, ev->resource); DeliverTouchEvents(sourcedev, ti, tel + i, ev->resource);
} }
/* If there are no other listeners left, then don't bother sending an /* If there are no other listeners left, and the touchpoint is pending
* ownership change event to no-one; if the touchpoint is pending
* finish, then we can just kill it now. */ * finish, then we can just kill it now. */
if (ti->num_listeners == 1) if (ti->num_listeners == 1 && ti->pending_finish)
{ {
if (ti->pending_finish) TouchEndTouch(sourcedev, ti);
TouchEndTouch(sourcedev, ti);
goto out; goto out;
} }
@ -1178,9 +1176,9 @@ TouchEventRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
ti->num_grabs--; ti->num_grabs--;
} }
/* If the current owner was removed, deliver the TouchOwnership or TouchBegin /* If the current owner was removed and there are further listeners, deliver
event to the new owner. */ * the TouchOwnership or TouchBegin event to the new owner. */
if (was_owner) if (ti->num_listeners > 0 && was_owner)
TouchPuntToNextOwner(sourcedev, ti, ev); TouchPuntToNextOwner(sourcedev, ti, ev);
out: out: