在已为其注册操作时处理组合键

时间:2016-10-04 13:27:31

标签: eclipse rcp eclipse-gef

我的用例是处理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都注册了“全局”操作,我甚至都没有收到该事件。

我怎样才能绕过这个并让处理程序接收到关键事件?

1 个答案:

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