+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();
+ }
+ });
+ }
+
+}