Bug 298671 Implement enough compatibility to bring up a simple view
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 3e47cba..eca691d 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
@@ -408,7 +408,7 @@
 				EPartService partService = (EPartService) partContext
 						.get(EPartService.class.getName());
 				if (partService.savePart(part, true)) {
-					part.setToBeRendered(false);
+					partService.hidePart(part);
 				} else {
 					// the user has canceled the operation
 					event.doit = false;
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java
index d0bf09e..dde2b55 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java
@@ -11,13 +11,17 @@
 
 package org.eclipse.ui.internal.e4.compatibility;
 
+import java.util.Iterator;
 import javax.inject.Inject;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.e4.core.services.annotations.Optional;
+import org.eclipse.e4.core.services.annotations.PreDestroy;
 import org.eclipse.e4.ui.model.application.MPart;
+import org.eclipse.e4.workbench.modeling.EPartService;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchPartReference;
 import org.eclipse.ui.internal.registry.EditorDescriptor;
@@ -31,6 +35,10 @@
 	CompatibilityEditor(MPart part, EditorReference ref) {
 		super(part);
 		reference = ref;
+
+		if (!part.getTags().contains(EPartService.REMOVE_ON_HIDE_TAG)) {
+			part.getTags().add(EPartService.REMOVE_ON_HIDE_TAG);
+		}
 	}
 
 	protected void createPartControl(final IWorkbenchPart legacyPart, Composite parent) {
@@ -73,4 +81,17 @@
 	public IWorkbenchPartReference getReference() {
 		return reference;
 	}
+
+	@PreDestroy
+	void preDestroy() {
+		WorkbenchPage page = (WorkbenchPage) wrapped.getSite().getPage();
+		for (Iterator<IEditorReference> it = page.getInternalEditorReferences().iterator(); it
+				.hasNext();) {
+			IEditorReference ref = it.next();
+			if (ref.getEditor(false) == wrapped) {
+				it.remove();
+				return;
+			}
+		}
+	}
 }
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/WorkbenchPage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/WorkbenchPage.java
index 412152e..15fb7c3 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/WorkbenchPage.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/WorkbenchPage.java
@@ -141,6 +141,10 @@
 		}
 	}
 
+	List<IEditorReference> getInternalEditorReferences() {
+		return editorReferences;
+	}
+
 	public ViewReference getViewReference(MPart part) {
 		for (IViewReference ref : viewReferences) {
 			if (((ViewReference) ref).getModel() == part) {