Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandra Buzila2017-11-27 14:58:03 +0000
committerAndrey Loskutov2017-12-08 16:36:54 +0000
commit7bfefad95f7f01c8aa6632ba30b893ff2c14bcb5 (patch)
treef7ed85cf1490266e59a52bc6a883051b22eb9dcc
parentc1678a1dfc267b14ef83edc6a96ebc15cdd1b4e6 (diff)
downloadeclipse.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.java36
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();

Back to the top