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;