如何确保我的键绑定优先于其他定义
How to ensure that my key bindings have priority over other definitions
我正在开发一个 RCP 应用程序。该应用程序有一个执行模式,我想在其中启用各种键绑定来控制开始、停止、继续、重复等。将使用 'ExecutionContext' 启用绑定,该 'ExecutionContext' 在激活任何相关视图时设置。
上下文切换在每个 'Execution' 视图中完成。
@Override
public final void createPartControl(Composite parent)
{
addPartListener();
...
}
private void addPartListener()
{
this.getViewSite().getPage().addPartListener(new IPartListener2()
{
IContextActivation token = null;
@Override
public void partDeactivated(IWorkbenchPartReference partRef)
{
if (token != null)
{
System.out.println("End exec context");
IContextService contextService = (IContextService) PlatformUI.getWorkbench().getService(
IContextService.class);
contextService.deactivateContext(token);
token = null;
}
}
@Override
public void partActivated(IWorkbenchPartReference partRef)
{
System.out.println("Set exec context");
IContextService contextService = (IContextService) PlatformUI.getWorkbench().getService(
IContextService.class);
token = contextService.activateContext("AtfExecutionContext");
}
});
}
我可以通过控制台消息看到我的上下文正在设置并且一些键绑定正在按预期工作。
但是,如果已经从另一个插件分配了键绑定,则该绑定具有优先权。例如。我想使用 Ctrl+F8 停止但是当按下它时我得到 'Next perspective' 动作,即 workbench默认。
绑定定义是
<extension
point="org.eclipse.ui.bindings">
<scheme
id="atfscheme"
name="atfscheme"
parentId="org.eclipse.ui.defaultAcceleratorConfiguration">
</scheme>
<key
commandId="com.xxx.atf.model.ui.commands.ExecKey.Start"
contextId="AtfExecutionContext"
schemeId="atfscheme"
sequence="M1+M2+F5">
<!-- F5 does not work but Ctrl-Shift-F5 does -->
</key>
</extension>
<extension
point="org.eclipse.ui.contexts">
<context
id="AtfExecutionContext"
name="AtfExecutionContext"
parentId="org.eclipse.debug.ui.debugging">
<!-- have tried various parentid values... -->
</context>
</extension>
似乎只有以前未定义的加速器起作用。当我的上下文已设置时,我必须做什么才能覆盖现有定义并激活我的定义?
每个部分都有单独的上下文服务,您必须使用正确的上下文服务。
无需在部分激活/停用时激活/停用上下文。单独的上下文服务将自动处理。
因此在 createPartControl
中激活:
IContextService contextService = getSite().getService(IContextService.class);
token = contextService.activateContext("AtfExecutionContext");
并在部分关闭时停用。
您还定义了一个新的键绑定方案 - 必须单独激活,这不是您想要的。只需删除它并使用 org.eclipse.ui.defaultAcceleratorConfiguration
作为 schemeId
我正在开发一个 RCP 应用程序。该应用程序有一个执行模式,我想在其中启用各种键绑定来控制开始、停止、继续、重复等。将使用 'ExecutionContext' 启用绑定,该 'ExecutionContext' 在激活任何相关视图时设置。
上下文切换在每个 'Execution' 视图中完成。
@Override
public final void createPartControl(Composite parent)
{
addPartListener();
...
}
private void addPartListener()
{
this.getViewSite().getPage().addPartListener(new IPartListener2()
{
IContextActivation token = null;
@Override
public void partDeactivated(IWorkbenchPartReference partRef)
{
if (token != null)
{
System.out.println("End exec context");
IContextService contextService = (IContextService) PlatformUI.getWorkbench().getService(
IContextService.class);
contextService.deactivateContext(token);
token = null;
}
}
@Override
public void partActivated(IWorkbenchPartReference partRef)
{
System.out.println("Set exec context");
IContextService contextService = (IContextService) PlatformUI.getWorkbench().getService(
IContextService.class);
token = contextService.activateContext("AtfExecutionContext");
}
});
}
我可以通过控制台消息看到我的上下文正在设置并且一些键绑定正在按预期工作。
但是,如果已经从另一个插件分配了键绑定,则该绑定具有优先权。例如。我想使用 Ctrl+F8 停止但是当按下它时我得到 'Next perspective' 动作,即 workbench默认。
绑定定义是
<extension
point="org.eclipse.ui.bindings">
<scheme
id="atfscheme"
name="atfscheme"
parentId="org.eclipse.ui.defaultAcceleratorConfiguration">
</scheme>
<key
commandId="com.xxx.atf.model.ui.commands.ExecKey.Start"
contextId="AtfExecutionContext"
schemeId="atfscheme"
sequence="M1+M2+F5">
<!-- F5 does not work but Ctrl-Shift-F5 does -->
</key>
</extension>
<extension
point="org.eclipse.ui.contexts">
<context
id="AtfExecutionContext"
name="AtfExecutionContext"
parentId="org.eclipse.debug.ui.debugging">
<!-- have tried various parentid values... -->
</context>
</extension>
似乎只有以前未定义的加速器起作用。当我的上下文已设置时,我必须做什么才能覆盖现有定义并激活我的定义?
每个部分都有单独的上下文服务,您必须使用正确的上下文服务。
无需在部分激活/停用时激活/停用上下文。单独的上下文服务将自动处理。
因此在 createPartControl
中激活:
IContextService contextService = getSite().getService(IContextService.class);
token = contextService.activateContext("AtfExecutionContext");
并在部分关闭时停用。
您还定义了一个新的键绑定方案 - 必须单独激活,这不是您想要的。只需删除它并使用 org.eclipse.ui.defaultAcceleratorConfiguration
作为 schemeId