package name.abuchen.portfolio.ui.util; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.MenuManager; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; public class ContextMenu { private final Control owner; private final Menu menu; public ContextMenu(Control owner, IMenuListener listener) { this.owner = owner; MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(listener); menu = menuMgr.createContextMenu(owner); owner.addDisposeListener(e -> dispose()); } public ContextMenu hook() { owner.setMenu(menu); return this; } public Menu getMenu() { return menu; } private void dispose() { if (!menu.isDisposed()) menu.dispose(); } }