Bug 466230 - [view management] IPartServiceTest.testPartHiddenBeforeClosing fails...
authorAndrey Loskutov <loskutov@gmx.de>
Sun, 3 May 2015 16:11:34 +0000 (18:11 +0200)
committerAndrey Loskutov <loskutov@gmx.de>
Mon, 4 May 2015 18:26:33 +0000 (14:26 -0400)
Don't return view references for closed views (placeholder is set to be
not rendered).

Change-Id: I1729f6925c2308e263e2a914e4fb1be4308ed61c
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Brian de Alwis <bsd@mt.ca>
bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java

index a71ec18..f758d54 100644 (file)
@@ -12,7 +12,7 @@
  *     Lars Vogel <Lars.Vogel@gmail.com> - Bug 431340, 431348, 426535, 433234
  *     Lars Vogel <Lars.Vogel@gmail.com> - Bug 431868
  *     Cornel Izbasa <cizbasa@info.uvt.ro> - Bug 442214
- *     Andrey Loskutov <loskutov@gmx.de> - Bug 411639, 372799
+ *     Andrey Loskutov <loskutov@gmx.de> - Bug 411639, 372799, 466230
  *******************************************************************************/
 
 package org.eclipse.ui.internal;
@@ -2517,11 +2517,18 @@ public class WorkbenchPage implements IWorkbenchPage {
                if (perspective != null) {
                        int scope = allPerspectives ? WINDOW_SCOPE : EModelService.PRESENTATION;
                        Set<MUIElement> parts = new HashSet<MUIElement>();
-                       parts.addAll(modelService.findElements(window, null, MPlaceholder.class, null, scope));
+                       List<MPlaceholder> placeholders = modelService.findElements(window, null, MPlaceholder.class, null, scope);
+                       parts.addAll(placeholders);
                        parts.addAll(modelService.findElements(window, null, MPart.class, null, scope));
                        List<IViewReference> visibleReferences = new ArrayList<IViewReference>();
                        for (ViewReference reference : viewReferences) {
-                               if (parts.contains(reference.getModel()) && reference.getModel().isToBeRendered()) {
+                               MPart model = reference.getModel();
+                               // The part may be linked in either directly or via a
+                               // placeholder. In the latter case we can look directly
+                               // at the part's curSharedRef since we're only considering
+                               // parts visible in the current perspective
+                               if (parts.contains(model) && model.isToBeRendered()
+                                               && (model.getCurSharedRef() == null || model.getCurSharedRef().isToBeRendered())) {
                                        // only rendered placeholders are valid view references
                                        visibleReferences.add(reference);
                                }