diff options
-rw-r--r-- | bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java | 21 |
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();) { |