summaryrefslogtreecommitdiff
path: root/designer
diff options
context:
space:
mode:
authorJens Ole Lauridsen <jlauridsen@google.com>2015-07-28 00:56:35 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-07-28 00:56:35 +0000
commitbbda85e01c43c9ddac12887caa28904412b8a862 (patch)
tree8c7cbcade9c55b53ec8352c4f2baa7d1fec7b814 /designer
parent3dcfadf6b2eda3d1b7edeca2530d3c1a78f076b4 (diff)
parentd16547d95531c79f870df6227524fdfdac126a0f (diff)
downloadidea-bbda85e01c43c9ddac12887caa28904412b8a862.tar.gz
Merge "Nele: Fix the disposing of the palette and structure pane." into studio-1.4-dev
Diffstat (limited to 'designer')
-rw-r--r--designer/src/com/android/tools/idea/uibuilder/editor/NlEditorPanel.java4
-rw-r--r--designer/src/com/android/tools/idea/uibuilder/editor/NlPaletteManager.java13
-rw-r--r--designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewForm.java5
-rw-r--r--designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewManager.java7
-rw-r--r--designer/src/com/android/tools/idea/uibuilder/editor/NlStructureManager.java22
-rw-r--r--designer/src/com/android/tools/idea/uibuilder/palette/NlPalettePanel.java2
-rw-r--r--designer/src/com/android/tools/idea/uibuilder/structure/NlComponentTree.java4
-rw-r--r--designer/src/com/android/tools/idea/uibuilder/surface/DesignSurface.java4
8 files changed, 48 insertions, 13 deletions
diff --git a/designer/src/com/android/tools/idea/uibuilder/editor/NlEditorPanel.java b/designer/src/com/android/tools/idea/uibuilder/editor/NlEditorPanel.java
index 6814d152146..d5ea78064d5 100644
--- a/designer/src/com/android/tools/idea/uibuilder/editor/NlEditorPanel.java
+++ b/designer/src/com/android/tools/idea/uibuilder/editor/NlEditorPanel.java
@@ -75,7 +75,6 @@ public class NlEditorPanel extends JPanel implements DesignerEditorPanelFacade,
mySurface.setModel(model);
myContentSplitter = new ThreeComponentsSplitter();
- Disposer.register(editor, myContentSplitter);
// The {@link LightFillLayout} provides the UI for the minimized forms of the {@link LightToolWindow}
// used for the palette and the structure/properties panes.
@@ -141,6 +140,9 @@ public class NlEditorPanel extends JPanel implements DesignerEditorPanelFacade,
}
public void dispose() {
+ NlPaletteManager.get(mySurface.getProject()).dispose(this);
+ NlStructureManager.get(mySurface.getProject()).dispose(this);
+ myContentSplitter.dispose();
}
public void activate() {
diff --git a/designer/src/com/android/tools/idea/uibuilder/editor/NlPaletteManager.java b/designer/src/com/android/tools/idea/uibuilder/editor/NlPaletteManager.java
index d00023fa27e..c252debcfe9 100644
--- a/designer/src/com/android/tools/idea/uibuilder/editor/NlPaletteManager.java
+++ b/designer/src/com/android/tools/idea/uibuilder/editor/NlPaletteManager.java
@@ -94,6 +94,12 @@ public class NlPaletteManager extends NlAbstractWindowManager {
@Override
protected LightToolWindow createContent(@NonNull DesignerEditorPanelFacade designer) {
+ LightToolWindow toolWindow = (LightToolWindow)designer.getClientProperty(getComponentName());
+ if (toolWindow != null) {
+ // Avoid memory leaks for palettes created for the preview form (the palette is shared for all files).
+ return toolWindow;
+ }
+
NlPalettePanel palette = new NlPalettePanel(designer);
palette.setDesignSurface(getDesignSurface(designer));
@@ -114,6 +120,13 @@ public class NlPaletteManager extends NlAbstractWindowManager {
getVisibilityKeyName(designer), 180, palette.getActions());
}
+ @Override
+ public void disposeComponent() {
+ if (myPalette != null) {
+ myPalette.dispose();
+ }
+ }
+
@NonNull
@Override
public String getComponentName() {
diff --git a/designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewForm.java b/designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewForm.java
index f29a72959a2..d06b382b184 100644
--- a/designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewForm.java
+++ b/designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewForm.java
@@ -339,8 +339,11 @@ public class NlPreviewForm implements Disposable, CaretListener, DesignerEditorP
@Override
public void putClientProperty(Object key, Object value) {
+ Project project = myManager.getProject();
+ NlPaletteManager paletteManager = NlPaletteManager.get(project);
+ String paletteKey = paletteManager.getComponentName();
myContentSplitter.putClientProperty(key, value);
- if (value instanceof LightToolWindow) {
+ if (key.equals(paletteKey)) {
myToolWindow = (LightToolWindow) value;
}
}
diff --git a/designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewManager.java b/designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewManager.java
index 3c5ed611c73..7ac7dd9ae6f 100644
--- a/designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewManager.java
+++ b/designer/src/com/android/tools/idea/uibuilder/editor/NlPreviewManager.java
@@ -143,6 +143,13 @@ public class NlPreviewManager implements ProjectComponent {
public void projectClosed() {
if (myToolWindowForm != null) {
Disposer.dispose(myToolWindowForm);
+ NlPaletteManager paletteManager = NlPaletteManager.get(myProject);
+ String paletteKey = paletteManager.getComponentName();
+ LightToolWindow toolWindow = (LightToolWindow)myToolWindowForm.getClientProperty(paletteKey);
+ if (toolWindow != null) {
+ myToolWindowForm.putClientProperty(paletteKey, null);
+ toolWindow.dispose();
+ }
myToolWindowForm = null;
myToolWindow = null;
myToolWindowDisposed = true;
diff --git a/designer/src/com/android/tools/idea/uibuilder/editor/NlStructureManager.java b/designer/src/com/android/tools/idea/uibuilder/editor/NlStructureManager.java
index b7cd99634b3..afdf5e04ab8 100644
--- a/designer/src/com/android/tools/idea/uibuilder/editor/NlStructureManager.java
+++ b/designer/src/com/android/tools/idea/uibuilder/editor/NlStructureManager.java
@@ -77,16 +77,22 @@ public class NlStructureManager extends NlAbstractWindowManager {
@Override
protected LightToolWindow createContent(@NotNull DesignerEditorPanelFacade designer) {
+ if (!(designer instanceof NlEditorPanel)) {
+ // The preview tool window does not have a structure pane.
+ return null;
+ }
NlStructurePanel structurePanel = new NlStructurePanel(getDesignSurface(designer));
- return createContent(designer,
- structurePanel,
- "Structure",
- AllIcons.Toolwindows.ToolWindowStructure,
- structurePanel.getPanel(),
- structurePanel.getPanel(),
- 320,
- null); }
+ return createContent(designer, structurePanel, "Structure", AllIcons.Toolwindows.ToolWindowStructure, structurePanel.getPanel(),
+ structurePanel.getPanel(), 320, null);
+ }
+
+ @Override
+ public void disposeComponent() {
+ if (myStructurePanel != null) {
+ myStructurePanel.dispose();
+ }
+ }
@NotNull
@Override
diff --git a/designer/src/com/android/tools/idea/uibuilder/palette/NlPalettePanel.java b/designer/src/com/android/tools/idea/uibuilder/palette/NlPalettePanel.java
index 93205830cd6..2bf05f1930d 100644
--- a/designer/src/com/android/tools/idea/uibuilder/palette/NlPalettePanel.java
+++ b/designer/src/com/android/tools/idea/uibuilder/palette/NlPalettePanel.java
@@ -65,8 +65,6 @@ import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
-import java.util.Collections;
-import java.util.List;
import static javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER;
import static javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
diff --git a/designer/src/com/android/tools/idea/uibuilder/structure/NlComponentTree.java b/designer/src/com/android/tools/idea/uibuilder/structure/NlComponentTree.java
index d618e187198..1c96c44695d 100644
--- a/designer/src/com/android/tools/idea/uibuilder/structure/NlComponentTree.java
+++ b/designer/src/com/android/tools/idea/uibuilder/structure/NlComponentTree.java
@@ -23,6 +23,7 @@ import com.android.tools.idea.uibuilder.surface.DesignSurface;
import com.android.tools.idea.uibuilder.surface.DesignSurfaceListener;
import com.android.tools.idea.uibuilder.surface.ScreenView;
import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.util.Disposer;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.treeStructure.Tree;
import com.intellij.util.IJSwingUtilities;
@@ -71,7 +72,7 @@ public class NlComponentTree extends Tree implements DesignSurfaceListener, Mode
myId2Node = new HashMap<String, DefaultMutableTreeNode>();
mySelectionIsUpdating = new AtomicBoolean(false);
myUpdateQueue = new MergingUpdateQueue(
- "android.layout.structure-pane", UPDATE_DELAY_MSECS, true, null, designSurface, null, SWING_THREAD);
+ "android.layout.structure-pane", UPDATE_DELAY_MSECS, true, null, null, null, SWING_THREAD);
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(null);
DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);
setModel(treeModel);
@@ -133,6 +134,7 @@ public class NlComponentTree extends Tree implements DesignSurfaceListener, Mode
myModel.getSelectionModel().removeListener(this);
myModel = null;
}
+ Disposer.dispose(myUpdateQueue);
}
private void createCellRenderer() {
diff --git a/designer/src/com/android/tools/idea/uibuilder/surface/DesignSurface.java b/designer/src/com/android/tools/idea/uibuilder/surface/DesignSurface.java
index 9c17f53f284..6905b69068b 100644
--- a/designer/src/com/android/tools/idea/uibuilder/surface/DesignSurface.java
+++ b/designer/src/com/android/tools/idea/uibuilder/surface/DesignSurface.java
@@ -167,6 +167,10 @@ public class DesignSurface extends JPanel implements Disposable, ScalableDesignS
Disposer.register(project, this);
}
+ public Project getProject() {
+ return myProject;
+ }
+
public boolean isCentered() {
return myCentered;
}