RFR: 8236971: [macos] Gestures handled incorrectly due to missing events
Ambarish Rapte
arapte at openjdk.java.net
Mon Apr 6 12:34:52 UTC 2020
On Thu, 2 Apr 2020 14:55:35 GMT, Kevin Rushforth <kcr at openjdk.org> wrote:
> As noted in the JBS issue, this bug is a result of a deliberate change by Apple that affects applications (in this case
> the JDK) linked against MacOSX 10.11 SDK or later -- they no longer call two methods that we are relying on,
> `beginGestureWithEvent` and `endGestureWithEvent`. There is no deprecation warning or any other indication at compile
> time or runtime that these methods are ineffective. They just stopped calling them. It is documented in their developer
> guide:
> [developer.apple.com/documentation/appkit/nsresponder/1526368-begingesturewithevent](https://developer.apple.com/documentation/appkit/nsresponder/1526368-begingesturewithevent?language=objc)
> Note that it's the version of the MacOSX SDK that the JDK is linked with that matters. JavaFX gesture notification
> works when run on a JDK that was linked against the 10.10 SDK or earlier (regardless of what MacOSX SDK was used to
> link the JavaFX libraries). JavaFX gesture notification fails when run on a JDK that was linked against the 10.11 SDK
> or later. The solution, as indicated in the Apple documentation referred to above, is to use the phase information
> from gesture events to track when to call begin / end gesture. The fix does the following things: 1. Removes the
> `beginGestureWithEvent` and `endGestureWithEvent` responder methods in `GlassView2D` and `GlassView3D` 2. Calls new
> local methods from each gesture to track when to call the associated `GlassViewDelegate` notification methods,
> `sendJavaGestureBeginEvent` and `sendJavaGestureEndEvent` I've tested this on macOS 10.13.6 and 10.15.3 (Catalina) and
> the attached program now runs correctly. I also tested the GestureEvent sample in Ensemble8 and it reproduces the
> problem before the fix and works correctly after the fix. I instrumented the code with print statements (which I have
> since reverted) and verified that the stream of events is as expected, and matches JDK 8u241 with bundled FX.
modules/javafx.graphics/src/main/native-glass/mac/GlassViewDelegate.m line 888:
> 887: }
> 888: }
> 889: }
In continuation to the change in `maybeBeginGestureWithEvent`, we would need to remove the inner `if` condition change
here,
if ((gesturesBeganMask & theMask) != 0) {
gesturesBeganMask &= ~theMask;
[self sendJavaGestureEndEvent:theEvent];
}
-------------
PR: https://git.openjdk.java.net/jfx/pull/156
More information about the openjfx-dev
mailing list