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;
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;
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();
+ }
}
});
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()
{
}
/*
- * 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 + "");
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);
}
@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");
+ }
}
});
}