Обработчик, который зарегистрирован для команд вырезания / копирования / вставки, org.eclipse.ui.internal.handlers.WidgetMethodHandler
. Этот обработчик проверяет, объявлен ли данный метод в элементе управления фокусом текущего дисплея. При выполнении этот обработчик вызовет метод с использованием отражения.
Фрагмент от WidgetMethodHandler:
public final boolean isHandled() {
return getMethodToExecute() != null;
}
getMethodToExecute()
найдет текущий элемент управления фокусом, используя Display.getCurrent().getFocusControl()
, а затем проверит, объявлен ли на нем данный метод запуска.
Виджеты, такие как org.eclipse.swt.widgets.Text
, имеют методы cut()
, copy()
и paste()
, поэтому, когда фокус находится на таком виджете, обработчик вернет 'true' для isHandled()
.
Этот обработчик, однако, не знает, когда изменяется текущий элемент управления фокусом (я думаю, что даже нет способа наблюдать это на дисплее), и поэтому не может уведомлять об изменениях в его динамическом состоянии isHandled.
Это приводит к тому, что команды вырезать / копировать / вставить подходят для всплывающих меню, но они довольно проблематичны при использовании на панелях инструментов, поскольку их элементы пользовательского интерфейса не могут быть обновлены должным образом, когда обработчик не уведомляет.
Это оставляет меня либо не использующим эти команды на панели инструментов, либо имеющим механизм опроса для обновления элементов пользовательского интерфейса (что также плохо и подвержено ошибкам). : - (