This PR adds a fix to close the popup windows on macOS when clicking over the 
system menu bar. 

According to the macOS standard behaviour for native applications, when a popup 
window is showing, and the user clicks on the system menu bar, the click event 
is consumed and the popup is closed. A second click is then required to open 
the system menu bar.

This is done by the popup windows directly, as they are NSMenu objects that 
enable a modal event tracking loop, capturing all events including those from 
the system menu bar, in order to dismiss the popup when the click is outside 
the window.

However, JavaFX just implements regular NSWindows, and there is no such event 
loop. Therefore, this PR adds a notification to the system menu instead. When 
the menu is about to open, the popup window gets a notification, which is 
processed to cancel the menu animation, preventing it from showing up, and also 
closing the popup. And then, with the popup closed, a new click from the user 
will open the system menus as usual.

This applies to all JavaFX menus from the system menu bar, that is: the 
application menu (the "java" menu when the application is not packaged yet) and 
other menus created by the application, if any. 

It doesn't apply to the Apple system menu, which is not handle by JavaFX, 
though. This causes a difference with native applications, that treat such menu 
in the same way.

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

Commit messages:
 - Close popup windows on macOS when clicking over the system menu bar

Changes: https://git.openjdk.org/jfx/pull/2102/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=2102&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8372398
  Stats: 44 lines in 4 files changed: 39 ins; 0 del; 5 mod
  Patch: https://git.openjdk.org/jfx/pull/2102.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/2102/head:pull/2102

PR: https://git.openjdk.org/jfx/pull/2102

Reply via email to