我们使用的JFace PreferenceDialog
有一个错误,IPersistentPreferenceStore#save()
引发的异常不会被处理,对话框会在没有用户意识到出错的情况下关闭。
所以我创建了自己的类实现,修复了这个问题,而且#34;只是"需要以某种方式替换命令org.eclipse.ui.window.preferences
定义的默认处理程序。
通常我会这样做:
<extension point="org.eclipse.ui.activities">
<activity id="org.acme.preference.oldPreferenceDialog" name="Remove Preference Dialog">
<enabledWhen>
<with variable="selection">
<count value="-1" />
</with>
</enabledWhen>
</activity>
<activityPatternBinding
activityId="org.acme.preference.oldPreferenceDialog"
isEqualityPattern="true"
pattern="org.eclipse.ui/org.eclipse.ui.window.preferences" />
</activityPatternBinding>
</extension>
除了上述内容之外,哪种方式适用于每个命令。但即使它确实有效,它也不会做我想做的事情 - 我仍然希望得到命令,我只想禁用处理程序,但处理程序没有ID(更不用说定义的那个) &#34; defaultHandler&#34;命令属性。
我可以做些什么来替换命令的首选项对话框/默认处理程序吗?
答案 0 :(得分:1)
自定义context可用于覆盖处理程序。
如果您指定处理程序的activeWhen
子句
<activeWhen>
<with variable="activeContexts">
<iterate operator="or">
<equals value="myContext" /equals>
</iterate>
</with>
</activeWhen>
只要myContext
处于活动状态,自定义处理程序就会优先。
如果 - 在您的情况下 - 自定义处理程序应始终优先,我建议在插件的激活器中激活上下文。