JAL-1778 deregister as a listener when panel closed
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 15 Jun 2015 11:18:55 +0000 (12:18 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 15 Jun 2015 11:18:55 +0000 (12:18 +0100)
src/jalview/gui/AppVarna.java

index 5f38313..35cd3e5 100644 (file)
  */
 package jalview.gui;
 
-import jalview.bin.Cache;
-import jalview.datamodel.ColumnSelection;
-import jalview.datamodel.SequenceGroup;
-import jalview.datamodel.SequenceI;
-import jalview.structure.SecondaryStructureListener;
-import jalview.structure.SelectionListener;
-import jalview.structure.SelectionSource;
-import jalview.structure.StructureSelectionManager;
-import jalview.structure.VamsasSource;
-import jalview.util.ShiftList;
-
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.util.ArrayList;
@@ -41,10 +30,8 @@ import java.util.regex.Pattern;
 
 import javax.swing.JInternalFrame;
 import javax.swing.JSplitPane;
-
-import jalview.bin.Cache;
-import jalview.util.MessageManager;
-import jalview.util.ShiftList;
+import javax.swing.event.InternalFrameAdapter;
+import javax.swing.event.InternalFrameEvent;
 
 import fr.orsay.lri.varna.VARNAPanel;
 import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax;
@@ -57,6 +44,18 @@ import fr.orsay.lri.varna.models.annotations.HighlightRegionAnnotation;
 import fr.orsay.lri.varna.models.rna.ModeleBase;
 import fr.orsay.lri.varna.models.rna.RNA;
 
+import jalview.bin.Cache;
+import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.structure.SecondaryStructureListener;
+import jalview.structure.SelectionListener;
+import jalview.structure.SelectionSource;
+import jalview.structure.StructureSelectionManager;
+import jalview.structure.VamsasSource;
+import jalview.util.MessageManager;
+import jalview.util.ShiftList;
+
 public class AppVarna extends JInternalFrame implements
         InterfaceVARNAListener, SelectionListener,
         SecondaryStructureListener// implements
@@ -134,6 +133,15 @@ public class AppVarna extends JInternalFrame implements
     // System.out.println(ssm.toString());
     ssm.addStructureViewerListener(this);
     ssm.addSelectionListener(this);
+    addInternalFrameListener(new InternalFrameAdapter()
+    {
+      @Override
+      public void internalFrameClosed(InternalFrameEvent evt)
+      {
+        close();
+      }
+    });
+
   }
 
   public void initVarna()
@@ -447,4 +455,23 @@ public class AppVarna extends JInternalFrame implements
 
   }
 
+  /**
+   * Tidy up as necessary when the viewer panel is closed
+   */
+  protected void close()
+  {
+    /*
+     * Deregister as a listener, to free references to this object
+     */
+    if (ap != null)
+    {
+      StructureSelectionManager ssm = ap.getStructureSelectionManager();
+      if (ssm != null)
+      {
+        ssm.removeStructureViewerListener(AppVarna.this, null);
+        ssm.removeSelectionListener(AppVarna.this);
+      }
+    }
+  }
+
 }