X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FQuitHandler.java;h=1b48c6de42c0544f69fface0d45517508274d946;hb=164fb77632cc3c9a3b5f5ac5290eadec920ffbc6;hp=5d628ffe4287a6a0615bffd2cc84ebbf3b120c54;hpb=dc78f37f49146f6339815e93598159d0c1ddc4c7;p=jalview.git diff --git a/src/jalview/gui/QuitHandler.java b/src/jalview/gui/QuitHandler.java index 5d628ff..1b48c6d 100644 --- a/src/jalview/gui/QuitHandler.java +++ b/src/jalview/gui/QuitHandler.java @@ -1,7 +1,28 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.gui; import java.io.File; import java.util.List; +import java.util.Locale; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; @@ -16,6 +37,7 @@ import javax.swing.JOptionPane; import javax.swing.JTextPane; import com.formdev.flatlaf.extras.FlatDesktop; +import com.formdev.flatlaf.extras.FlatDesktop.QuitResponse; import jalview.api.AlignmentViewPanel; import jalview.bin.Cache; @@ -35,6 +57,8 @@ public class QuitHandler private static boolean interactive = true; + private static QuitResponse flatlafResponse = null; + public static enum QResponse { NULL, QUIT, CANCEL_QUIT, FORCE_QUIT @@ -54,26 +78,17 @@ public class QuitHandler private static ExecutorService executor = Executors.newFixedThreadPool(3); - public static QResponse setQuitHandler() + public static void setQuitHandler() { FlatDesktop.setQuitHandler(response -> { - Runnable performQuit = () -> { - response.performQuit(); - setResponse(QResponse.QUIT); - }; - Runnable performForceQuit = () -> { - response.performQuit(); - setResponse(QResponse.FORCE_QUIT); - }; - Runnable cancelQuit = () -> { - response.cancelQuit(); - // reset - setResponse(QResponse.NULL); - }; - getQuitResponse(true, performQuit, performForceQuit, cancelQuit); + flatlafResponse = response; + Desktop.instance.desktopQuit(); }); + } - return gotQuitResponse(); + public static void startForceQuit() + { + setResponse(QResponse.FORCE_QUIT); } private static QResponse gotQuitResponse = QResponse.NULL; @@ -81,6 +96,11 @@ public class QuitHandler protected static QResponse setResponse(QResponse qresponse) { gotQuitResponse = qresponse; + if ((qresponse == QResponse.CANCEL_QUIT || qresponse == QResponse.NULL) + && flatlafResponse != null) + { + flatlafResponse.cancelQuit(); + } return qresponse; } @@ -180,6 +200,8 @@ public class QuitHandler int count = Desktop.instance.structureViewersStillRunningCount(); if (count > 0) { + String alwaysCloseExternalViewers = Cache + .getDefault("ALWAYS_CLOSE_EXTERNAL_VIEWERS", "ask"); String prompt = MessageManager .formatMessage(count == 1 ? "label.confirm_quit_viewer" : "label.confirm_quit_viewers"); @@ -190,11 +212,22 @@ public class QuitHandler String[] buttonsText = { MessageManager.getString("action.yes"), MessageManager.getString("action.no"), cancelQuitText }; - int confirmResponse = JvOptionPane.showOptionDialog( - Desktop.instance, prompt, title, - JvOptionPane.YES_NO_CANCEL_OPTION, - JvOptionPane.WARNING_MESSAGE, null, buttonsText, - cancelQuit); + int confirmResponse = -1; + if (alwaysCloseExternalViewers == null || "ask".equals( + alwaysCloseExternalViewers.toLowerCase(Locale.ROOT))) + { + confirmResponse = JvOptionPane.showOptionDialog(Desktop.instance, + prompt, title, JvOptionPane.YES_NO_CANCEL_OPTION, + JvOptionPane.WARNING_MESSAGE, null, buttonsText, + cancelQuit); + } + else + { + confirmResponse = Cache + .getDefault("ALWAYS_CLOSE_EXTERNAL_VIEWERS", false) + ? JvOptionPane.YES_OPTION + : JvOptionPane.NO_OPTION; + } if (confirmResponse == JvOptionPane.CANCEL_OPTION) { @@ -282,7 +315,7 @@ public class QuitHandler return QResponse.QUIT; int size = 0; - AlignFrame[] afArray = Desktop.getAlignFrames(); + AlignFrame[] afArray = Desktop.getDesktopAlignFrames(); if (!(afArray == null || afArray.length == 0)) { for (int i = 0; i < afArray.length; i++)