Eclipse RCP 应用程序键绑定与在文本框中键入冲突

Eclipse RCP application key bindings conflicts with typing in textbox

我已经通过键绑定扩展点将 W,A,S,D 指定为 zooming/scrolling 的热键,这些是全局热键。这会导致无法在文本框中键入 WASD 的问题。我应该如何解决这个问题?我正在考虑禁用热键或在文本框 OnFocus 事件处理程序中做一些事情。

您必须更改热键。 WASD 已经映射为单次按下和与 shift 组合按下。使用普通的箭头键。仅仅为了使用一组不明智的热键而修改每个文本框是不值得的

如果你真的认为W A S D 是很好的键绑定,如果您仍然认为它们可以实现良好的全局键绑定(我都怀疑),您可以使用 key binding contexts 使绑定仅在外部编辑控件时可用。

定义 org.eclipse.ui.contexts 扩展后,将此上下文分配给相应的键绑定,认为 contextId 属性。

现在这些键绑定仅在指定的上下文处于活动状态时才可用。 IContextService 可用于激活和停用上下文。

使用 display filter 在进入 TextSpinnerStyledText 等编辑控件时停用上下文,并在离开此类控件时激活它控制。

例如:

Listener filter = new Listener() {
  IContextActivation activation;
  @Override
  public void handleEvent( Event event ) {
    if( isEditingWidget( event.widget ) ) {
      if( event.type = SWT.FocusIn ) {
        contextService.deactivateContext( activation );
      } else {
        activation = contextService.activateContext( "context id" );
      }
    }
  }
};
display.addFilter( SWT.FocusIn, filter );
display.addFilter( SWT.FocusOut, filter );