Marc-André Lureau <marcandre.lur...@gmail.com> writes: > Hi > > On Mon, Jul 22, 2024 at 3:58 PM Sergio Lopez Pascual <s...@redhat.com> wrote: > >> 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. >> > > Can't we map the sequence pointer to a (reusable) counter? So up to > max-slots sequences could be mapped uniquely and we would reject events > that do not fit within max-slots.
A slot is a "contact" in the screen (usually a finger), and should remain the same for the events generated from that contact until it's raised from the screen. That is, for a two-fingers pinch gesture, all the events coming from one finger should have slot == X, and the ones coming from the other finger should slot == Y, where X and Y never change during the gesture. In compositors where slot == sequence, we get exactly this behavior. On compositors where sequence is always increasing, assuming it's kept the same for the duration of a contact, the modulo option can do the trick just fine, as long we don't need to support more than 10 contact points (which seems unlikely to me). Sergio.