diff options
| author | Alexandra Buzila | 2017-11-27 14:58:03 +0000 |
|---|---|---|
| committer | Andrey Loskutov | 2017-12-08 16:36:54 +0000 |
| commit | 7bfefad95f7f01c8aa6632ba30b893ff2c14bcb5 (patch) | |
| tree | f7ed85cf1490266e59a52bc6a883051b22eb9dcc | |
| parent | c1678a1dfc267b14ef83edc6a96ebc15cdd1b4e6 (diff) | |
| download | eclipse.platform.ui-7bfefad95f7f01c8aa6632ba30b893ff2c14bcb5.tar.gz eclipse.platform.ui-7bfefad95f7f01c8aa6632ba30b893ff2c14bcb5.tar.xz eclipse.platform.ui-7bfefad95f7f01c8aa6632ba30b893ff2c14bcb5.zip | |
Bug 514935 - Reset of Perspective restores not restorable viewsI20171210-2000I20171209-1500I20171209-1020I20171208-2000
- on perspective save, update the toBeRendered state of elements before
placeholder references are removed and the perspective is saved as a
snippet
Change-Id: I4d05c576382c4c08dcb137ac9468e54ada9fa42d
Signed-off-by: Alexandra Buzila <abuzila@eclipsesource.com>
| -rw-r--r-- | bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java | 36 |
1 files changed, 22 insertions, 14 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 824308365b4..cfd05688aaf 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 @@ -87,6 +87,7 @@ import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.jface.dialogs.DialogSettings; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.IPageChangeProvider; @@ -3969,24 +3970,19 @@ public class WorkbenchPage implements IWorkbenchPage { visiblePerspective.setLabel(perspective.getLabel()); visiblePerspective.setTooltip(perspective.getLabel()); visiblePerspective.setElementId(perspective.getId()); - MUIElement clone = modelService.cloneElement(visiblePerspective, application); - MWindow window = WorkbenchWindow.class.cast(getActivePart().getSite().getWorkbenchWindow()).getModel(); - ModelServiceImpl.class.cast(modelService).getNullRefPlaceHolders(clone, window); - List<MPlaceholder> elementsToHide = modelService.findElements(clone, null, MPlaceholder.class, null); + + MPerspective copy = (MPerspective) EcoreUtil.copy((EObject) visiblePerspective); + + List<MPlaceholder> elementsToHide = modelService.findElements(copy, null, MPlaceholder.class, null); for (MPlaceholder elementToHide : elementsToHide) { - if (elementToHide.getRef().getTags().contains(IPresentationEngine.NO_RESTORE)) { + if (elementToHide.isToBeRendered() + && elementToHide.getRef().getTags().contains(IPresentationEngine.NO_RESTORE)) { elementToHide.setToBeRendered(false); - MElementContainer<MUIElement> phParent = elementToHide.getParent(); - if (phParent.getSelectedElement() == elementToHide) { - phParent.setSelectedElement(null); - } - int vc = modelService.countRenderableChildren(phParent); - if (vc == 0) { - if (!modelService.isLastEditorStack(phParent)) - phParent.setToBeRendered(false); - } + updateSelectionAndParentVisibility(elementToHide); } } + // remove placeholder refs and save as snippet + modelService.cloneElement(copy, application); if (perspective instanceof PerspectiveDescriptor) { ((PerspectiveDescriptor) perspective).setHasCustomDefinition(true); } @@ -3994,6 +3990,18 @@ public class WorkbenchPage implements IWorkbenchPage { UIEvents.publishEvent(UIEvents.UILifeCycle.PERSPECTIVE_SAVED, visiblePerspective); } + private void updateSelectionAndParentVisibility(MUIElement element) { + MElementContainer<MUIElement> parent = element.getParent(); + if (parent.getSelectedElement() == element) { + parent.setSelectedElement(null); + } + int renderableChildren = modelService.countRenderableChildren(parent); + if (renderableChildren == 0 && !modelService.isLastEditorStack(parent)) { + parent.setToBeRendered(false); + updateSelectionAndParentVisibility(parent); + } + } + @Override public void setEditorAreaVisible(boolean showEditorArea) { MUIElement find = findSharedArea(); |
