Bug 514935 - Reset of Perspective restores not restorable views
- 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>
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 8243083..cfd0568 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.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 @@
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 @@
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();