Merge branch 'improvement/JAL-1988+JAL-3416_Java8_macOS_APQHandlers_and_FlatLaF_optio...
[jalview.git] / src / jalview / jbgui / GDesktop.java
index e4a5905..ca95222 100755 (executable)
  */
 package jalview.jbgui;
 
-import jalview.api.AlignmentViewPanel;
-import jalview.io.FileFormatException;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-
 import java.awt.FlowLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -35,6 +30,12 @@ import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 
+import jalview.api.AlignmentViewPanel;
+import jalview.bin.Cache;
+import jalview.io.FileFormatException;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+
 /**
  * DOCUMENT ME!
  * 
@@ -116,10 +117,10 @@ public class GDesktop extends JFrame
       e.printStackTrace();
     }
 
-    if (Platform.allowMnemonics()) 
+    if (Platform.allowMnemonics())
     {
-       //BH was !Platform.isAMacAndNotJS()) i.e. "JS or not Mac"
-       // but here we want just not a Mac, period, right?
+      // BH was !Platform.isAMacAndNotJS()) i.e. "JS or not Mac"
+      // but here we want just not a Mac, period, right?
       FileMenu.setMnemonic('F');
       inputLocalFileMenuItem.setMnemonic('L');
       inputURLMenuItem.setMnemonic('U');
@@ -139,15 +140,38 @@ public class GDesktop extends JFrame
    */
   private void jbInit() throws Exception
   {
+    boolean apqHandlersSet = false;
+    /**
+     * APQHandlers sets handlers for About, Preferences and Quit actions
+     * peculiar to macOS's application menu. APQHandlers will check to see if a
+     * handler is supported before setting it.
+     */
+    try
+    {
+      apqHandlersSet = APQHandlers.setAPQHandlers(this);
+    } catch (Exception e)
+    {
+      System.out.println("Cannot set APQHandlers");
+      // e.printStackTrace();
+    } catch (Throwable t)
+    {
+      jalview.bin.Console
+              .warn("Error setting APQHandlers: " + t.toString());
+      jalview.bin.Console.trace(Cache.getStackTraceString(t));
+    }
+
     setName("jalview-desktop");
     FileMenu.setText(MessageManager.getString("action.file"));
     HelpMenu.setText(MessageManager.getString("action.help"));
     inputLocalFileMenuItem
             .setText(MessageManager.getString("label.load_tree_from_file"));
-    inputLocalFileMenuItem.setAccelerator(
-            javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O,
-                    jalview.util.ShortcutKeyMaskExWrapper.getMenuShortcutKeyMaskEx(),
-                    false));
+    inputLocalFileMenuItem
+            .setAccelerator(
+                    javax.swing.KeyStroke
+                            .getKeyStroke(java.awt.event.KeyEvent.VK_O,
+                                    jalview.util.ShortcutKeyMaskExWrapper
+                                            .getMenuShortcutKeyMaskEx(),
+                                    false));
     inputLocalFileMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
@@ -366,10 +390,6 @@ public class GDesktop extends JFrame
       }
     });
 
-    Float specversion = Platform.isJS() ? Float.valueOf(8)
-            : Float.parseFloat(
-                    System.getProperty("java.specification.version"));
-    
     desktopMenubar.add(FileMenu);
     desktopMenubar.add(toolsMenu);
     desktopMenubar.add(HelpMenu);
@@ -377,14 +397,20 @@ public class GDesktop extends JFrame
     FileMenu.add(inputMenu);
     FileMenu.add(inputSequence);
     FileMenu.addSeparator();
-    //FileMenu.add(saveState);
+    // FileMenu.add(saveState);
     FileMenu.add(saveAsState);
     FileMenu.add(loadState);
     FileMenu.addSeparator();
-    FileMenu.add(quit);
-    HelpMenu.add(aboutMenuItem);
+    if (!APQHandlers.setQuit)
+    {
+      FileMenu.add(quit);
+    }
+    if (!APQHandlers.setAbout)
+    {
+      HelpMenu.add(aboutMenuItem);
+    }
     HelpMenu.add(documentationMenuItem);
-    if (!Platform.isAMacAndNotJS() || specversion < 11)
+    if (!APQHandlers.setPreferences)
     {
       toolsMenu.add(preferences);
     }
@@ -493,7 +519,7 @@ public class GDesktop extends JFrame
    */
   protected void quit()
   {
-    //System.out.println("********** GDesktop.quit()");
+    // System.out.println("********** GDesktop.quit()");
   }
 
   /**