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.

-------------

Commit messages:
 - Revert "TEMPORARY: add debugging print statements (will be reverted before 
final review)"
 - TEMPORARY: add debugging print statements (will be reverted before final 
review)
 - 8236971: [macos] Gestures handled incorrectly due to missing events

Changes: https://git.openjdk.java.net/jfx/pull/156/files
 Webrev: https://webrevs.openjdk.java.net/jfx/156/webrev.00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8236971
  Stats: 117 lines in 4 files changed: 85 ins; 20 del; 12 mod
  Patch: https://git.openjdk.java.net/jfx/pull/156.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/156/head:pull/156

PR: https://git.openjdk.java.net/jfx/pull/156

Reply via email to