More work on Bug 270597 - [UI] Need to handle perspectives properly
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/SWTPartRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/SWTPartRenderer.java
index 50c0004..b1566fa 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/SWTPartRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/SWTPartRenderer.java
@@ -311,7 +311,7 @@
 	public void childRemoved(MPart<?> parentElement, MPart<?> child) {
 		super.childRemoved(parentElement, child);
 
-		if (child.getWidget() instanceof Control) {
+		if (child.isVisible() && child.getWidget() instanceof Control) {
 			Control ctrl = (Control) child.getWidget();
 			locallyHide(ctrl);
 		}
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackRenderer.java
index f750870..c7351b6 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackRenderer.java
@@ -53,6 +53,7 @@
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.ToolBar;
 import org.eclipse.swt.widgets.ToolItem;
 import org.eclipse.swt.widgets.Widget;
@@ -330,7 +331,13 @@
 		boolean isEditorStack = policy != null
 				&& policy.indexOf("EditorStack") >= 0; //$NON-NLS-1$
 		if (ctf.getItemCount() == 0 && !isEditorStack) {
+			final Shell sh = ctf.getShell();
 			parentElement.setVisible(false);
+			sh.getDisplay().asyncExec(new Runnable() {
+				public void run() {
+					sh.layout(true, true);
+				}
+			});
 		}
 
 		// Auto-remove 'editor stack' entries on close