Hi

Adding Sergio in CC, who wrote that code. I don't have means to test it,
which also limits my understanding and ability to check this.

On Sat, Jul 20, 2024 at 11:58 PM ~katharine_chui <katharine_c...@git.sr.ht>
wrote:

> From: Katharine Chui <kwchu...@connect.ust.hk>
>
> There seems to be no guarantee as to how GdkEventTouch.sequence
> would progress https://docs.gtk.org/gdk3/struct.EventTouch.html
>
>
True, we also abuse the internal implementation which stores low integers
in the sequence pointer.

In the case of steam gamescope session, touch input would
> increment the number every touch, resulting in all touch inputs
> after the 10th touch to get dropped
>
> ...
> qemu: warning: Unexpected touch slot number:  10 >= 10
> qemu: warning: Unexpected touch slot number:  11 >= 10
> qemu: warning: Unexpected touch slot number:  12 >= 10
> qemu: warning: Unexpected touch slot number:  13 >= 10
> qemu: warning: Unexpected touch slot number:  14 >= 10
> ...
>
> Reuse the slots on gtk to avoid that
>

But doing modulo like this, there is a chance of conflict with already used
slots.

Maybe it's time for a better gtk implementation which would handle a proper
sequence pointer to slot mapping.


>
> Signed-off-by: Katharine Chui <kwchu...@connect.ust.hk>
> ---
>  ui/gtk.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/ui/gtk.c b/ui/gtk.c
> index bc29f7a1b4..b123c9616d 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -1090,7 +1090,7 @@ static gboolean gd_touch_event(GtkWidget *widget,
> GdkEventTouch *touch,
>                                 void *opaque)
>  {
>      VirtualConsole *vc = opaque;
> -    uint64_t num_slot = GPOINTER_TO_UINT(touch->sequence);
> +    uint64_t num_slot = GPOINTER_TO_UINT(touch->sequence) %
> INPUT_EVENT_SLOTS_MAX;
>      int type = -1;
>
>      switch (touch->type) {
> --
> 2.43.4
>
>

-- 
Marc-André Lureau

Reply via email to