[PATCH v2] Xi: call UpdateDeviceState() even when the client is missing
Peter Hutterer
peter.hutterer at who-t.net
Wed Jun 17 14:30:56 PDT 2015
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 <a.volkov at rusbitech.ru>
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
>
More information about the xorg-devel
mailing list