[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