Bug 410749 - [Workbench] Don't prompt to save on close when editor input
opened elsewhere

Change-Id: I868c672cb15f1c44944d7022a9e2a5f4af8fb411
Signed-off-by: Wojciech Sudol <wojciech.sudol@pl.ibm.com>
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java
index 800178f..690bbff 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java
@@ -52,7 +52,6 @@
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
 import org.eclipse.e4.ui.workbench.modeling.EPartService;
 import org.eclipse.e4.ui.workbench.modeling.ISaveHandler;
-import org.eclipse.e4.ui.workbench.modeling.ISaveHandler.Save;
 import org.eclipse.e4.ui.workbench.swt.util.ISWTResourceUtilities;
 import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.LegacyActionTools;
@@ -1506,26 +1505,15 @@
 			final List<MPart> toPrompt = new ArrayList<MPart>(others);
 			toPrompt.retainAll(partService.getDirtyParts());
 
-			final Save[] response;
+			boolean cancel = false;
 			if (toPrompt.size() > 1) {
-				response = saveHandler.promptToSave(toPrompt);
+				cancel = !saveHandler.saveParts(toPrompt, true);
 			} else if (toPrompt.size() == 1) {
-				response = new Save[] { saveHandler.promptToSave(toPrompt
-						.get(0)) };
-			} else {
-				response = new Save[] {};
+				cancel = !saveHandler.save(toPrompt.get(0), true);
 			}
-			final List<MPart> toSave = new ArrayList<MPart>(toPrompt.size());
-			for (int i = 0; i < response.length; i++) {
-				final Save save = response[i];
-				final MPart mPart = toPrompt.get(i);
-				if (save == Save.CANCEL) {
-					return;
-				} else if (save == Save.YES) {
-					toSave.add(mPart);
-				}
+			if (cancel) {
+				return;
 			}
-			saveHandler.saveParts(toSave, false);
 
 			for (MPart other : others) {
 				partService.hidePart(other);
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
index 9fba4af..368f83e 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
@@ -136,6 +136,7 @@
 import org.eclipse.ui.IPerspectiveDescriptor;
 import org.eclipse.ui.IPerspectiveRegistry;
 import org.eclipse.ui.ISaveablePart;
+import org.eclipse.ui.ISaveablesLifecycleListener;
 import org.eclipse.ui.ISelectionService;
 import org.eclipse.ui.ISources;
 import org.eclipse.ui.IWorkbench;
@@ -577,8 +578,12 @@
 					if (object instanceof CompatibilityPart) {
 						IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
 						if (workbenchPart instanceof ISaveablePart) {
-							ISaveablePart saveablePart = (ISaveablePart) workbenchPart;
-							return page.saveSaveable(saveablePart, workbenchPart, confirm, true);
+							SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench()
+									.getService(ISaveablesLifecycleListener.class);
+							Object saveResult = saveablesList.preCloseParts(
+									Collections.singletonList((ISaveablePart) workbenchPart), true,
+									WorkbenchWindow.this);
+							return saveResult != null;
 						}
 					}
 					return super.save(dirtyPart, confirm);
@@ -599,8 +604,12 @@
 					if (saveables.isEmpty()) {
 						return super.saveParts(dirtyParts, confirm);
 					}
-					return WorkbenchPage.saveAll(saveables, confirm, false, true,
-							WorkbenchWindow.this, WorkbenchWindow.this);
+
+					SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench()
+							.getService(ISaveablesLifecycleListener.class);
+					Object saveResult = saveablesList.preCloseParts(saveables, true,
+							WorkbenchWindow.this);
+					return saveResult != null;
 				}
 			};
 			localSaveHandler.logger = logger;