On Wed, 9 Mar 2022 17:55:36 GMT, Alexander Scherbatiy <alex...@openjdk.org> wrote:
> Tapping on a circle in the center of the screen sometimes generates mouse > click events outside the circle with x coordinates set to zero. > > To reproduce the issue run the > [JFXCircle](https://bugs.openjdk.java.net/secure/attachment/98241/JFXCircle.java) > sample. > It has a circle in the center of the screen and a large rectangle under the > circle which covers the whole screen. > Tap quickly 10 times on the circle. The output is: > > circle mouse pressed [416.000000, 199.000000]: 1 > circle mouse pressed [416.000000, 199.000000]: 2 > circle mouse pressed [419.000000, 196.000000]: 3 > circle mouse pressed [416.000000, 188.000000]: 4 > circle mouse pressed [419.000000, 190.000000]: 5 > rectangle mouse pressed [0.000000, 188.000000] > circle mouse pressed [422.000000, 185.000000]: 6 > circle mouse pressed [418.000000, 191.000000]: 7 > circle mouse pressed [417.000000, 187.000000]: 8 > circle mouse pressed [420.000000, 185.000000]: 9 > circle mouse pressed [416.000000, 187.000000]: 10 > circle mouse pressed [417.000000, 192.000000]: 11 > circle mouse pressed [420.000000, 188.000000]: 12 > > One mouse event is reported by the rectangle with zero x coordinate. > > The issue occurs when one of ABS_MT_POSITION_X or Y position is not reported. > For example, the output from `evtest /dev/input/event2` > > Event: time 1646845728.905383, -------------- SYN_REPORT ------------ > Event: time 1646845728.935382, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), > value 1308 > Event: time 1646845728.935382, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), > value 449 > Event: time 1646845728.935382, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), > value 240 > Event: time 1646845728.935382, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1 > Event: time 1646845728.935382, type 3 (EV_ABS), code 0 (ABS_X), value 449 > Event: time 1646845728.935382, type 3 (EV_ABS), code 1 (ABS_Y), value 240 > Event: time 1646845728.935382, -------------- SYN_REPORT ------------ > Event: time 1646845729.025363, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), > value 242 > Event: time 1646845729.025363, type 3 (EV_ABS), code 1 (ABS_Y), value 242 > Event: time 1646845729.025363, -------------- SYN_REPORT ------------ > Event: time 1646845729.055379, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), > value -1 > Event: time 1646845729.055379, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0 > Event: time 1646845729.055379, -------------- SYN_REPORT ------------ > > The first SYN_REPORT reports ABS_MT_POSITION_X/Y [449, 240] coordinates. > The second SYN_REPORT reports only ABS_MT_POSITION_Y value 242 and the > ABS_MT_POSITION_X becomes undefined. > As a result, the LinuxStatefulMultiTouchProcessor.updatePoint(x, y) method > does not set the p.x value and it is left as zero. > https://github.com/openjdk/jfx/blob/c6069d6845df4b90cca226e2b3dff49e3b48d8ac/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/LinuxStatefulMultiTouchProcessor.java#L161 > > The fix checks if ABS_MT_POSITION_X/Y value is undefined to use the previous > ABS_MT_POSITION_X/Y value for the current slot. > > The first commit queries ABS_MT_SLOT maximum value to store slot IDs in an > array. > The second commit stores ABS_MT_POSITION_X/Y values in slotToX/Y values and > uses them for current undefined values. I will look at the merge conflict. ------------- PR Comment: https://git.openjdk.org/jfx/pull/749#issuecomment-1519935551