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) {