我正在研究基于 Eclipse 表单的编辑器。我已经向我的编辑器提供了对 Undo Redo 和脏标志处理的支持。这两个功能都适用于单个插件实例。当我用 2 个或更多文件(2 个或更多 eclipse 插件实例)打开它时,问题就来了。现在,撤消重做开始变得奇怪。它们仅适用于最后打开的实例。
例如:假设我的编辑器支持“.xeb”文件。如果我使用编辑器一一打开 test1.xeb 和 test2.xeb 文件。然后撤消重做仅适用于为 test2.xeb 文件打开的实例。如果我切换回其他实例,则会出现第一个实例的撤消重做。
我的编辑器的 plugin.xml 中有以下条目:
<plugin><extension
point="org.eclipse.ui.editors">
<editor
class="Testeditor"
default="true"
extensions="xeb"
icon="icons/sample.gif"
id="testeditor"
name="editor">
</editor>
</plugin>
我调试了代码,发现这种奇怪的行为是由于以错误的方式处理全局动作而发生的。我使用下面的代码来设置全局动作处理程序:
public void setUndoRedoActionHandlers() {
final IActionBars actionBars = getEditorSite().getActionBars();
actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(),
mUndoAction);
actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(),
mRedoAction);
actionBars.updateActionBars();
}
我浏览了一些与此问题相关的链接。但无法理解实现此行为的概念。
http://wiki.eclipse.org/FAQ_How_do_I_find_out_what_view_or_editor_is_selected%3F
http://wiki.eclipse.org/FAQ_How_do_I_hook_into_global_actions,_such_as_Copy_and_Delete%3F
任何人都可以研究这个问题。提前致谢。