JAL-1713 update from Jalview 2.11.3 develop
[jalview.git] / src / jalview / gui / APQHandlers.java
index fb9b707..00ec217 100644 (file)
  */
 package jalview.gui;
 
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-
-import java.awt.Desktop;
-import java.awt.desktop.AboutEvent;
-import java.awt.desktop.AboutHandler;
-import java.awt.desktop.PreferencesEvent;
-import java.awt.desktop.PreferencesHandler;
-import java.awt.desktop.QuitEvent;
-import java.awt.desktop.QuitHandler;
-import java.awt.desktop.QuitResponse;
-import java.awt.desktop.QuitStrategy;
+import com.formdev.flatlaf.extras.FlatDesktop;
+import com.formdev.flatlaf.extras.FlatDesktop.Action;
 
-import javax.swing.JOptionPane;
+import jalview.util.Platform;
 
 public class APQHandlers
 {
-  private static boolean setAPQHandlers = false;
+  public static boolean setAbout = false;
 
-  public APQHandlers() {
-  }
+  public static boolean setPreferences = false;
+
+  public static boolean setQuit = false;
 
-  protected static boolean setAPQHandlers(jalview.gui.Desktop jalviewDesktop)
+  public static boolean setAPQHandlers(Desktop desktop)
   {
-    // flagging this test to avoid unnecessary reflection
-    if (!setAPQHandlers)
+    if (Platform.isJS())
     {
-      // see if the Quit, About and Preferences handlers are available
-      Class desktopClass = Desktop.class;
-      Desktop hdesktop = Desktop.getDesktop();
-
-      try
-      {
-        Float specversion = Float.parseFloat(
-                System.getProperty("java.specification.version"));
-
-        if (specversion >= 9)
-        {
-          if (Platform.isAMacAndNotJS())
-          {
-            if (desktopClass.getDeclaredMethod("setAboutHandler",
-                    new Class[]
-                    { AboutHandler.class }) != null)
-            {
-
-              hdesktop.setAboutHandler(new AboutHandler()
-              {
-                @Override
-                public void handleAbout(AboutEvent e)
-                {
-                  jalviewDesktop.aboutMenuItem_actionPerformed(null);
-                }
-              });
-
-            }
-
-            if (desktopClass.getDeclaredMethod("setPreferencesHandler",
-                    new Class[]
-                    { PreferencesHandler.class }) != null)
-            {
-
-              hdesktop.setPreferencesHandler(
-                      new PreferencesHandler()
-              {
-                        @Override
-                        public void handlePreferences(
-                                PreferencesEvent e)
-                        {
-                          jalviewDesktop.preferences_actionPerformed(null);
-                        }
-                      });
-
-            }
-
-            if (desktopClass.getDeclaredMethod("setQuitHandler",
-                    new Class[]
-                    { QuitHandler.class }) != null)
-            {
-
-              hdesktop.setQuitHandler(new QuitHandler()
-              {
-                @Override
-                public void handleQuitRequestWith(
-                        QuitEvent e, QuitResponse r)
-                {
-                  boolean confirmQuit = jalview.bin.Cache
-                          .getDefault(
-                                  jalview.gui.Desktop.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");
-                    jalviewDesktop.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);
-
-            }
-          }
-          setAPQHandlers = true;
-        }
-        else
-        {
-          System.out.println(
-                  "Not going to try setting APQ Handlers as java.spec.version is "
-                          + specversion);
-        }
-
-      } catch (Exception e)
-      {
-        System.out.println(
-                "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();
-      }
-
+      return false;
+    }
+    if (FlatDesktop.isSupported(Action.APP_ABOUT))
+    {
+      FlatDesktop.setAboutHandler(() -> {
+        desktop.aboutMenuItem_actionPerformed(null);
+      });
+      setAbout = true;
+    }
+    if (FlatDesktop.isSupported(Action.APP_PREFERENCES))
+    {
+      FlatDesktop.setPreferencesHandler(() -> {
+        desktop.preferences_actionPerformed(null);
+      });
+      setPreferences = true;
+    }
+    if (FlatDesktop.isSupported(Action.APP_QUIT_HANDLER))
+    {
+      QuitHandler.setQuitHandler();
+      setQuit = true;
     }
-    
-    return setAPQHandlers;
+    // if we got to here, no exceptions occurred when we set the handlers.
+    return setAbout || setPreferences || setQuit;
   }
 
 }