On Wed, Jun 17, 2015 at 12:41:35PM +0300, Alexander Volkov wrote:
> The client window can be closed in the middle of a touch sequence,
> e.g. Qt 4 closes popup windows on MousePress and Qt 5.5 will do it
> on TouchBegin. In this case the state of mouse buttons will not be
> updated on TouchEnd because ProcessTouchEvent() calls UpdateDeviceState()
> only when the event has been sent to the client. It results in a
> stuck left mouse button.
>
> This patch leads to calling UpdateDeviceState() in case the client
> can't be found.
>
> Signed-off-by: Alexander Volkov <[email protected]>
merged, thanks
Cheers,
Peter
> ---
> Xi/exevents.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/Xi/exevents.c b/Xi/exevents.c
> index 1c586d0..7de21d6 100644
> --- a/Xi/exevents.c
> +++ b/Xi/exevents.c
> @@ -1590,7 +1590,7 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
> if (!ti) {
> DebugF("[Xi] %s: Failed to get event %d for touchpoint %d\n",
> dev->name, type, touchid);
> - return;
> + goto out;
> }
>
> /* if emulate_pointer is set, emulate the motion event right
> @@ -1624,6 +1624,7 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
> if (ev->any.type == ET_TouchEnd)
> TouchEndTouch(dev, ti);
>
> + out:
> if (emulate_pointer)
> UpdateDeviceState(dev, &ev->device_event);
> }
> --
> 2.4.0
>
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel