我的用例是处理TextCellEditor
Text
控件中的 Ctrl(Cmd)+ A 组合键,该组合使用gef在“可编辑”标签上打开(语言是scala,抱歉):
text.addKeyListener(new KeyAdapter {
override def keyPressed(e: KeyEvent) = {
val ctrlKey = if (Util.isMac) SWT.COMMAND else SWT.CTRL
if (e.stateMask == ctrlKey && e.keyCode == 'a') {
text.selectAll()
e.doit = false
}
}
})
但是,由于整个gef GraphicalEditor
都注册了“全局”操作,我甚至都没有收到该事件。
我怎样才能绕过这个并让处理程序接收到关键事件?
答案 0 :(得分:0)
以下是我最终要做的事情,不确定它是否是最优雅的解决方案,但肯定有效(在单元格编辑器中):
var originalEnabled: Boolean = true
def globalSelectAllAction = Option(
PlatformUI.getWorkbench
.getActiveWorkbenchWindow
.getActivePage
.getActiveEditor
.getEditorSite
.getActionBars
.getGlobalActionHandler(ActionFactory.SELECT_ALL.getId)
)
override def activate() {
super.activate()
originalEnabled = globalSelectAllAction.map(_.isEnabled).getOrElse(true)
globalSelectAllAction.foreach(_.setEnabled(false))
}
override def deactivate() {
super.deactivate()
globalSelectAllAction.foreach(_.setEnabled(originalEnabled))
}
这会在单元格编辑器处于活动状态时暂时禁用CMD(Ctrl)+ A操作,并在编辑器消失后重新启用它