| ShowViewMenu and activities [message #336239] | 
Tue, 02 June 2009 15:41   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Hi, 
 
I have a question about the behaviour of the Show View Menu in conjunction  
with 
activities, a.k.a. capabilities.  I have a plugin (say pluginB) which 
contributes a viewShortcut and a perspectiveShortcut to a custom  
perspective, 
which exists in pluginA: 
 
<extension point="org.eclipse.ui.perspectiveExtensions"> 
    <perspectiveExtension targetID="pluginA.myPerspective"> 
        <viewShortcut id="pluginB.myView"> 
        </viewShortcut> 
    </perspectiveExtension> 
    <perspectiveExtension targetID="pluginA.myPerspective"> 
        <perspectiveShortcut id="pluginB.myOtherPerspective"> 
        </perspectiveShortcut> 
    </perspectiveExtension> 
</extension> 
 
I also have a extension for org.eclipse.ui.activities.  pluginA is mapped  
to one 
activity, and pluginB and mapped to another activity. E.g. 
 
<extension point="org.eclipse.ui.activities"> 
    <activity id="activityA" name="Activity A"> 
    </activity> 
    <activity id="activityB" name="Activity B"> 
    </activity> 
    <activityPatternBinding activityId="activityA" pattern="pluginA/.*"> 
    </activityPatternBinding> 
    <activityPatternBinding activityId="activityB" pattern="pluginB/.*"> 
    </activityPatternBinding> 
</extension> 
 
If I have pluginA.myPerspective open, I see pluginB.myOtherPerspective in  
the 
Open Perspective menu, and pluginB.myView in the Show View menu, as  
expected. 
When I go to disable activityB in the Capabilities preference page, 
pluginB.myOtherPerspective disappears from the Open Perspective menu  
(good), but 
pluginB.myView remains in the Show View menu (bad). 
 
I was able to trace the issue to the internal class 
org.eclipse.ui.internal.ShowViewMenu.  In particular, it executes the  
following 
when it populates the menu: 
 
for (Iterator i = actions.iterator(); i.hasNext();) { 
    CommandContributionItem item =  
        new CommandContributionItem( 
           (CommandContributionItemParameter) i.next()); 
    if (WorkbenchActivityHelper.filterItem(item)) { 
        item.dispose(); 
        continue; 
    } 
    innerMgr.add(item); 
} 
 
This is the right idea, but WorkbenchActivityHelper has the following  
filterItem 
implementation: 
 
public static final boolean filterItem(Object object) { 
    if (object instanceof IPluginContribution) { 
        ...snip... 
    } 
    return false; 
} 
 
Trouble is, CommandContributionItem is not derived from  
IPluginContribution. 
Therefore, the items are never filtered out. 
 
Am I reading this right?  Are there any workarounds for this issue?  Any  
help 
would be appreciated. 
 
Thanks 
Albert Choi
 |  
 |  
  | 
 | 
Powered by 
FUDForum. Page generated in 0.05129 seconds