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