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 cfcd37e51d0..97d26bacfc6 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 @@ -99,8 +99,10 @@ import org.eclipse.swt.events.ShellEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Decorations; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.testing.TestableObject; @@ -583,6 +585,17 @@ public Object safeCreateGui(MUIElement element, Object parentWidget, } } + if (currentWidget instanceof Menu menu) { + if (parentWidget instanceof Decorations) { + Decorations currentParent = menu.getParent(); + if (currentParent != parentWidget) { + menu.dispose(); + return safeCreateGui(element, parentWidget, parentContext); + } + } + + } + // Reparent the context (or the kid's context) if (element instanceof MContext) { IEclipseContext ctxt = ((MContext) element).getContext();