On macOS when the user swipes on a trackpad or Magic Mouse JavaFX sees this as a scroll gesture. The scene tries to ensure that all the scroll events generated by the gesture are fired at the same target to ensure that the gesture's scroll events don't get split between two ScrollPanes. For example, while a ScrollPane is being scrolled a child ScrollPane might shift until it's beneath the mouse pointer. Scroll events should not fire at the child but remain with the parent.
During the gesture the scene should target the node that's handling the scrolling (like a ScrollPane) but there's no good way to determine that. Instead it targets a descendant node, whatever was under the mouse pointer when the gesture started. This node is likely to shift during the scroll and if scrolls out of view it might get disconnected from the scene graph. At that point events fired at it will go nowhere and the gesture will abruptly stop. This PR detects when the gesture target is removed from the scene graph and attempts to find a new target. This bug does not reproduce on Windows since that platform doesn't generate a SCROLL_STARTED event so the Scene never selects a gesture target. All scroll events are delivered to whatever node is under the mouse pointer which will change as the scroll progresses. This PR might fix [JDK-8088460](https://bugs.openjdk.org/browse/JDK-8088460) which shows up in Ensemble if anyone wants to test that. Submitting fix for sanity checking and manual testing. Will investigate creating an automated test for this. --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - If the target for a scroll gesture is removed from the scene graph choose a new one Changes: https://git.openjdk.org/jfx/pull/2171/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=2171&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8384814 Stats: 13 lines in 1 file changed: 13 ins; 0 del; 0 mod Patch: https://git.openjdk.org/jfx/pull/2171.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/2171/head:pull/2171 PR: https://git.openjdk.org/jfx/pull/2171
