JAL-1988 JAL-3772 Quit confirmation dialog boxes with saving files check and wait
[jalview.git] / src / jalview / jbgui / GDesktop.java
index f3d9a65..7b4f477 100755 (executable)
@@ -32,7 +32,9 @@ import javax.swing.JMenuItem;
 
 import jalview.api.AlignmentViewPanel;
 import jalview.bin.Cache;
+import jalview.gui.Desktop;
 import jalview.io.FileFormatException;
+import jalview.jbgui.QuitHandler.QResponse;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
 
@@ -140,6 +142,7 @@ 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
@@ -147,7 +150,7 @@ public class GDesktop extends JFrame
      */
     try
     {
-      APQHandlers.setAPQHandlers(this);
+      apqHandlersSet = APQHandlers.setAPQHandlers(this);
     } catch (Exception e)
     {
       System.out.println("Cannot set APQHandlers");
@@ -212,7 +215,14 @@ public class GDesktop extends JFrame
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        quit();
+        QResponse qresponse = Desktop.instance != null
+                ? Desktop.instance.desktopQuit()
+                : QResponse.QUIT;
+        if (qresponse == QResponse.CANCEL_QUIT)
+        {
+          jalview.bin.Console
+                  .debug("GDesktop: Quit action cancelled by user");
+        }
       }
     });
     aboutMenuItem.setText(MessageManager.getString("label.about"));
@@ -389,10 +399,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);
@@ -404,13 +410,16 @@ public class GDesktop extends JFrame
     FileMenu.add(saveAsState);
     FileMenu.add(loadState);
     FileMenu.addSeparator();
-    FileMenu.add(quit);
-    if (!APQHandlers.setAPQHandlers)
+    if (!APQHandlers.setQuit)
+    {
+      FileMenu.add(quit);
+    }
+    if (!APQHandlers.setAbout)
     {
       HelpMenu.add(aboutMenuItem);
     }
     HelpMenu.add(documentationMenuItem);
-    if (!APQHandlers.setAPQHandlers)
+    if (!APQHandlers.setPreferences)
     {
       toolsMenu.add(preferences);
     }