While creating a RCP recently I noticed that I had dependencies on some of the Eclipse JDT and Plugin development features and due to this the RCP was showing some really unnecessary entries in the Perspective selection bar.
On debugging a little I found out the concept of pre-defined perspectives (those which come as a result of contributions from Plugin.xml of any contributing plugin) and it is indeed pain to remove those perspectives from any RCP.
Here is the snippet that I hacked to get rid of those predefined perspectives –
Call the removeUnWantedPerspectives() (attached below) method from postWindowCreate() method of your RCP’s WorkbenchWindowAdvisor extension class –
public static final String[] IGNORE_PERSPECTIVES = new String[] { "org.eclipse.birt.report.designer.ui.ReportPerspective", "org.eclipse.debug.ui.DebugPerspective", "org.eclipse.jdt.ui.JavaPerspective", "org.eclipse.jdt.ui.JavaHierarchyPerspective", "org.eclipse.jdt.ui.JavaBrowsingPerspective", "org.eclipse.mylyn.tasks.ui.perspectives.planning", "org.eclipse.pde.ui.PDEPerspective", "org.eclipse.team.cvs.ui.cvsPerspective", "org.eclipse.ui.resourcePerspective", }; /** * Removes the unwanted perspectives from your RCP application */ private void removeUnWantedPerspectives() { IPerspectiveRegistry perspectiveRegistry = PlatformUI.getWorkbench().getPerspectiveRegistry(); IPerspectiveDescriptor[] perspectiveDescriptors = perspectiveRegistry.getPerspectives(); List ignoredPerspectives = Arrays.asList(GenericConstants.IGNORE_PERSPECTIVES); List removePerspectiveDesc = new ArrayList(); // Add the perspective descriptors with the matching perspective ids to the list for (IPerspectiveDescriptor perspectiveDescriptor : perspectiveDescriptors) { if(ignoredPerspectives.contains(perspectiveDescriptor.getId())) { removePerspectiveDesc.add(perspectiveDescriptor); } } // If the list is non-empty then remove all such perspectives from the IExtensionChangeHandler if(perspectiveRegistry instanceof IExtensionChangeHandler && !removePerspectiveDesc.isEmpty()) { IExtensionChangeHandler extChgHandler = (IExtensionChangeHandler) perspectiveRegistry; extChgHandler.removeExtension(null, removePerspectiveDesc.toArray()); } }