diff --git a/core/ui/pom.xml b/core/ui/pom.xml
index 6a0ce70dad..9325822a37 100644
--- a/core/ui/pom.xml
+++ b/core/ui/pom.xml
@@ -94,6 +94,12 @@
+
+
+ de.jangassen
+ nsmenufx
+ 3.1.0
+
diff --git a/core/ui/src/main/java/org/phoebus/ui/application/PhoebusApplication.java b/core/ui/src/main/java/org/phoebus/ui/application/PhoebusApplication.java
index cdbd71a08c..27c4ba2868 100644
--- a/core/ui/src/main/java/org/phoebus/ui/application/PhoebusApplication.java
+++ b/core/ui/src/main/java/org/phoebus/ui/application/PhoebusApplication.java
@@ -14,6 +14,7 @@
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.SortedMap;
@@ -706,7 +707,8 @@ private MenuBar createMenu(final Stage stage) {
// Help
final MenuItem content = createMenuItem(new OpenHelp());
- final MenuItem about = createMenuItem(new OpenAbout());
+ final var open_about = new OpenAbout();
+ final MenuItem about = createMenuItem(open_about);
menuBar.getMenus().add(new Menu(Messages.Help, null, about, content));
selectTabMenu.getParentMenu().setOnShowing(e -> {
@@ -734,6 +736,26 @@ private MenuBar createMenu(final Stage stage) {
});
closeAllTabsMenuItem.setOnAction(ae -> closeAllTabs());
+
+ // The application menu (the left-most menu in the menu bar) on macOS
+ // that is generated by JavaFX is broken, so we replace it with a menu
+ // that satisfies the expectations for a macOS app.
+ if (PlatformInfo.is_mac_os_x) {
+ final var toolkit = de.jangassen.MenuToolkit.toolkit(Locale.getDefault());
+ final var app_name = Messages.FixedTitle;
+ final var default_menu = new Menu(
+ app_name,
+ null,
+ toolkit.createAboutMenuItem(app_name, event -> open_about.call()),
+ new SeparatorMenuItem(),
+ toolkit.createHideMenuItem(app_name),
+ toolkit.createHideOthersMenuItem(),
+ toolkit.createUnhideAllMenuItem(),
+ new SeparatorMenuItem(),
+ toolkit.createQuitMenuItem(app_name));
+ toolkit.setApplicationMenu(default_menu);
+ }
+
return menuBar;
}
diff --git a/dependencies/phoebus-target/pom.xml b/dependencies/phoebus-target/pom.xml
index 09e7970137..8faa3a2cfc 100644
--- a/dependencies/phoebus-target/pom.xml
+++ b/dependencies/phoebus-target/pom.xml
@@ -532,6 +532,13 @@
3.1.0
+
+
+ de.jangassen
+ nsmenufx
+ 3.1.0
+
+