X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=3f457ea05ed12e848ea08d1bf2f241c524e49117;hb=37de9310bec3501cbc6381e0c3dcb282fcaad812;hp=45a52eea151a87f8335eadb6a9a674af212bf692;hpb=a9474b488d0756b465ee507dbba639f62d0dcb85;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 45a52ee..3f457ea 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -64,12 +64,10 @@ import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.beans.PropertyVetoException; import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; @@ -102,6 +100,8 @@ import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkEvent.EventType; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; @@ -397,7 +397,16 @@ public class Desktop extends jalview.jbgui.GDesktop implements @Override public void mousePressed(MouseEvent evt) { - if (evt.isPopupTrigger()) + if (evt.isPopupTrigger()) // Mac + { + showPasteMenu(evt.getX(), evt.getY()); + } + } + + @Override + public void mouseReleased(MouseEvent evt) + { + if (evt.isPopupTrigger()) // Windows { showPasteMenu(evt.getX(), evt.getY()); } @@ -805,32 +814,53 @@ public class Desktop extends jalview.jbgui.GDesktop implements * ((openFrameCount - 1) % 10) + yOffset); } + /* + * add an entry for the new frame in the Window menu + * (and remove it when the frame is closed) + */ final JMenuItem menuItem = new JMenuItem(title); - frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() + frame.addInternalFrameListener(new InternalFrameAdapter() { @Override - public void internalFrameActivated( - javax.swing.event.InternalFrameEvent evt) + public void internalFrameActivated(InternalFrameEvent evt) { JInternalFrame itf = desktop.getSelectedFrame(); if (itf != null) { itf.requestFocus(); } - } @Override - public void internalFrameClosed( - javax.swing.event.InternalFrameEvent evt) + public void internalFrameClosed(InternalFrameEvent evt) { PaintRefresher.RemoveComponent(frame); - openFrameCount--; + + /* + * defensive check to prevent frames being + * added half off the window + */ + if (openFrameCount > 0) + { + openFrameCount--; + } + + /* + * ensure no reference to alignFrame retained by menu item listener + */ + if (menuItem.getActionListeners().length > 0) + { + menuItem.removeActionListener(menuItem.getActionListeners()[0]); + } windowMenu.remove(menuItem); JInternalFrame itf = desktop.getSelectedFrame(); if (itf != null) { itf.requestFocus(); + if (itf instanceof AlignFrame) + { + Jalview.setCurrentAlignFrame((AlignFrame) itf); + } } System.gc(); }; @@ -851,47 +881,6 @@ public class Desktop extends jalview.jbgui.GDesktop implements } } }); - menuItem.addMouseListener(new MouseListener() - { - - @Override - public void mouseReleased(MouseEvent e) - { - } - - @Override - public void mousePressed(MouseEvent e) - { - } - - @Override - public void mouseExited(MouseEvent e) - { - try - { - frame.setSelected(false); - } catch (PropertyVetoException e1) - { - } - } - - @Override - public void mouseEntered(MouseEvent e) - { - try - { - frame.setSelected(true); - } catch (PropertyVetoException e1) - { - } - } - - @Override - public void mouseClicked(MouseEvent e) - { - - } - }); windowMenu.add(menuItem); @@ -952,6 +941,9 @@ public class Desktop extends jalview.jbgui.GDesktop implements public void drop(DropTargetDropEvent evt) { boolean success = true; + // JAL-1552 - acceptDrop required before getTransferable call for + // Java's Transferable for native dnd + evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Transferable t = evt.getTransferable(); java.util.List files = new ArrayList(); java.util.List protocols = new ArrayList(); @@ -1184,6 +1176,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements if (groovyConsole != null) { + // suppress a possible repeat prompt to save script + groovyConsole.setDirty(false); groovyConsole.exit(); } System.exit(0); @@ -1309,6 +1303,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements @Override public void closeAll_actionPerformed(ActionEvent e) { + // TODO show a progress bar while closing? JInternalFrame[] frames = desktop.getAllFrames(); for (int i = 0; i < frames.length; i++) { @@ -1319,6 +1314,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements { } } + Jalview.setCurrentAlignFrame(null); System.out.println("ALL CLOSED"); if (v_client != null) { @@ -1335,6 +1331,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements { ssm.resetAll(); } + System.gc(); } @Override @@ -1804,7 +1801,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements * * @param af */ - public void explodeViews(AlignFrame af) + public static void explodeViews(AlignFrame af) { int size = af.alignPanels.size(); if (size < 2) @@ -2520,8 +2517,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements { getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( KeyStroke.getKeyStroke(KeyEvent.VK_Q, Toolkit - .getDefaultToolkit().getMenuShortcutKeyMask()), - "Quit"); + .getDefaultToolkit().getMenuShortcutKeyMask()), "Quit"); getRootPane().getActionMap().put("Quit", new AbstractAction() { @Override @@ -3187,11 +3183,10 @@ public class Desktop extends jalview.jbgui.GDesktop implements { // Works on Windows and MacOSX Cache.log.debug("Drop handled as javaFileListFlavor"); - evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); for (Object file : (List) t .getTransferData(DataFlavor.javaFileListFlavor)) { - files.add(((File)file).toString()); + files.add(((File) file).toString()); protocols.add(FormatAdapter.FILE); } } @@ -3204,7 +3199,6 @@ public class Desktop extends jalview.jbgui.GDesktop implements { Cache.log.debug("Drop handled as uriListFlavor"); // This is used by Unix drag system - evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); data = (String) t.getTransferData(uriListFlavor); } if (data == null) @@ -3259,7 +3253,6 @@ public class Desktop extends jalview.jbgui.GDesktop implements { Cache.log.debug("Supported transfer dataflavor: " + fl.toString()); - evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Object df = t.getTransferData(fl); if (df != null) {