realMenu.notifyListeners(SWT.Show, null);
final Listener passThrough = new Listener() {
public void handleEvent(Event event) {
if (!event.widget.isDisposed()) {
Widget realItem = (Widget) event.widget.getData();
if (!realItem.isDisposed()) {
int style = event.widget.getStyle();
if (event.type == SWT.Selection
&& ((style & (SWT.TOGGLE | SWT.CHECK | SWT.RADIO)) != 0)
&& realItem instanceof MenuItem) {
((MenuItem) realItem)
.setSelection(((MenuItem) event.widget)
.getSelection());
}
event.widget = realItem;
realItem.notifyListeners(event.type, event);
}
}
}
};
MenuItem[] items = realMenu.getItems();
for (int i = 0; i < items.length; i++) {
final MenuItem realItem = items[i];
final MenuItem proxyItem = new MenuItem(proxy, realItem.getStyle());
proxyItem.setData(realItem);
proxyItem.setAccelerator(realItem.getAccelerator());
proxyItem.setEnabled(realItem.getEnabled());
proxyItem.setImage(realItem.getImage());
proxyItem.setSelection(realItem.getSelection());
proxyItem.setText(realItem.getText());
// pass through any events
proxyItem.addListener(SWT.Selection, passThrough);
proxyItem.addListener(SWT.Arm, passThrough);
proxyItem.addListener(SWT.Help, passThrough);
final Menu itemMenu = realItem.getMenu();
if (itemMenu != null) {
// create a proxy for any sub menu items
final Menu subMenu = new Menu(proxy);
subMenu.setData(itemMenu);
proxyItem.setMenu(subMenu);