X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=40e6ccfb3a833732cb205c7cdf231bb9c50e9ce7;hb=8f750561f9693fbe9bbc7deb48b3d94815d49073;hp=647971e7ac8dfd21a4968128b42e6ea37feb125e;hpb=b9bde68b87a581a1f21e47cb19839791a192134a;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 647971e..40e6ccf 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -67,6 +67,7 @@ import java.awt.desktop.PreferencesHandler; import java.awt.desktop.QuitEvent; import java.awt.desktop.QuitHandler; import java.awt.desktop.QuitResponse; +import java.awt.desktop.QuitStrategy; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; @@ -151,6 +152,8 @@ public class Desktop extends jalview.jbgui.GDesktop private static final String EXPERIMENTAL_FEATURES = "EXPERIMENTAL_FEATURES"; + private static final String CONFIRM_KEYBOARD_QUIT = "CONFIRM_KEYBOARD_QUIT"; + public static HashMap savingFiles = new HashMap<>(); private JalviewChangeSupport changeSupport = new JalviewChangeSupport(); @@ -162,6 +165,8 @@ public class Desktop extends jalview.jbgui.GDesktop private File projectFile; + private static boolean setAPQHandlers = false; + /** * @param listener * @see jalview.gui.JalviewChangeSupport#addJalviewPropertyChangeListener(java.beans.PropertyChangeListener) @@ -354,63 +359,111 @@ public class Desktop extends jalview.jbgui.GDesktop doConfigureStructurePrefs(); setTitle("Jalview " + jalview.bin.Cache.getProperty("VERSION")); - // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - /* comments - * galore - * to - * change the line numbers - */ - /* if (!Platform.isAMac()) { // this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } else + { + this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); + } */ - // { - // this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); - java.awt.Desktop hdesktop = java.awt.Desktop.getDesktop(); - hdesktop.setAboutHandler(new AboutHandler() - { - @Override - public void handleAbout(AboutEvent e) - { - aboutMenuItem_actionPerformed(null); - } - }); - hdesktop.setPreferencesHandler(new PreferencesHandler() - { - @Override - public void handlePreferences(PreferencesEvent e) - { - preferences_actionPerformed(null); - } - }); - hdesktop.setQuitHandler(new QuitHandler() + // flagging this test to avoid unnecessary reflection + if (!setAPQHandlers) { - @Override - public void handleQuitRequestWith(QuitEvent e, QuitResponse r) + // see if the Quit, About and Preferences handlers are available + Class desktopClass = java.awt.Desktop.class; + java.awt.Desktop hdesktop = java.awt.Desktop.getDesktop(); + + try { - int n = JOptionPane.showConfirmDialog(null, - MessageManager.getString("label.quit_jalview"), - MessageManager.getString("action.quit"), - JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, - null); - if (n == JOptionPane.OK_OPTION) + + if (desktopClass.getDeclaredMethod("setAboutHandler", + new Class[] + { AboutHandler.class }) != null) { - System.out.println("Shortcut Quit confirmed by user"); - quit(); + + hdesktop.setAboutHandler(new AboutHandler() + { + @Override + public void handleAbout(AboutEvent e) + { + aboutMenuItem_actionPerformed(null); + } + }); + } - else + + if (desktopClass.getDeclaredMethod("setPreferencesHandler", + new Class[] + { PreferencesHandler.class }) != null) + { + + hdesktop.setPreferencesHandler(new PreferencesHandler() + { + @Override + public void handlePreferences(PreferencesEvent e) + { + preferences_actionPerformed(null); + } + }); + + } + + if (desktopClass.getDeclaredMethod("setQuitHandler", + new Class[] + { QuitHandler.class }) != null) { - System.out.println("Shortcut Quit cancelled by user"); + + hdesktop.setQuitHandler(new QuitHandler() + { + @Override + public void handleQuitRequestWith(QuitEvent e, QuitResponse r) + { + boolean confirmQuit = jalview.bin.Cache + .getDefault(CONFIRM_KEYBOARD_QUIT, true); + int n; + if (confirmQuit) + { + n = JOptionPane.showConfirmDialog(null, + MessageManager.getString("label.quit_jalview"), + MessageManager.getString("action.quit"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.PLAIN_MESSAGE, null); + } + else + { + n = JOptionPane.OK_OPTION; + } + if (n == JOptionPane.OK_OPTION) + { + System.out.println("Shortcut Quit confirmed by user"); + quit(); + r.performQuit(); // probably won't reach this line, but just in + // case + } + else + { + r.cancelQuit(); + System.out.println("Shortcut Quit cancelled by user"); + } + } + }); + hdesktop.setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS); + } + + } catch (NoSuchMethodException e) + { + System.out.println( + "NoSuchMethodException when looking for About, Preferences, Quit Handlers"); + e.printStackTrace(); } - }); - // } + setAPQHandlers = true; + } addWindowListener(new WindowAdapter() {