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

Reply via email to