On Wed, 6 Jan 2021 17:40:43 GMT, Jose Pereda <[email protected]> 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