Skip to content

Commit a44d462

Browse files
committed
Filter e4 view contributions in "Show View -> Other" via activities
Activities filtering for e4 is possible since 04f719b, see org.eclipse.e4.core.services.contributions.IContributionFactory Allow "Show View -> Other" to filter e4 contributed views. This is the one part of the fix for PDE activities not covering SWT tooling. Second part is to extend PDE activity patterns. See eclipse-platform/eclipse.platform#1869
1 parent d4b6d3b commit a44d462

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchContributionFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
class WorkbenchContributionFactory implements IContributionFactory {
2929

3030
private static final String BUNDLE_CLASS_PREFIX = "bundleclass://"; //$NON-NLS-1$
31+
private static final String PLATFORM_PLUGIN_PREFIX = "platform:/plugin/"; //$NON-NLS-1$
3132

3233
private final IContributionFactory delegate;
3334

@@ -61,6 +62,8 @@ public boolean isEnabled(String uriString) {
6162
String identifierId = uriString;
6263
if (uriString.startsWith(BUNDLE_CLASS_PREFIX)) {
6364
identifierId = uriString.substring(BUNDLE_CLASS_PREFIX.length());
65+
} else if (uriString.startsWith(PLATFORM_PLUGIN_PREFIX)) {
66+
identifierId = uriString.substring(PLATFORM_PLUGIN_PREFIX.length());
6467
}
6568
if (activitySupport == null) {
6669
activitySupport = context.get(IWorkbenchActivitySupport.class);

bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewContentProvider.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020
import java.util.Map;
2121
import java.util.Set;
22+
import org.eclipse.e4.core.services.contributions.IContributionFactory;
2223
import org.eclipse.e4.ui.model.application.MApplication;
2324
import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor;
2425
import org.eclipse.jface.viewers.ITreeContentProvider;
@@ -173,13 +174,28 @@ private boolean isView(MPartDescriptor descriptor) {
173174
private boolean isFilteredByActivity(MPartDescriptor descriptor) {
174175
IViewDescriptor view = viewRegistry.find(descriptor.getElementId());
175176

176-
// viewRegistry.find(...) already applies a filtering for views disabled via core expressions
177+
// viewRegistry.find(...) already applies a filtering for views disabled via
178+
// core expressions
177179
boolean isFiltered = (view == null) || WorkbenchActivityHelper.filterItem(view);
178180

179181
// E3 views can be detected by checking whether they use the compatibility layer
180182
boolean isE3View = CompatibilityPart.COMPATIBILITY_VIEW_URI.equals(descriptor.getContributionURI());
181183

182-
// filtering can only be applied to E3 views, as activities don't exist in the Eclipse 4.
183-
return isE3View && isFiltered;
184+
if (isE3View) {
185+
// filtering for E3 contributions is easy
186+
return isFiltered;
187+
}
188+
// Extra checks for filtering of e4 contributions
189+
if (view == null) {
190+
IContributionFactory contributionFactory = application.getContext().get(IContributionFactory.class);
191+
if (contributionFactory != null) {
192+
String uriToCheck = descriptor.getContributionURI();
193+
if (uriToCheck == null) {
194+
uriToCheck = descriptor.getContributorURI();
195+
}
196+
return !contributionFactory.isEnabled(uriToCheck);
197+
}
198+
}
199+
return false;
184200
}
185201
}

0 commit comments

Comments
 (0)