Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java21
1 files changed, 16 insertions, 5 deletions
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 166e57d5601..80c69cd90a0 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
@@ -174,6 +174,22 @@ public class MenuManagerRenderer extends SWTPartRenderer {
}
}
}
+
+ if (element instanceof MPart) {
+ MPart part = (MPart) element;
+ if (UIEvents.UIElement.TOBERENDERED.equals(attName)) {
+ boolean tbr = (Boolean) event
+ .getProperty(UIEvents.EventTags.NEW_VALUE);
+ if (!tbr) {
+ List<MMenu> menus = part.getMenus();
+ for (MMenu menu : menus) {
+ if (menu instanceof MPopupMenu)
+ unlinkMenu(menu);
+ }
+ }
+ }
+ }
+
if (UIEvents.UIElement.VISIBLE.equals(attName)) {
if (element instanceof MMenu) {
MMenu menuModel = (MMenu) element;
@@ -384,11 +400,6 @@ public class MenuManagerRenderer extends SWTPartRenderer {
}
}
- if (menuModel instanceof MPopupMenu)
- unlinkMenu(menuModel);
-
- // The cleanup() is called recursively via cleanUpCopy(), hence
- // the need to do a separate pass to remove disposed records:
Iterator<Entry<MMenuElement, ContributionRecord>> iterator = modelContributionToRecord
.entrySet().iterator();
for (; iterator.hasNext();) {

Back to the top