Bug 348069 Closing an additional window of an Eclipse 4 application doesn't unrender it
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java
index 93aaab4..75d4e94 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java
@@ -461,18 +461,7 @@
EPartService partService = (EPartService) window
.getContext().get(
EPartService.class.getName());
- if (partService.saveAll(true)) {
- // unrender the window
- window.setToBeRendered(false);
- Object parent = ((EObject) window).eContainer();
- if (parent instanceof MApplication) {
- // remove it from the application
- ((MApplication) parent).getChildren()
- .remove(window);
- }
- return true;
- }
- return false;
+ return partService.saveAll(true);
}
});
}
diff --git a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java
index e3ef320..c8c9bbe 100644
--- a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java
+++ b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java
@@ -1030,7 +1030,7 @@
// FIXME Without this call the test-suite fails
cleanUp();
if (theApp != null) {
- for (MWindow window : new ArrayList<MWindow>(theApp.getChildren())) {
+ for (MWindow window : theApp.getChildren()) {
if (window.getWidget() != null) {
((Shell) window.getWidget()).close();
}
diff --git a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/PartRenderingEngineTests.java b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/PartRenderingEngineTests.java
index 247d866..6eb2e7c 100644
--- a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/PartRenderingEngineTests.java
+++ b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/PartRenderingEngineTests.java
@@ -2695,63 +2695,6 @@
assertTrue(area.isToBeRendered());
}
- public void testBug348069() {
- MApplication application = ApplicationFactoryImpl.eINSTANCE
- .createApplication();
-
- MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
- application.getChildren().add(window);
- application.setSelectedElement(window);
-
- MPart part = BasicFactoryImpl.eINSTANCE.createPart();
- part.setContributionURI("platform:/plugin/org.eclipse.e4.ui.tests/org.eclipse.e4.ui.tests.workbench.SampleView");
- window.getChildren().add(part);
- window.setSelectedElement(part);
-
- application.setContext(appContext);
- appContext.set(MApplication.class.getName(), application);
-
- wb = new E4Workbench(application, appContext);
- wb.createAndRunUI(window);
-
- SampleView view = (SampleView) part.getObject();
- assertFalse(view.isDestroyed());
-
- ((Shell) window.getWidget()).close();
- assertTrue(view.isDestroyed());
- assertFalse(application.getChildren().contains(window));
- }
-
- public void testBug348069_DetachedWindow() {
- MApplication application = ApplicationFactoryImpl.eINSTANCE
- .createApplication();
-
- MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
- application.getChildren().add(window);
- application.setSelectedElement(window);
-
- MWindow detachedWindow = BasicFactoryImpl.eINSTANCE.createWindow();
- window.getWindows().add(detachedWindow);
-
- MPart part = BasicFactoryImpl.eINSTANCE.createPart();
- part.setContributionURI("platform:/plugin/org.eclipse.e4.ui.tests/org.eclipse.e4.ui.tests.workbench.SampleView");
- detachedWindow.getChildren().add(part);
- detachedWindow.setSelectedElement(part);
-
- application.setContext(appContext);
- appContext.set(MApplication.class.getName(), application);
-
- wb = new E4Workbench(application, appContext);
- wb.createAndRunUI(window);
-
- SampleView view = (SampleView) part.getObject();
- assertFalse(view.isDestroyed());
-
- ((Shell) detachedWindow.getWidget()).close();
- assertTrue(view.isDestroyed());
- assertTrue(window.getWindows().contains(detachedWindow));
- }
-
public void testBug348215_PartOnlyContextReparent() {
MApplication application = ApplicationFactoryImpl.eINSTANCE
.createApplication();
@@ -2860,46 +2803,6 @@
assertTrue(part.getContext().getParent() == window.getContext());
}
- public void testBug348069_DetachedPerspectiveWindow() {
- MApplication application = ApplicationFactoryImpl.eINSTANCE
- .createApplication();
-
- MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
- application.getChildren().add(window);
- application.setSelectedElement(window);
-
- MPerspectiveStack perspectiveStack = AdvancedFactoryImpl.eINSTANCE
- .createPerspectiveStack();
- window.getChildren().add(perspectiveStack);
- window.setSelectedElement(perspectiveStack);
-
- MPerspective perspective = AdvancedFactoryImpl.eINSTANCE
- .createPerspective();
- perspectiveStack.getChildren().add(perspective);
- perspectiveStack.setSelectedElement(perspective);
-
- MWindow detachedWindow = BasicFactoryImpl.eINSTANCE.createWindow();
- perspective.getWindows().add(detachedWindow);
-
- MPart part = BasicFactoryImpl.eINSTANCE.createPart();
- part.setContributionURI("platform:/plugin/org.eclipse.e4.ui.tests/org.eclipse.e4.ui.tests.workbench.SampleView");
- detachedWindow.getChildren().add(part);
- detachedWindow.setSelectedElement(part);
-
- application.setContext(appContext);
- appContext.set(MApplication.class.getName(), application);
-
- wb = new E4Workbench(application, appContext);
- wb.createAndRunUI(window);
-
- SampleView view = (SampleView) part.getObject();
- assertFalse(view.isDestroyed());
-
- ((Shell) detachedWindow.getWidget()).close();
- assertTrue(view.isDestroyed());
- assertTrue(perspective.getWindows().contains(detachedWindow));
- }
-
private MWindow createWindowWithOneView(String partName) {
final MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
window.setHeight(300);