当已经为它注册了一个动作时处理组合键

handle key combination when an action is already registered for it

我的用例是在 TextCellEditors Text 控件中处理 Ctrl (Cmd) + A 组合键,该控件在 "editable" 使用 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 注册了一个 "global" 操作,我什至没有收到该事件。

我怎样才能解决这个问题并让处理程序接收按键事件?

这是我最后做的,不确定它是否是最优雅的解决方案,但肯定有效(在单元格编辑器中):

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 操作,并在编辑器消失后重新启用它