[PATCH] Xi: call UpdateDeviceState() even when the client is missing

Peter Hutterer peter.hutterer at who-t.net
Tue Jun 16 20:12:04 PDT 2015


On Tue, Jun 16, 2015 at 01:55:49PM +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 adds a call to UpdateDeviceState() in case the client
> can't be found.
> 
> Signed-off-by: Alexander Volkov <a.volkov at rusbitech.ru>
> ---
>  Xi/exevents.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/Xi/exevents.c b/Xi/exevents.c
> index 1c586d0..32e4a2c 100644
> --- a/Xi/exevents.c
> +++ b/Xi/exevents.c
> @@ -1590,6 +1590,8 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
>      if (!ti) {
>          DebugF("[Xi] %s: Failed to get event %d for touchpoint %d\n",
>                 dev->name, type, touchid);
> +        if (emulate_pointer)
> +            UpdateDeviceState(dev, &ev->device_event);
>          return;
>      }

ACK, but can we do this with a "goto out" please?

Cheers,
   Peter

>  
> -- 
> 2.4.0
> 


More information about the xorg-devel mailing list