X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=1c554767e63e58c25cc50e5f22f56904e0b89f7a;hb=4ce97aceb541e3afaed87cdc444d2f52d1ebc944;hp=ba7665b45217f922683daf6ac61719486ae595ca;hpb=a5928e2c1b9e2cea8d9c43f3d03f9cce2604f3b2;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index ba7665b..1c55476 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -105,6 +105,10 @@ import jalview.api.AlignmentViewPanel; import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Cache; import jalview.bin.Jalview; +import jalview.datamodel.Alignment; +import jalview.datamodel.HiddenColumns; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; import jalview.gui.ImageExporter.ImageWriterI; import jalview.gui.QuitHandler.QResponse; import jalview.io.BackupFiles; @@ -431,9 +435,14 @@ public class Desktop extends jalview.jbgui.GDesktop { if (LaunchUtils.getJavaVersion() >= 11) { - jalview.bin.Console.info( + /* + * Send this message to stderr as the warning that follows (due to + * reflection) also goes to stderr. + */ + System.err.println( "Linux platform only! You may have the following warning next: \"WARNING: An illegal reflective access operation has occurred\"\nThis is expected and cannot be avoided, sorry about that."); } + final String awtAppClassName = "awtAppClassName"; try { Toolkit xToolkit = Toolkit.getDefaultToolkit(); @@ -441,10 +450,10 @@ public class Desktop extends jalview.jbgui.GDesktop Field awtAppClassNameField = null; if (Arrays.stream(declaredFields) - .anyMatch(f -> f.getName().equals("awtAppClassName"))) + .anyMatch(f -> f.getName().equals(awtAppClassName))) { awtAppClassNameField = xToolkit.getClass() - .getDeclaredField("awtAppClassName"); + .getDeclaredField(awtAppClassName); } String title = ChannelProperties.getProperty("app_name"); @@ -455,11 +464,12 @@ public class Desktop extends jalview.jbgui.GDesktop } else { - jalview.bin.Console.debug("XToolkit: awtAppClassName not found"); + jalview.bin.Console + .debug("XToolkit: " + awtAppClassName + " not found"); } } catch (Exception e) { - jalview.bin.Console.debug("Error setting awtAppClassName"); + jalview.bin.Console.debug("Error setting " + awtAppClassName); jalview.bin.Console.trace(Cache.getStackTraceString(e)); } } @@ -799,26 +809,64 @@ public class Desktop extends jalview.jbgui.GDesktop public void paste() { - try + // quick patch for JAL-4150 - needs some more work and test coverage + // TODO - unify below and AlignFrame.paste() + // TODO - write tests and fix AlignFrame.paste() which doesn't track if + // clipboard has come from a different alignment window than the one where + // paste has been called! JAL-4151 + + if (Desktop.jalviewClipboard != null) { - Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); - Transferable contents = c.getContents(this); + // The clipboard was filled from within Jalview, we must use the + // sequences + // And dataset from the copied alignment + SequenceI[] newseq = (SequenceI[]) Desktop.jalviewClipboard[0]; + // be doubly sure that we create *new* sequence objects. + SequenceI[] sequences = new SequenceI[newseq.length]; + for (int i = 0; i < newseq.length; i++) + { + sequences[i] = new Sequence(newseq[i]); + } + Alignment alignment = new Alignment(sequences); + // dataset is inherited + alignment.setDataset((Alignment) Desktop.jalviewClipboard[1]); + AlignFrame af = new AlignFrame(alignment, AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + String newtitle = new String("Copied sequences"); + + if (Desktop.jalviewClipboard[2] != null) + { + HiddenColumns hc = (HiddenColumns) Desktop.jalviewClipboard[2]; + af.viewport.setHiddenColumns(hc); + } + + Desktop.addInternalFrame(af, newtitle, AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); - if (contents != null) + } + else + { + try { - String file = (String) contents - .getTransferData(DataFlavor.stringFlavor); + Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); + Transferable contents = c.getContents(this); + + if (contents != null) + { + String file = (String) contents + .getTransferData(DataFlavor.stringFlavor); - FileFormatI format = new IdentifyFile().identify(file, - DataSourceType.PASTE); + FileFormatI format = new IdentifyFile().identify(file, + DataSourceType.PASTE); - new FileLoader().LoadFile(file, DataSourceType.PASTE, format); + new FileLoader().LoadFile(file, DataSourceType.PASTE, format); + } + } catch (Exception ex) + { + System.out.println( + "Unable to paste alignment from system clipboard:\n" + ex); } - } catch (Exception ex) - { - System.out.println( - "Unable to paste alignment from system clipboard:\n" + ex); } } @@ -1436,8 +1484,7 @@ public class Desktop extends jalview.jbgui.GDesktop // 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.out.println("Desktop exiting."); - System.exit(0); + Jalview.exit("Desktop exiting.", 0); } private void storeLastKnownDimensions(String string, Rectangle jc)