diff options
| author | Manuel Steurer | 2016-01-13 08:20:08 +0000 |
|---|---|---|
| committer | Jonas Helming | 2016-01-15 12:35:28 +0000 |
| commit | afda9098eb3d34c91bf7db0ee675493169b02773 (patch) | |
| tree | 19dffb573b45050e198f788b5c023ed404ba51b8 | |
| parent | 00f6c7ea3b0022c58b703541bb4d5e572ebd683e (diff) | |
| download | eclipse.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.java | 81 |
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); + } + } |
