对于Bndtools,我创建了PackageExplorerPart的子类,并添加了(非常有用的)搜索Text控件。
但是,当选择/聚焦文本控件时,粘贴的内容将进入TreeView并创建一个片段项目,这很烦人。
我调试了代码,但只能发现PASTE Command处理程序总是转到TreeView而不是焦点控件。不幸的是,我找不到此配置。我试图了解文档,但不知道在哪里查找。
所以基本上我需要知道如何确保我的Text组件始终是PASTE处理程序的目标。
Eclipse中的任何工作台部件都有机会通过IViewSite
或IEditorSite
getActionBars()
方法注册全局动作处理程序。如果将另一个部分作为子类,则需要确保在超类注册其处理程序之后,可以使用自己的处理程序重新分配希望执行的任何操作。
因此,在您的情况下,当您要将“粘贴”重定向到您的Text控件时,可以执行以下操作:
IActionBars actionBars = getViewSite().getActionBars();
IAction originalPaste = actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId());
actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), new Action() {
@Override
public void runWithEvent(Event event) {
Text filterText = filterPart.getFilterControl();
if (Objects.equals(event.widget, filterText)) {
filterText.paste();
} else {
originalPaste.runWithEvent(event);
}
}
});