On Mon, 2010-10-11 at 18:29 +0200, Henrik Rydberg wrote: > On 10/11/2010 04:22 PM, Chase Douglas wrote: > > If I've read the rest of this thread correctly, it feels like Henrik is > > advocating for splitting the gesture stack into a recognizer in X and an > > instantiator on the client side. The issue I see here is that you still > > need the context that only exists client side in order to perform > > gesture recognition. > > > > Take the case of what looks like a three finger pinch where two fingers > > are over one object in a window and the third is over another object. > > Imagine the two-fingered object is a scrollable region, and the > > single-fingered object is a toolbar button above the scrollable region. > > Now, you move the two fingers up to scroll. This looks like a three > > finger pinch, but it's really a two finger drag. The recognizer would > > have to enumerate all the possibilities of gestures depending on which > > fingers are part of a possible gesture, and this becomes exponentially > > difficult as the number of fingers increases. Thus, we can only perform > > recognition after we know which fingers are part of a gesture, and we > > can only do that with the knowledge available on the client side. > > > Nice example! To further complicate things, now imagine the three-finger pinch > is in fact a window-manager gesture that should zoom out to window selection, > like in unity. In order to route the gesture to the right place, knowledge of > the three-finger pinch would have to be available on the event-routing level, > which certainly seems simpler if the gesture primitives are known on the > server > side. > > For this particular example, since the regions are listening to different > gestures, there is actually knowledge available on the server side as well, so > the combinatorial explosion does not seem to enter here.
This is the real issue: the server does not actually know about these regions. In old school toolkits, each widget was a separate X window. Modern toolkits don't do this anymore; instead, they have one X window for the overall "window" and they draw all the widgets themselves. The server doesn't have any information about where any widgets are in windows anymore. Going along with this, event propagation for widgets in a "window" is performed in the toolkit. When using modern toolkits, X event propagation is only used to propagate events between application "windows" on screen. (Here I use quotes around "window" to refer to what a normal user would call an application window, in contrast to the X definition of a window.) This leads us to the gesture recognition mechanism Peter and I have been discussing. Since we can't perform gesture recognition in the server, we have to potentially perform recognition twice: first at the system-wide level, then potentially at the application level if no system-wide gestures were recognized. One method for doing this is XI 2.1 passive grabbing. -- Chase _______________________________________________ Mailing list: https://launchpad.net/~multi-touch-dev Post to : [email protected] Unsubscribe : https://launchpad.net/~multi-touch-dev More help : https://help.launchpad.net/ListHelp

