Revert "Bug 354538 - Window menus and toolbars leaked after having been closed"
This reverts commit 816f3435bbadbbb83fc129292a6de2a291b3c877.
This caused a severe regression: https://bugs.eclipse.org/518036
Change-Id: I4ed90f63b52b51dc3ba7144ad65b4dfed1527ef3
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java
index 2309720..4d9375e 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java
@@ -18,7 +18,6 @@
* Lars Vogel <Lars.Vogel@vogella.com> - Bug 391430, 472654, 460886
* Daniel Kruegler <daniel.kruegler@gmail.com> - Bug 473779
* Simon Scholz <simon.scholz@vogella.com> - Bug 506306
- * Axel Richard <axel.richard@oebo.fr> - Bug 354538
*******************************************************************************/
package org.eclipse.e4.ui.workbench.renderers.swt;
@@ -885,9 +884,6 @@
public void clearModelToManager(MMenu model, MenuManager manager) {
for (MMenuElement element : model.getChildren()) {
- if (element instanceof MMenu) {
- clearModelToManager((MMenu) element, getManager((MMenu) element));
- }
IContributionItem ici = getContribution(element);
clearModelToContribution(element, ici);
}
@@ -918,12 +914,6 @@
}
public void clearModelToContribution(MMenuElement model, IContributionItem item) {
- if (model instanceof MMenu) {
- for (MMenuElement element : ((MMenu) model).getChildren()) {
- IContributionItem ici = getContribution(element);
- clearModelToContribution(element, ici);
- }
- }
modelToContribution.remove(model);
contributionToModel.remove(item);
if (Policy.DEBUG_RENDERER) {
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java
index b471aca..9950900 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java
@@ -15,7 +15,6 @@
* Sopot Cela <scela@redhat.com> - Bug 472761
* Patrik Suzzi <psuzzi@gmail.com> - Bug 473184
* Simon Scholz <simon.scholz@vogella.com> - Bug 506306
- * Axel Richard <axel.richard@oebo.fr> - Bug 354538
*******************************************************************************/
package org.eclipse.e4.ui.workbench.renderers.swt;
@@ -837,13 +836,6 @@
* @param manager
*/
public void clearModelToManager(MToolBar model, ToolBarManager manager) {
- for (MToolBarElement element : model.getChildren()) {
- if (element instanceof MToolBar) {
- clearModelToManager((MToolBar) element, getManager((MToolBar) element));
- }
- IContributionItem ici = getContribution(element);
- clearModelToContribution(element, ici);
- }
modelToManager.remove(model);
managerToModel.remove(manager);
if (Policy.DEBUG_RENDERER) {
@@ -887,12 +879,6 @@
* @param item
*/
public void clearModelToContribution(MToolBarElement model, IContributionItem item) {
- if (model instanceof MToolBar) {
- for (MToolBarElement element : ((MToolBar) model).getChildren()) {
- IContributionItem ici = getContribution(element);
- clearModelToContribution(element, ici);
- }
- }
modelToContribution.remove(model);
contributionToModel.remove(item);
if (Policy.DEBUG_RENDERER) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
index 462cf84..b296a9f 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
@@ -15,7 +15,6 @@
* Lars Vogel <Lars.Vogel@vogella.com> - Bug 431446, 433979, 440810, 441184, 472654, 486632
* Denis Zygann <d.zygann@web.de> - Bug 457390
* Andrey Loskutov <loskutov@gmx.de> - Bug 372799
- * Axel Richard <axel.richard@obeo.fr> - Bug 354538
*******************************************************************************/
package org.eclipse.ui.internal;
@@ -33,7 +32,6 @@
import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
import javax.inject.Inject;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.expressions.Expression;
@@ -251,10 +249,6 @@
private ActionBarAdvisor actionBarAdvisor;
- private MenuManagerRenderer renderer;
-
- private MMenu mainMenu;
-
private PageListenerList pageListeners = new PageListenerList();
private PerspectiveListenerList perspectiveListeners = new PerspectiveListenerList();
@@ -687,10 +681,10 @@
Shell shell = (Shell) model.getWidget();
if (model.getMainMenu() == null) {
- mainMenu = modelService.createModelElement(MMenu.class);
+ final MMenu mainMenu = modelService.createModelElement(MMenu.class);
mainMenu.setElementId(ActionSet.MAIN_MENU);
- renderer = (MenuManagerRenderer) rendererFactory
+ final MenuManagerRenderer renderer = (MenuManagerRenderer) rendererFactory
.getRenderer(mainMenu, null);
renderer.linkModelToManager(mainMenu, menuManager);
fill(renderer, mainMenu, menuManager);
@@ -791,15 +785,6 @@
}
}
- @PreDestroy
- void preDestroy() {
- if (mainMenu != null) {
- renderer.clearModelToManager(mainMenu, menuManager);
- mainMenu = null;
- }
- renderer = null;
- }
-
private void configureShell(Shell shell, IEclipseContext context) {
String title = getWindowConfigurer().basicGetTitle();
if (title != null) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java
index d6ae0b1..464492e 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java
@@ -264,28 +264,23 @@
ToolBarManager tbm = (ToolBarManager) actionBars.getToolBarManager();
ToolBarManagerRenderer tbmr = (ToolBarManagerRenderer) apr;
tbmr.clearModelToManager(toolbar, tbm);
- clearOpaqueToolBarItems(tbmr, toolbar);
+ // remove opaque mappings
+ for (Iterator<MToolBarElement> it = toolbar.getChildren().iterator(); it.hasNext();) {
+ MToolBarElement element = it.next();
+ if (OpaqueElementUtil.isOpaqueToolItem(element)) {
+ IContributionItem item = tbmr.getContribution(element);
+ if (item != null) {
+ tbmr.clearModelToContribution(element, item);
+ }
+ // clear the reference
+ OpaqueElementUtil.clearOpaqueItem(element);
+ // remove the opaque item
+ it.remove();
+ }
+ }
}
}
super.disposeSite(site);
}
-
- private void clearOpaqueToolBarItems(ToolBarManagerRenderer tbmr, MToolBar toolbar) {
- // remove opaque mappings
- for (Iterator<MToolBarElement> it = toolbar.getChildren().iterator(); it.hasNext();) {
- MToolBarElement element = it.next();
- IContributionItem contribution = tbmr.getContribution(element);
- if (contribution != null) {
- tbmr.clearModelToContribution(element, contribution);
- }
- if (OpaqueElementUtil.isOpaqueToolItem(element)) {
- // clear the reference
- OpaqueElementUtil.clearOpaqueItem(element);
- // remove the opaque item
- it.remove();
- }
- }
- }
-
}