One of the things that prompted me to write the TouchyFXy application was to get a feel of the event flow before I embarked on recommending fixes to some of the quirks. Here goes.
My first concern is touch scrolling on lists. If you do a touch scroll on a List you wind up selecting the item you lift your finger off of. And this is painfully obvious in Ensemble8 on a Surface Pro, you scroll down the screen and BAM you're in a demo if you're not careful where you start your scroll. I would propose that at least in the list control, and possibly all controls, that a click/release/down event not be processed if the 'synthesized' flag is present This would need to be done in the control logic rather than pushed down through the whole event chain, however.. A general audit may be entertaining, but the one annoying me right now is the select on touch scroll for lists and touch panes. A general solution may be to allow the user to turn off the capture of synthesized events, but I would imagine that would need to be explicitly turned on by the code to maintain backwards compatibility for apps not written with touch in mind. My next problem is the pen device on Windows. The only events captured in JavaFX from a pen are mouse events. To complicate things the "Synthesized" flag is set. This is a bit disconcerting because to the view of a JFX app there is no other event for it to be synthesized to. So I would propose the isPenEvent method in /glass/glass-lib-windows/src/ViewContainer.cpp be added to check that the 0x80 bit is set by changing the signature to 0xFF515780 and the mask to 0xFFFFFF80, making a pen event look just like a mouse event, since it only generates mouse events. (the linked MSDN article in the code explains the lower 8 bits, and the high bit is a pen/touch flag, the logic may need to be more complex). To distinguish a pen tap perhaps we set the direct flag but not the synthesized flag, since a pen is direct on the screen (usually). So am I way off base on these? Should I work up a patch for these? Or must the current behavior be maintained.