Has it been discussed about cursor jumps caused by limitations of synpatics style multi-touch support?
By synaptics style I mean when you only have 1 set of X/Y to report regardless of how many fingers are reported touching the pad and the confusion of what X/Y values should represent. I've seen a few bugzilla's that I suspect are related to this issue. Following scenarios may sound strange but are pretty easy to occur from cramped netbook spaces and one finger mistakenly touching pad in random orders. Two scenarios: 1) Real jump occuring from 2nd finger release. Usecase: 1st finger on touchpad (away from scroll areas), second finger slightly away (but away from scroll areas). Release 1st finger. Newer synaptics hw will jump to new X and Y values related to only remaining finger; causing a cursor jump upon 1st finger release. At least thats what I'm seeing with my synaptics hardware and seems most likely hw design. Can others reproduce if they disable scroller features and palm detection? Older synaptics hw presumably jumps as well but less in size because averaging causes it to already be closer to new X and Y. Most linux-input emulates newer synatpics hw and so should see similar jump. 2) Theoretical jumps from 2nd finger touch. Usecase: 1st finger on touchpad (away from scroll areas), second finger farest possible away (away from scroll areas though). Newer synaptics hw will track close to original X and Y values the whole time; per their specs. Older synaptics will start tracking in middle of two points; also per their specs. Presumable this will cause a cursor jump right at 2nd finger touch time but I have no "older" hardware to verify and they do not give date ranges. Some linux-input drivers convert real multi-touch data into syaptics style to be backwards compatible with xf86-input-synaptics. I've seen debate on linux-input if its OK to emulate averaging behaviour because it allows scrolling with moving 2nd finger only and could theoretically support synaptic's style rotate gesture. Should this usecase even be considered? My guess at why jumps not reported as bugs so much: Modern xf86-input-synaptics is defaulting to 2-finger scrolling when possible; which hide issue. Also, I'm guessing most mistaken touches are at edge of pad which can kick in edge scrolling which also masks. ComputeDelta() seems to be debouncing most jumps I think even though its not intentionally. When Palm detection enabled, its logic debounces #1 by clearing out history that delta is computed against. Entering any type of supported scroll mode debounces #2 because cursor doesn't move until exiting scroll mode. Thats side touches or 2-finger scrolling. Any edge scrolling or 2-finger scrolling debounces #1. Suggested xf86-input-synaptics behaviour change: Its not a terrible problem but I think could stand to be improved. I propose following change to help further get rid of jumps: Start tracking previous finger count. Modify ComputeDelta() to be even more aggressive in resetting delta history on finger transitions. * When previousNumFingers < numFingers then require 4 new samples to debounce theoretical jumps in #2 on old Synpatics hw and allow flexibility of newer hardware as we. Low priority and debatable. * When previousNumFingers > numFingers then require 4 new samples to debounce real jump in #1 from real synaptics hw and presumably most other HW. High priority since I can see this easily and why I started looking into basic issue. I've tested this change and seens to fix my usecase #1. Some additional issue still exists that allows jumps when I touch two extremes of touchpad and lift 1st finger only. Probably unrelated to above I'm guessing. Chris _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
