JAL-3130 This commit concentrates on the Mac OS X DMG app bundle, ensuring only one...
[jalview.git] / src / jalview / gui / Desktop.java
index d3e87ad..1fed71e 100644 (file)
@@ -62,7 +62,8 @@ import java.awt.datatransfer.Clipboard;
 import java.awt.datatransfer.ClipboardOwner;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
-import java.awt.desktop.AboutEvent;
+import java.awt.desktop.QuitStrategy;
+/* not importing directly. Calling classes with full name in try block to allow Java 1.8 runtime
 import java.awt.desktop.AboutHandler;
 import java.awt.desktop.PreferencesEvent;
 import java.awt.desktop.PreferencesHandler;
@@ -70,6 +71,7 @@ import java.awt.desktop.QuitEvent;
 import java.awt.desktop.QuitHandler;
 import java.awt.desktop.QuitResponse;
 import java.awt.desktop.QuitStrategy;
+*/
 import java.awt.dnd.DnDConstants;
 import java.awt.dnd.DropTargetDragEvent;
 import java.awt.dnd.DropTargetDropEvent;
@@ -381,91 +383,111 @@ public class Desktop extends jalview.jbgui.GDesktop
 
       try
       {
+        Float specversion = Float.parseFloat(
+                System.getProperty("java.specification.version"));
 
-        if (Platform.isAMac())
+        if (specversion >= 9)
         {
-          if (desktopClass.getDeclaredMethod("setAboutHandler",
-                  new Class[]
-                  { AboutHandler.class }) != null)
+          if (Platform.isAMac())
           {
-
-            hdesktop.setAboutHandler(new AboutHandler()
+            if (desktopClass.getDeclaredMethod("setAboutHandler",
+                    new Class[]
+                    { java.awt.desktop.AboutHandler.class }) != null)
             {
-              @Override
-              public void handleAbout(AboutEvent e)
-              {
-                aboutMenuItem_actionPerformed(null);
-              }
-            });
 
-          }
+              hdesktop.setAboutHandler(new java.awt.desktop.AboutHandler()
+              {
+                @Override
+                public void handleAbout(java.awt.desktop.AboutEvent e)
+                {
+                  aboutMenuItem_actionPerformed(null);
+                }
+              });
 
-          if (desktopClass.getDeclaredMethod("setPreferencesHandler",
-                  new Class[]
-                  { PreferencesHandler.class }) != null)
-          {
+            }
 
-            hdesktop.setPreferencesHandler(new PreferencesHandler()
+            if (desktopClass.getDeclaredMethod("setPreferencesHandler",
+                    new Class[]
+                    { java.awt.desktop.PreferencesHandler.class }) != null)
             {
-              @Override
-              public void handlePreferences(PreferencesEvent e)
-              {
-                preferences_actionPerformed(null);
-              }
-            });
 
-          }
+              hdesktop.setPreferencesHandler(
+                      new java.awt.desktop.PreferencesHandler()
+              {
+                        @Override
+                        public void handlePreferences(
+                                java.awt.desktop.PreferencesEvent e)
+                        {
+                          preferences_actionPerformed(null);
+                        }
+                      });
 
-          if (desktopClass.getDeclaredMethod("setQuitHandler",
-                  new Class[]
-                  { QuitHandler.class }) != null)
-          {
+            }
 
-            hdesktop.setQuitHandler(new QuitHandler()
+            if (desktopClass.getDeclaredMethod("setQuitHandler",
+                    new Class[]
+                    { java.awt.desktop.QuitHandler.class }) != null)
             {
-              @Override
-              public void handleQuitRequestWith(QuitEvent e, QuitResponse r)
+
+              hdesktop.setQuitHandler(new java.awt.desktop.QuitHandler()
               {
-                boolean confirmQuit = jalview.bin.Cache
-                        .getDefault(CONFIRM_KEYBOARD_QUIT, true);
-                int n;
-                if (confirmQuit)
+                @Override
+                public void handleQuitRequestWith(
+                        java.awt.desktop.QuitEvent e,
+                        java.awt.desktop.QuitResponse r)
                 {
-                  n = JOptionPane.showConfirmDialog(null,
-                          MessageManager.getString("label.quit_jalview"),
-                          MessageManager.getString("action.quit"),
-                          JOptionPane.OK_CANCEL_OPTION,
-                          JOptionPane.PLAIN_MESSAGE, null);
-                }
-                else
-                {
-                  n = JOptionPane.OK_OPTION;
-                }
-                if (n == JOptionPane.OK_OPTION)
-                {
-                  System.out.println("Shortcut Quit confirmed by user");
-                  quit();
-                  r.performQuit(); // probably won't reach this line, but just
-                                   // in
-                                   // case
-                }
-                else
-                {
-                  r.cancelQuit();
-                  System.out.println("Shortcut Quit cancelled by user");
+                  boolean confirmQuit = jalview.bin.Cache
+                          .getDefault(CONFIRM_KEYBOARD_QUIT, true);
+                  int n;
+                  if (confirmQuit)
+                  {
+                    n = JOptionPane.showConfirmDialog(null,
+                            MessageManager.getString("label.quit_jalview"),
+                            MessageManager.getString("action.quit"),
+                            JOptionPane.OK_CANCEL_OPTION,
+                            JOptionPane.PLAIN_MESSAGE, null);
+                  }
+                  else
+                  {
+                    n = JOptionPane.OK_OPTION;
+                  }
+                  if (n == JOptionPane.OK_OPTION)
+                  {
+                    System.out.println("Shortcut Quit confirmed by user");
+                    quit();
+                    r.performQuit(); // probably won't reach this line, but just
+                                     // in
+                                     // case
+                  }
+                  else
+                  {
+                    r.cancelQuit();
+                    System.out.println("Shortcut Quit cancelled by user");
+                  }
                 }
-              }
-            });
-            hdesktop.setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS);
+              });
+              hdesktop.setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS);
 
+            }
           }
         }
+        else
+        {
+          System.out.println(
+                  "Not going to try setting APQ Handlers as java.spec.version is "
+                          + specversion);
+        }
 
-      } catch (NoSuchMethodException e)
+      } catch (Exception e)
       {
         System.out.println(
-                "NoSuchMethodException when looking for About, Preferences, Quit Handlers");
+                "Exception when looking for About, Preferences, Quit Handlers");
         e.printStackTrace();
+      } catch (Throwable t)
+      {
+        System.out.println(
+                "Throwable when looking for About, Preferences, Quit Handlers");
+        t.printStackTrace();
       }
 
       setAPQHandlers = true;
@@ -531,7 +553,15 @@ public class Desktop extends jalview.jbgui.GDesktop
                     + System.getProperty("java.version") + "\n"
                     + System.getProperty("os.arch") + " "
                     + System.getProperty("os.name") + " "
-                    + System.getProperty("os.version"));
+                    + System.getProperty("os.version")
+                    + (jalview.bin.Cache.getProperty("VERSION").equals("DEVELOPMENT")
+                                    ? "\nJava path:"
+                                            + System.getProperty(
+                                                    "java.home")
+                                            + File.separator + "bin"
+                                            + File.separator + "java"
+                                    : "")
+            );
 
     showConsole(showjconsole);
 
@@ -1108,7 +1138,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     KeyStroke ctrlWKey = KeyStroke.getKeyStroke(KeyEvent.VK_W,
             InputEvent.CTRL_DOWN_MASK);
     KeyStroke cmdWKey = KeyStroke.getKeyStroke(KeyEvent.VK_W,
-            Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+            Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx());
 
     InputMap inputMap = frame
             .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
@@ -1387,8 +1417,8 @@ public class Desktop extends jalview.jbgui.GDesktop
   @Override
   public void quit()
   {
-    System.out.println("********** Desktop.quit()");
-    System.out.println(savingFiles.toString());
+    //System.out.println("********** Desktop.quit()");
+    //System.out.println(savingFiles.toString());
     Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
     jalview.bin.Cache.setProperty("SCREENGEOMETRY_WIDTH",
             screen.width + "");
@@ -2856,7 +2886,7 @@ public class Desktop extends jalview.jbgui.GDesktop
   {
     getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
             .put(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
-                    Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                    Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()),
                     "Quit");
     getRootPane().getActionMap().put("Quit", new AbstractAction()
     {
@@ -2913,18 +2943,18 @@ public class Desktop extends jalview.jbgui.GDesktop
       progressBarHandlers = new Hashtable<>();
     }
 
-    if (progressBars.get(new Long(id)) != null)
+    if (progressBars.get(Long.valueOf(id)) != null)
     {
-      JPanel panel = progressBars.remove(new Long(id));
-      if (progressBarHandlers.contains(new Long(id)))
+      JPanel panel = progressBars.remove(Long.valueOf(id));
+      if (progressBarHandlers.contains(Long.valueOf(id)))
       {
-        progressBarHandlers.remove(new Long(id));
+        progressBarHandlers.remove(Long.valueOf(id));
       }
       removeProgressPanel(panel);
     }
     else
     {
-      progressBars.put(new Long(id), addProgressPanel(message));
+      progressBars.put(Long.valueOf(id), addProgressPanel(message));
     }
   }
 
@@ -2939,13 +2969,13 @@ public class Desktop extends jalview.jbgui.GDesktop
           final IProgressIndicatorHandler handler)
   {
     if (progressBarHandlers == null
-            || !progressBars.containsKey(new Long(id)))
+            || !progressBars.containsKey(Long.valueOf(id)))
     {
       throw new Error(MessageManager.getString(
               "error.call_setprogressbar_before_registering_handler"));
     }
-    progressBarHandlers.put(new Long(id), handler);
-    final JPanel progressPanel = progressBars.get(new Long(id));
+    progressBarHandlers.put(Long.valueOf(id), handler);
+    final JPanel progressPanel = progressBars.get(Long.valueOf(id));
     if (handler.canCancel())
     {
       JButton cancel = new JButton(