X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FQuitHandler.java;fp=src%2Fjalview%2Fgui%2FQuitHandler.java;h=429de553e63309bb53f01433c36cf6c48eb8aca5;hb=d90302c57e61e425f6a8fc52f6ab59ac28d32310;hp=75ff0b0616d5776ca108c2c65793f8d515e73d6d;hpb=4c007a518fc7e2fdaa863f16cb715f8e45e6cfbf;p=jalview.git diff --git a/src/jalview/gui/QuitHandler.java b/src/jalview/gui/QuitHandler.java index 75ff0b0..429de55 100644 --- a/src/jalview/gui/QuitHandler.java +++ b/src/jalview/gui/QuitHandler.java @@ -33,8 +33,6 @@ public class QuitHandler private static final int MAX_WAIT_FOR_SAVE = 20000; - private static final int NON_INTERACTIVE_WAIT_CYCLES = 2; - public static enum QResponse { NULL, QUIT, CANCEL_QUIT, FORCE_QUIT @@ -45,23 +43,23 @@ public class QuitHandler public static QResponse setQuitHandler() { FlatDesktop.setQuitHandler(response -> { - Callable performQuit = () -> { + Callable performQuit = () -> { response.performQuit(); - return setResponse(QResponse.QUIT); + setResponse(QResponse.QUIT); + return null; }; - Callable performForceQuit = () -> { + Callable performForceQuit = () -> { response.performQuit(); - return setResponse(QResponse.FORCE_QUIT); + setResponse(QResponse.FORCE_QUIT); + return null; }; - Callable cancelQuit = () -> { + Callable cancelQuit = () -> { response.cancelQuit(); // reset setResponse(QResponse.NULL); - // but return cancel - return QResponse.CANCEL_QUIT; + return null; }; - QResponse qresponse = getQuitResponse(true, performQuit, - performForceQuit, cancelQuit); + getQuitResponse(true, performQuit, performForceQuit, cancelQuit); }); return gotQuitResponse(); @@ -80,24 +78,25 @@ public class QuitHandler return gotQuitResponse; } - public static final Callable defaultCancelQuit = () -> { + public static final Callable defaultCancelQuit = () -> { Console.debug("QuitHandler: (default) Quit action CANCELLED by user"); // reset setResponse(QResponse.NULL); - // and return cancel - return QResponse.CANCEL_QUIT; + return null; }; - public static final Callable defaultOkQuit = () -> { + public static final Callable defaultOkQuit = () -> { Console.debug("QuitHandler: (default) Quit action CONFIRMED by user"); - return setResponse(QResponse.QUIT); + setResponse(QResponse.QUIT); + return null; }; - public static final Callable defaultForceQuit = () -> { + public static final Callable defaultForceQuit = () -> { Console.debug("QuitHandler: (default) Quit action FORCED by user"); // note that shutdown hook will not be run Runtime.getRuntime().halt(0); - return setResponse(QResponse.FORCE_QUIT); // this line never reached! + setResponse(QResponse.FORCE_QUIT); // this line never reached! + return null; }; public static QResponse getQuitResponse(boolean ui) @@ -108,9 +107,8 @@ public class QuitHandler private static boolean interactive = true; - public static QResponse getQuitResponse(boolean ui, - Callable okQuit, Callable forceQuit, - Callable cancelQuit) + public static QResponse getQuitResponse(boolean ui, Callable okQuit, + Callable forceQuit, Callable cancelQuit) { QResponse got = gotQuitResponse(); if (got != QResponse.NULL && got != QResponse.CANCEL_QUIT) @@ -179,13 +177,13 @@ public class QuitHandler if (Cache.getDefault("WAIT_FOR_SAVE", true) && BackupFiles.hasSavesInProgress()) { - QResponse waitResponse = waitQuit(interactive, okQuit, forceQuit, - cancelQuit); + waitQuit(interactive, okQuit, forceQuit, cancelQuit); + QResponse waitResponse = gotQuitResponse(); wait = waitResponse == QResponse.QUIT; } } - Callable next = null; + Callable next = null; switch (gotQuitResponse()) { case QUIT: @@ -200,7 +198,8 @@ public class QuitHandler } try { - got = executor.submit(next).get(); + executor.submit(next).get(); + got = gotQuitResponse(); } catch (InterruptedException | ExecutionException e) { jalview.bin.Console @@ -208,12 +207,18 @@ public class QuitHandler } setResponse(got); + if (gotQuitResponse() == QResponse.CANCEL_QUIT) + { + // reset if cancelled + setResponse(QResponse.NULL); + return QResponse.CANCEL_QUIT; + } return gotQuitResponse(); } private static QResponse waitQuit(boolean interactive, - Callable okQuit, Callable forceQuit, - Callable cancelQuit) + Callable okQuit, Callable forceQuit, + Callable cancelQuit) { // check for saves in progress if (!BackupFiles.hasSavesInProgress()) @@ -241,7 +246,6 @@ public class QuitHandler int waitTime = Math.min(MAX_WAIT_FOR_SAVE, Math.max(MIN_WAIT_FOR_SAVE, size / 2)); Console.debug("Set waitForSave to " + waitTime); - QResponse waitResponse = QResponse.NULL; int iteration = 0; boolean doIterations = true; // note iterations not used in the gui now, @@ -373,9 +377,7 @@ public class QuitHandler } // end if interactive } // end while wait iteration loop - waitResponse = gotQuitResponse(); - - return waitResponse; + return gotQuitResponse(); }; private static String waitingForSaveMessage()