X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=585537ee553d0d78c5aaeadfd28e0bb27494eb0d;hb=0980e87380e2922790d01bde3f616115f1916a43;hp=3ad5384d626547c262784e60354403d4036d489a;hpb=dda7fb15c035fe454eae0fe85c29c0df922ec271;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 3ad5384..585537e 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -90,6 +90,7 @@ import javax.swing.JProgressBar; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkEvent.EventType; import javax.swing.event.InternalFrameAdapter; @@ -115,12 +116,15 @@ import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.jbgui.GSplitFrame; import jalview.jbgui.GStructureViewer; +import jalview.jbgui.QuitHandler; +import jalview.jbgui.QuitHandler.QResponse; import jalview.project.Jalview2XML; import jalview.structure.StructureSelectionManager; import jalview.urls.IdOrgSettings; import jalview.util.BrowserLauncher; import jalview.util.ChannelProperties; import jalview.util.ImageMaker.TYPE; +import jalview.util.LaunchUtils; import jalview.util.MessageManager; import jalview.util.Platform; import jalview.util.ShortcutKeyMaskExWrapper; @@ -413,6 +417,11 @@ public class Desktop extends jalview.jbgui.GDesktop */ if (Platform.isLinux()) { + if (LaunchUtils.getJavaVersion() >= 11) + { + jalview.bin.Console.info( + "Linux platform only! You may have the following warning next: \"WARNING: An illegal reflective access operation has occurred\"\nThis is expected and cannot be avoided, sorry about that."); + } try { Toolkit xToolkit = Toolkit.getDefaultToolkit(); @@ -445,13 +454,17 @@ public class Desktop extends jalview.jbgui.GDesktop setIconImages(ChannelProperties.getIconList()); + this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() { - @Override public void windowClosing(WindowEvent ev) { - quit(); + QResponse qresponse = desktopQuit(); + if (qresponse != QResponse.CANCEL_QUIT) + { + instance.dispose(); + } } }); @@ -565,15 +578,6 @@ public class Desktop extends jalview.jbgui.GDesktop this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this)); - this.addWindowListener(new WindowAdapter() - { - @Override - public void windowClosing(WindowEvent evt) - { - quit(); - } - }); - MouseAdapter ma; this.addMouseListener(ma = new MouseAdapter() { @@ -1346,11 +1350,22 @@ public class Desktop extends jalview.jbgui.GDesktop } /* - * Exit the program + * Check with user and saving files before actually quitting */ - @Override - public void quit() + public QResponse desktopQuit() { + return desktopQuit(true); + } + + public QResponse desktopQuit(boolean ui) + { + QuitHandler.QResponse qresponse = QuitHandler.getQuitResponse(ui); + + if (qresponse == QResponse.CANCEL_QUIT) + { + return qresponse; + } + Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); Cache.setProperty("SCREENGEOMETRY_WIDTH", screen.width + ""); Cache.setProperty("SCREENGEOMETRY_HEIGHT", screen.height + ""); @@ -1379,6 +1394,30 @@ public class Desktop extends jalview.jbgui.GDesktop groovyConsole.setDirty(false); groovyConsole.exit(); } + + if (qresponse == QResponse.FORCE_QUIT) + { + // note that shutdown hook will not be run + jalview.bin.Console.debug("Force Quit selected by user"); + Runtime.getRuntime().halt(0); + } + + jalview.bin.Console.debug("Quit selected by user"); + quit(); + + // unlikely to reach here! + return QResponse.QUIT; + } + + /** + * Don't call this directly, use desktopQuit() above. Exits the program. + */ + @Override + public void quit() + { + // this will run the shutdownHook but QuitHandler.getQuitResponse() should + // not run a second time if gotQuitResponse flag has been set (i.e. user + // confirmed quit of some kind). System.exit(0); } @@ -2515,7 +2554,12 @@ public class Desktop extends jalview.jbgui.GDesktop @Override public void actionPerformed(ActionEvent e) { - quit(); + QResponse qresponse = desktopQuit(); + if (qresponse == QResponse.CANCEL_QUIT) + { + jalview.bin.Console + .debug("Desktop: Quit action cancelled by user"); + } } }); }