Переопределение isEnabled()
метод MenuManager
не имеет никакого эффекта.Что вы можете сделать, это получить доступ к связанным MenuItem
и попытаться отключить его.
Сначала вы добавляете IMenuListener
в свой менеджер "контекстного меню"для доступа к ассоциированному Menu
:
public void menuAboutToShow(IMenuManager manager) {
manager.getMenu().addListener(SWT.Show, showContextMenuListener);
}
В слушателе вы найдете MenuItem
, который соответствует вашему менеджеру подменю:
public void handleEvent(Event event) {
for (MenuItem item: ((Menu)event.widget).getItems())
//MenuItem data should be our MenuManager
if (item.getData().equals(subMenu)) {
//Disable the sub-menu item
item.setEnabled(false);
//Add listener to sub-menu (see comments below the code block)
item.getMenu().addListener(SWT.Show, showSubMenuListener);
}
}
Проблемаэто означает, что в классе MenuManager
есть код исправления ошибки, который снова включит ваш элемент подменю после щелчка (в случае, если он содержит какие-либо элементы).Чтобы отменить это, вам также необходимо добавить SWT.Show
слушатель в подменю, которое будет обновлять включение элемента подменю, когда меню становится видимым после щелчка:
public void handleEvent(Event event) {
((Menu)event.widget).getParentItem().setEnabled(false);
}