Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Steurer2016-01-13 08:20:08 +0000
committerJonas Helming2016-01-15 12:35:28 +0000
commitafda9098eb3d34c91bf7db0ee675493169b02773 (patch)
tree19dffb573b45050e198f788b5c023ed404ba51b8
parent00f6c7ea3b0022c58b703541bb4d5e572ebd683e (diff)
downloadeclipse.platform.ui-afda9098eb3d34c91bf7db0ee675493169b02773.tar.gz
eclipse.platform.ui-afda9098eb3d34c91bf7db0ee675493169b02773.tar.xz
eclipse.platform.ui-afda9098eb3d34c91bf7db0ee675493169b02773.zip
Bug 479126 PERSPECTIVE_BAR_EXTRAS setting not taken into account
Change-Id: I20a2bc34fc9d25f442705488784cd7b3ca31032d Signed-off-by: Manuel Steurer <manuel.steurer@quattro-soft.de>
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java81
1 files changed, 66 insertions, 15 deletions
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
index 55e220821f2..4ebeb070516 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
@@ -33,6 +33,7 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;
@@ -141,6 +142,7 @@ import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.IWorkingSetManager;
@@ -2698,6 +2700,9 @@ public class WorkbenchPage implements IWorkbenchPage {
broker.subscribe(UIEvents.Contribution.TOPIC_OBJECT, firingHandler);
broker.subscribe(UIEvents.ElementContainer.TOPIC_CHILDREN, childrenHandler);
+ // Bug 479126 PERSPECTIVE_BAR_EXTRAS setting not taken into account
+ createPerspectiveBarExtras();
+
MPerspectiveStack perspectiveStack = getPerspectiveStack();
if (perspectiveStack != null) {
extendPerspectives(perspectiveStack);
@@ -4056,22 +4061,8 @@ public class WorkbenchPage implements IWorkbenchPage {
perspective.getId(), window);
if (modelPerspective == null) {
-
// couldn't find the perspective, create a new one
- modelPerspective = modelService.createModelElement(MPerspective.class);
-
- // tag it with the same id
- modelPerspective.setElementId(perspective.getId());
-
-
- // instantiate the perspective
- IPerspectiveFactory factory = ((PerspectiveDescriptor) perspective).createFactory();
- ModeledPageLayout modelLayout = new ModeledPageLayout(window, modelService,
- partService, modelPerspective, perspective, this, true);
- factory.createInitialLayout(modelLayout);
- PerspectiveTagger.tagPerspective(modelPerspective, modelService);
- PerspectiveExtensionReader reader = new PerspectiveExtensionReader();
- reader.extendLayout(getExtensionTracker(), perspective.getId(), modelLayout);
+ modelPerspective = createPerspective(perspective);
}
((ModelServiceImpl) modelService).handleNullRefPlaceHolders(modelPerspective, window);
@@ -4103,6 +4094,27 @@ public class WorkbenchPage implements IWorkbenchPage {
UIEvents.publishEvent(UIEvents.UILifeCycle.PERSPECTIVE_OPENED, modelPerspective);
}
+ /**
+ * @param perspective
+ * @return never null
+ */
+ private MPerspective createPerspective(IPerspectiveDescriptor perspective) {
+ MPerspective modelPerspective = modelService.createModelElement(MPerspective.class);
+
+ // tag it with the same id
+ modelPerspective.setElementId(perspective.getId());
+
+ // instantiate the perspective
+ IPerspectiveFactory factory = ((PerspectiveDescriptor) perspective).createFactory();
+ ModeledPageLayout modelLayout = new ModeledPageLayout(window, modelService,
+ partService, modelPerspective, perspective, this, true);
+ factory.createInitialLayout(modelLayout);
+ PerspectiveTagger.tagPerspective(modelPerspective, modelService);
+ PerspectiveExtensionReader reader = new PerspectiveExtensionReader();
+ reader.extendLayout(getExtensionTracker(), perspective.getId(), modelLayout);
+ return modelPerspective;
+ }
+
void perspectiveActionSetChanged(Perspective perspective, IActionSetDescriptor descriptor,
int changeType) {
if (perspective == getActivePerspective()) {
@@ -5504,4 +5516,43 @@ public class WorkbenchPage implements IWorkbenchPage {
firePartDeactivated(part);
}
}
+
+ /**
+ * Add ToolItems for perspectives specified in "PERSPECTIVE_BAR_EXTRAS"
+ */
+ private void createPerspectiveBarExtras() {
+ String persps = PrefUtil.getAPIPreferenceStore()
+ .getString(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS);
+ // e3 allowed spaces and commas as separator
+ String[] parts = persps.split("[, ]"); //$NON-NLS-1$
+ Set<String> perspSet = new LinkedHashSet<>();
+ for (String part : parts) {
+ part = part.trim();
+ if (!part.isEmpty())
+ perspSet.add(part);
+ }
+
+ for (String perspId : perspSet) {
+ MPerspective persp = (MPerspective) modelService.find(perspId, window);
+ if (persp != null)
+ continue; // already in stack, i.e. has already been added above
+ IPerspectiveDescriptor desc = getDescriptorFor(perspId);
+ if (desc == null)
+ continue; // this perspective does not exist
+ persp = createPerspective(desc);
+ persp.setLabel(desc.getLabel());
+ getPerspectiveStack().getChildren().add(persp);
+ // "add" fires Event, causes creation of ToolItem on perspective bar
+ }
+ }
+
+ private IPerspectiveDescriptor getDescriptorFor(String id) {
+ IPerspectiveRegistry perspectiveRegistry = getWorkbenchWindow().getWorkbench().getPerspectiveRegistry();
+ if (perspectiveRegistry instanceof PerspectiveRegistry) {
+ return ((PerspectiveRegistry) perspectiveRegistry).findPerspectiveWithId(id, false);
+ }
+
+ return perspectiveRegistry.findPerspectiveWithId(id);
+ }
+
}

Back to the top