JAL-4125 Additions to JvOptionPane and QuitHandler with StructureViewerBase handling...
[jalview.git] / src / jalview / gui / Desktop.java
index c120d90..06afe81 100644 (file)
@@ -197,6 +197,8 @@ public class Desktop extends jalview.jbgui.GDesktop
   {
     DRAG_MODE = b ? JDesktopPane.LIVE_DRAG_MODE
             : JDesktopPane.OUTLINE_DRAG_MODE;
+    if (desktop != null)
+      desktop.setDragMode(DRAG_MODE);
   }
 
   private JalviewChangeSupport changeSupport = new JalviewChangeSupport();
@@ -1373,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)
@@ -1381,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
@@ -1543,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)
       {
       }
@@ -2968,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