JAL-4290 Set structureSelectionManager settings more generically and when no desktop...
[jalview.git] / src / jalview / gui / Desktop.java
index 35afb69..bbd4dae 100644 (file)
@@ -184,7 +184,7 @@ public class Desktop extends jalview.jbgui.GDesktop
             : "&nbsp;<img alt=\"University of Dundee shield\" src=\""
                     + uod_logo_url.toString() + "\">");
     sb.append(
-            "<br><br>For help, see <a href=\"https://www.jalview.org/faq\">www.jalview.org/faq</a> and join <a href=\"https://discourse.jalview.org\">discourse.jalview.org</a>");
+            "<br><br>For help, see <a href=\"https://www.jalview.org/help/faq\">www.jalview.org/faq</a> and join <a href=\"https://discourse.jalview.org\">discourse.jalview.org</a>");
     sb.append("<br><br>If  you use Jalview, please cite:"
             + "<br>Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)"
             + "<br>Jalview Version 2 - a multiple sequence alignment editor and analysis workbench"
@@ -680,22 +680,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     // configure services
     StructureSelectionManager ssm = StructureSelectionManager
             .getStructureSelectionManager(this);
-    if (Cache.getDefault(Preferences.ADD_SS_ANN, true))
-    {
-      ssm.setAddTempFacAnnot(
-              Cache.getDefault(Preferences.ADD_TEMPFACT_ANN, true));
-      ssm.setProcessSecondaryStructure(
-              Cache.getDefault(Preferences.STRUCT_FROM_PDB, true));
-      // JAL-3915 - RNAView is no longer an option so this has no effect
-      ssm.setSecStructServices(
-              Cache.getDefault(Preferences.USE_RNAVIEW, false));
-    }
-    else
-    {
-      ssm.setAddTempFacAnnot(false);
-      ssm.setProcessSecondaryStructure(false);
-      ssm.setSecStructServices(false);
-    }
+    StructureSelectionManager.doConfigureStructurePrefs(ssm);
   }
 
   public void checkForNews()
@@ -1478,16 +1463,21 @@ public class Desktop extends jalview.jbgui.GDesktop
   }
 
   /**
-   * close everything, stash window geometries, and shut down all associated threads/workers  
-   * @param dispose - sets the dispose on close flag - JVM may terminate when set
-   * @param terminateJvm - quit with prejudice - stops the JVM.
+   * close everything, stash window geometries, and shut down all associated
+   * threads/workers
+   * 
+   * @param dispose
+   *          - sets the dispose on close flag - JVM may terminate when set
+   * @param terminateJvm
+   *          - quit with prejudice - stops the JVM.
    */
-  public void quitTheDesktop(boolean dispose, boolean terminateJvm) {
+  public void quitTheDesktop(boolean dispose, boolean terminateJvm)
+  {
     Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
     Cache.setProperty("SCREENGEOMETRY_WIDTH", screen.width + "");
     Cache.setProperty("SCREENGEOMETRY_HEIGHT", screen.height + "");
-    storeLastKnownDimensions("", new Rectangle(getBounds().x,
-            getBounds().y, getWidth(), getHeight()));
+    storeLastKnownDimensions("", new Rectangle(getBounds().x, getBounds().y,
+            getWidth(), getHeight()));
 
     if (jconsole != null)
     {
@@ -1513,7 +1503,21 @@ public class Desktop extends jalview.jbgui.GDesktop
     {
       // suppress a possible repeat prompt to save script
       groovyConsole.setDirty(false);
-      groovyConsole.exit();
+
+      // and tidy up
+      if (((Window) groovyConsole.getFrame()) != null
+              && ((Window) groovyConsole.getFrame()).isVisible())
+      {
+        // console is visible -- FIXME JAL-4327
+        groovyConsole.exit();
+      }
+      else
+      {
+        // console is not, so just let it dispose itself when we shutdown
+        // we don't call groovyConsole.exit() because it calls the shutdown
+        // handler with invokeAndWait() causing deadlock
+        groovyConsole = null;
+      }
     }
 
     if (terminateJvm)
@@ -1530,19 +1534,22 @@ public class Desktop extends jalview.jbgui.GDesktop
       // instance.dispose();
     }
   }
+
   public QuitHandler.QResponse desktopQuit(boolean ui, boolean disposeFlag)
   {
     final Runnable doDesktopQuit = () -> {
 
-      // FIRST !!  check for aborted quit
+      // FIRST !! check for aborted quit
       if (QuitHandler.quitCancelled())
       {
-        jalview.bin.Console.debug("Quit was cancelled - Desktop aborting quit");
+        jalview.bin.Console
+                .debug("Quit was cancelled - Desktop aborting quit");
         return;
       }
-      
+
       // Proceed with quitting
-      quitTheDesktop(disposeFlag, QuitHandler.gotQuitResponse() == QResponse.FORCE_QUIT);
+      quitTheDesktop(disposeFlag,
+              QuitHandler.gotQuitResponse() == QResponse.FORCE_QUIT);
       // and exit the JVM
       instance.quit();
     };
@@ -1552,13 +1559,13 @@ public class Desktop extends jalview.jbgui.GDesktop
   }
 
   /**
-   * Exits the program and the JVM. 
+   * Exits the program and the JVM.
    * 
    * Don't call this directly
    * 
    * - use desktopQuit() above to tidy up first.
    * 
-   * - use closeDesktop() to shutdown Jalview without shutting down the JVM 
+   * - use closeDesktop() to shutdown Jalview without shutting down the JVM
    * 
    */
   @Override
@@ -3067,7 +3074,16 @@ public class Desktop extends jalview.jbgui.GDesktop
    */
   public static void showUrl(final String url)
   {
-    showUrl(url, Desktop.instance);
+    if (url != null && !url.trim().equals(""))
+    {
+      jalview.bin.Console.info("Opening URL: " + url);
+      showUrl(url, Desktop.instance);
+    }
+    else
+    {
+      jalview.bin.Console.warn("Ignoring attempt to show an empty URL.");
+    }
+
   }
 
   /**
@@ -3718,8 +3734,9 @@ public class Desktop extends jalview.jbgui.GDesktop
   }
 
   /**
-   * closes the current instance window, but leaves the JVM running.
-   * Bypasses any shutdown prompts, but does not set window dispose on close in case JVM terminates.
+   * closes the current instance window, but leaves the JVM running. Bypasses
+   * any shutdown prompts, but does not set window dispose on close in case JVM
+   * terminates.
    */
   public static void closeDesktop()
   {