diff --git a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/panes/VizDisplayPane.java b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/panes/VizDisplayPane.java index faa2e1f86e..bd977944c2 100644 --- a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/panes/VizDisplayPane.java +++ b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/panes/VizDisplayPane.java @@ -206,7 +206,7 @@ public class VizDisplayPane implements IDisplayPane { this.canvas.addDisposeListener(new DisposeListener() { @Override public void widgetDisposed(DisposeEvent e) { - VizDisplayPane.this.dispose(); + VizDisplayPane.this.disposePane(); } }); // set the renderable display @@ -378,12 +378,7 @@ public class VizDisplayPane implements IDisplayPane { return target; } - /* - * (non-Javadoc) - * - * @see com.raytheon.viz.core.gl.IDisplayPane#dispose() - */ - public void dispose() { + private void disposePane() { synchronized (this) { DrawCoordinatorJob.getInstance().unregisterPane(this.container, this); @@ -403,6 +398,21 @@ public class VizDisplayPane implements IDisplayPane { } } + /* + * (non-Javadoc) + * + * @see com.raytheon.viz.core.gl.IDisplayPane#dispose() + */ + public void dispose() { + disposePane(); + + if (canvas.isDisposed() == false) { + // Dispose was called outside of our own canvas listener so + // destroy the canvas composite so the pane disappears + canvasComp.dispose(); + } + } + protected void draw(final boolean actualDraw) { if (renderableDisplay == null) { @@ -809,20 +819,28 @@ public class VizDisplayPane implements IDisplayPane { * Resize the pane */ protected void resize() { - if (canvas == null || canvas.isDisposed()) { - return; + synchronized (this) { + // Schedule this to run so resize can finish if doing multiple panes and + // only called once if layout changing a lot + VizApp.runAsync(new Runnable() { + @Override + public void run() { + if (canvas == null || canvas.isDisposed()) { + return; + } + + target.resize(); + + Rectangle clientArea = canvas.getClientArea(); + if (renderableDisplay != null) { + renderableDisplay.calcPixelExtent(clientArea); + zoomLevel = renderableDisplay + .recalcZoomLevel(renderableDisplay + .getDimensions()); + } + } + }); } - - target.resize(); - - Rectangle clientArea = canvas.getClientArea(); - - if (renderableDisplay != null) { - renderableDisplay.calcPixelExtent(clientArea); - zoomLevel = renderableDisplay.recalcZoomLevel(renderableDisplay - .getDimensions()); - } - refresh(); } /*