JAL-4125 Additions to JvOptionPane and QuitHandler with StructureViewerBase handling...
[jalview.git] / src / jalview / gui / Desktop.java
index 6a67148..06afe81 100644 (file)
@@ -1375,7 +1375,15 @@ public class Desktop extends jalview.jbgui.GDesktop
       if (jvnews != null)
       {
         storeLastKnownDimensions("JALVIEW_RSS_WINDOW_", jvnews.getBounds());
+      }
+
+      closeAll_actionPerformed(null);
 
+      // check for aborted quit
+      if (QuitHandler.quitCancelled())
+      {
+        jalview.bin.Console.debug("Desktop aborting quit");
+        return null;
       }
 
       if (dialogExecutor != null)
@@ -1383,8 +1391,6 @@ public class Desktop extends jalview.jbgui.GDesktop
         dialogExecutor.shutdownNow();
       }
 
-      closeAll_actionPerformed(null);
-
       if (groovyConsole != null)
       {
         // suppress a possible repeat prompt to save script
@@ -1545,11 +1551,17 @@ public class Desktop extends jalview.jbgui.GDesktop
   {
     // TODO show a progress bar while closing?
     JInternalFrame[] frames = desktop.getAllFrames();
+    boolean quitting = QuitHandler.quitting();
     for (int i = 0; i < frames.length; i++)
     {
       try
       {
         frames[i].setClosed(true);
+        // check for cancelled quit
+        if (quitting && QuitHandler.quitCancelled())
+        {
+          return;
+        }
       } catch (java.beans.PropertyVetoException ex)
       {
       }
@@ -2970,7 +2982,7 @@ public class Desktop extends jalview.jbgui.GDesktop
   /**
    * single thread that handles display of dialogs to user.
    */
-  ExecutorService dialogExecutor = Executors.newSingleThreadExecutor();
+  ExecutorService dialogExecutor = Executors.newFixedThreadPool(3);
 
   /**
    * flag indicating if dialogExecutor should try to acquire a permit