2

我正在开发一个 Eclipse RCP 应用程序,并为我的编辑器定义了一个自定义上下文 (org.eclipse.ui.contexts)。每当我调用我的一位编辑器时,都会激活此上下文。

此外,我已经定义了一个单键键绑定(org.eclipse.ui.bindings),我已经将其限定在这个上下文中,当在编辑器上下文中键入它时,它会调用一个命令/处理程序(我将使用字母'J ' 对于这个例子)。

一切都按预期工作。当我启动/选择我的一个自定义编辑器时,上下文被激活并且“J”执行我的处理程序。当我启动/选择视图部件时,我的自定义编辑器的上下文被停用并且“J”不再执行处理程序。但是,当我单击窗口修剪区域中某处的文本小部件时(比如说快速访问字段)并键入字母“J”,击键被消耗并执行我的处理程序,这是我不想要的行为。

原因是选择另一个工作台部件具有激活其上下文并停用前一个的效果。但是,单击工作台窗口区域中的任何其他位置(除了另一个部分)不会停用先前的上下文。我确信这是设计使然,并且是一种完全合理的方法。但是,它阻止我定义单键键绑定。

有没有人a)以前遇到过这个问题,b)如果有,你是怎么解决的?

现在,我正在使用一个完整的 hack,它涉及使用全局侦听器在检测到进入 Text 小部件时完全禁用键绑定服务,并在退出 Text 小部件时重新启用它。

4

1 回答 1

0

在扩展点<extension point="org.eclipse.ui.bindings">中,不要指定将替换现有密钥的命令 ID。

有关详细信息,请参阅文档

commandId - 分配了此键绑定指定的键序列的命令的唯一标识符。如果此属性的值为空字符串,则键序列被分配给内部“无操作”命令。这对于在特定的键配置和上下文中“取消定义”键绑定很有用,这些键可能是从它们的父级借来的。

于 2015-07-01T07:50:22.777 回答