Bug 332246 - <visibleWhen> clauses are not honoured on the first popup
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRendererFilter.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRendererFilter.java
index 6547437..9cae116 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRendererFilter.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRendererFilter.java
@@ -28,6 +28,8 @@
import org.eclipse.e4.ui.internal.workbench.swt.Policy;
import org.eclipse.e4.ui.internal.workbench.swt.WorkbenchSWTActivator;
import org.eclipse.e4.ui.model.application.ui.MContext;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MItem;
@@ -37,6 +39,7 @@
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.eclipse.e4.ui.workbench.modeling.ExpressionContext;
import org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory;
+import org.eclipse.e4.ui.workbench.swt.modeling.MenuService;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
@@ -156,6 +159,27 @@
MMenu menuModel = null;
MenuManager menuManager = null;
Object obj = menu.getData(AbstractPartRenderer.OWNING_ME);
+ if (obj == null) {
+ Object tmp = menu
+ .getData("org.eclipse.jface.action.MenuManager.managerKey"); //$NON-NLS-1$
+ if (tmp instanceof MenuManager) {
+ MenuManager tmpManager = (MenuManager) tmp;
+ menuManager = tmpManager;
+ obj = renderer.getMenuModel(tmpManager);
+ if (obj instanceof MPopupMenu) {
+ MPopupMenu popupMenu = (MPopupMenu) obj;
+ if (popupMenu.getWidget() == null
+ && menuManager.getMenu() != null) {
+ final MUIElement container = modelService
+ .getContainer(popupMenu);
+ if (container instanceof MPart) {
+ MenuService.registerMenu(menuManager.getMenu()
+ .getParent(), popupMenu, (MPart) container);
+ }
+ }
+ }
+ }
+ }
if (obj == null && menu.getParentItem() != null) {
obj = menu.getParentItem().getData(AbstractPartRenderer.OWNING_ME);
if (obj == null) {