On Wed, 6 Jan 2021 17:40:43 GMT, Jose Pereda <jper...@openjdk.org> wrote:
>> modules/javafx.graphics/src/main/java/javafx/scene/Scene.java line 3788: >> >>> 3786: //old gesture ended and new one started >>> 3787: gestureStarted = true; >>> 3788: if (!PLATFORM_DRAG_GESTURE_INITIATION && >>> Scene.this.dndGesture == null) { >> >> This will prevent the creation of the new `DndGesture`, but we will still >> clear the PDR targets. Have you confirmed that this is the desired behavior? >> It seems reasonable, since we also clear it on a mouse move, but wanted to >> get your take on it. > > This is really an edge case. There can be two gestures at once, an existing > one (i.e from TouchPad), with its full drag information, that hasn't finished > yet, and a new mouse one. > > Having a single `dndGesture` object for both events seems wrong. But having a > list/array of events for such scenario seems overkill. > > Somehow some information from one or the other event might get lost or mixed > up. The PDR targets are not required for the initial touch event, and we > prevent the RTE, so I'd say this is a reasonable non-intrusive fix. In looking at it more closely, I think it might be better to avoid setting `gestureStarted` if there is already a drag gesture in process (started via dragEnter). Maybe something like this? if (Scene.this.dndGesture == null) { //old gesture ended and new one started gestureStarted = true; if (!PLATFORM_DRAG_GESTURE_INITIATION) { Scene.this.dndGesture = new DnDGesture(); } clearPDREventTargets(); } ------------- PR: https://git.openjdk.java.net/jfx/pull/372