package jalview.jbgui; import javax.swing.JFrame; import javax.swing.JOptionPane; import com.formdev.flatlaf.extras.FlatDesktop; import jalview.util.MessageManager; public class QuitHandler { public static void setQuitHandler() { FlatDesktop.setQuitHandler(response -> { boolean confirmQuit = jalview.bin.Cache .getDefault(jalview.gui.Desktop.CONFIRM_KEYBOARD_QUIT, true); boolean canQuit = !confirmQuit; int n; if (confirmQuit) { // ensure Jalview window is brought to front for Quit confirmation // window to be visible // this method of raising the Jalview window is broken in java // jalviewDesktop.setVisible(true); // jalviewDesktop.toFront(); // a better hack which works instead JFrame dialogParent = new JFrame(); dialogParent.setAlwaysOnTop(true); n = JOptionPane.showConfirmDialog(dialogParent, MessageManager.getString("label.quit_jalview"), MessageManager.getString("action.quit"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null); dialogParent.setAlwaysOnTop(false); dialogParent.dispose(); } else { n = JOptionPane.OK_OPTION; } canQuit = (n == JOptionPane.OK_OPTION); if (canQuit) { response.performQuit(); } else { response.cancelQuit(); } }); } }