This pull request fixes the system menu bar on MacOS when combining windows of 
Swing and JavaFX.

# Behavior before

If for some reason You needed to initialize AWT before JavaFX and You wanted to 
install the system menu bar from the JavaFX side, this wasn't possible. This 
issue is persistent even when You didn't open a Swing window. 

One scenario where this kind of issue happens is when You use install4j (see 
https://www.ej-technologies.com/install4j). In this case AWT is initialized by 
install4j and therefore You can't use the JavaFX system menu bar anymore.


# Behavior after

The fix allows JavaFX to install a system menu bar even if it is initialized 
after AWT. This is achieved by only changing code inside JavaFX. Each JavaFX 
window stores the previously installed menu bar when gaining focus and will 
restore this menu bar if the focus was lost. This only happens if the system 
menu bar installed by the JavaFX window is still unchanged.


# Tests

This PR introduces tests for the system menu bar in addition to verifying its 
own behavior / changes. The tests include single- and multi-window tests while 
interacting with Swing. The tests ensure that the menu bar stays the same for 
each window, no matter how You switch focus between them.


# Additional benifits 

This fix is not specifically for AWT, but allows JavaFX to interact much more 
compatibly with other frameworks that make use of the system menu bar.


# Review from AWT

In the previous PR related to this one, the comment was made that the folks 
from AWT should take a look at this fix. It would be great and much appreciated 
if someone could initiate it.


# Add disable flag?

We could also add a flag to prevent JavaFX from installing a system menu bar 
for users who have found other fixes for their projects / setups. This could be 
used to restore the previous behavior when AWT is initialized first.


Co-Author: @FlorianKirmaier

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

Commit messages:
 - 8359108: Mac - When Swing starts First, native application menu doesn't work 
for JavaFX
 - 8359108: Mac - When Swing starts First, native application menu doesn't work 
for JavaFX
 - 8359108: Mac - When Swing starts First, native application menu doesn't work 
for JavaFX
 - 8359108: Mac - When Swing starts First, native application menu doesn't work 
for JavaFX
 - 8359108: Mac - When Swing starts First, native application menu doesn't work 
for JavaFX

Changes: https://git.openjdk.org/jfx/pull/1904/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1904&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8359108
  Stats: 838 lines in 11 files changed: 823 ins; 12 del; 3 mod
  Patch: https://git.openjdk.org/jfx/pull/1904.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1904/head:pull/1904

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

Reply via email to