RCP 快捷键 问题:如何屏蔽掉Eclipse插件本身的快捷键,而只自定义的快捷键功能有效

比如要实现Ctrl+S的Save快捷键时,会出现插件本身的快捷键和自定义的两个快捷键,这样显然不是我们想要的效果。

方案(1)

 
  //屏蔽快捷键
   ((IBindingService)PlatformUI.getWorkbench().getAdapter(IBindingService.class)).setKeyFilterEnabled(false);

PS.:这个能屏蔽所有的Binding 包括自定义的,这显然不合适。

方案(2)

采用默认的ContextID:org.eclipse.ui.contexts.window

  在plugin.xml中实现:

   <extension
         point="org.eclipse.ui.bindings">
      <key
            commandId="org.xxx.SaveConfigHandler"
            contextId="org.eclipse.ui.contexts.window"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
            sequence="CTRL+S">
      </key>
   </extension>


PS:这就导致了标题中提到的问题,同时有两个快捷键。

方案(3)(有效解决方案)

指定自定义ContextID,只有在该ContextID下快捷键才有效,而非默认的ContextID

  在plugin.xml中实现:

 <extension
         point="org.eclipse.ui.bindings">
      <key
            commandId="org.xxxx.SaveConfigHandler"
            contextId="MyConfigEditor.Context"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
            sequence="CTRL+S">
      </key>
   </extension>


同时扩展:

  <extension
         point="org.eclipse.ui.contexts">
      <context
            id="MyConfigEditor.Context"
            name="MyConfigEditor  Context"
            parentId="org.eclipse.ui.contexts.window">
      </context>
   </extension>


(以Editor下Ctrl+S为例:)

在相应的Editor中

重写起init方法如下:

@Override
 public void init(IEditorSite site, IEditorInput input) throws PartInitException {
  super.init(site, input);
   IContextService contextService =(IContextService) getSite().getService(IContextService.class);
   contextService.activateContext("MyConfigEditor.Context");
 }

猜你喜欢

转载自niub.iteye.com/blog/1787594