On Sat, 11 Oct 2025 12:20:30 GMT, Pabulaner IV <[email protected]> wrote:
>> 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 > > Pabulaner IV has updated the pull request incrementally with one additional > commit since the last revision: > > 8359108: Mac - When Swing starts First, native application menu doesn't > work for JavaFX I ran the tests today on my Mac M1 system. I left one comment inline about needing to ensure that these tests only run on macOS. The following two tests fail consistently for me: MacOSSystemMenuMultiWindowFXOnlySwingLast MacOSSystemMenuMultiWindowTest The following fail intermittently: MacOSSystemMenuSetWithSwingTestFirst MacOSSystemMenuJFXPanelSwingFirstTest Also, I noticed that running all 7 tests takes over 6 minutes on my system. I tracked down the reason to the large number of calls to fork the `osascript` process. Here is the count by test: Test name | Number of calls --------- | --------------- MacOSSystemMenuJFXPanelSwingFirstTest | 253 MacOSSystemMenuMultiWindowFXOnlySwingFirst | 241 MacOSSystemMenuMultiWindowFXOnlySwingLast | 276 MacOSSystemMenuMultiWindowTest | 276 MacOSSystemMenuMultiWindowWithSwingFirstTest | 407 MacOSSystemMenuSetWithSwingTestFirst | 466 MacOSSystemMenuSingleWindowWithSwingFirstTest | 165 It isn't a deal-breaker, but it would be nice to cut this down a bit if without sacrificing test coverage (e.g,. I think it's good to test with at least one sub-menu and menus with different number of items) tests/system/src/test/java/test/com/sun/glass/ui/mac/MacOSSystemMenuTestBase.java line 60: > 58: import static org.junit.jupiter.api.Assertions.assertFalse; > 59: > 60: public class MacOSSystemMenuTestBase { Somewhere in this base class, add a static method annotated with `@BeforeAll` that does an `assumeTrue(PlatformUtil.isMac())` to ensure that these tests don't execute on the other platforms. ------------- PR Review: https://git.openjdk.org/jfx/pull/1904#pullrequestreview-3347399422 PR Review Comment: https://git.openjdk.org/jfx/pull/1904#discussion_r2437779579
