Marc-André Lureau <marcandre.lur...@gmail.com> writes: > 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.
The problem with slots vs. sequences is that, from what I can see, there's not way to obtain the slot number from EventTouch, which makes me thing we're a little to high in the abstraction layer to emulate multi-touch properly. And with GTK4 it seems to be even worse, because it tries harder to process gestures on its own (we need them to be processed by the guest instead). Under some compositors, we were lucky enough that indeed slots == sequences, so we could actually pass those events as that and have the guest process and recognize simple gestures (i.e. pinching) properly. The "right" solution would be finding a way to operate at a lower level than what EventTouch provides us today, but I don't know how feasible is that from within the limits of the ui/gtk3.c. In case that's not possible, the modulo workaround is probably as good as we can get. Sergio.