如何替换默认处理程序

时间:2016-01-25 07:16:44

标签: eclipse-plugin

我们使用的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;命令属性。

我可以做些什么来替换命令的首选项对话框/默认处理程序吗?

1 个答案:

答案 0 :(得分:1)

自定义context可用于覆盖处理程序。

如果您指定处理程序的activeWhen子句

<activeWhen>
  <with variable="activeContexts">
    <iterate operator="or">
      <equals value="myContext" /equals>
    </iterate>
  </with>
</activeWhen>

只要myContext处于活动状态,自定义处理程序就会优先。

如果 - 在您的情况下 - 自定义处理程序应始终优先,我建议在插件的激活器中激活上下文。