Set return code before closing a window in Utils.closeDialogs()

Signed-off-by: Viktoria Dlugopolskaya <viksnsk@gmail.com>
Change-Id: I44f9639c4a7c1e5b1ce2f020f5138696b09767ed
diff --git a/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/impl/Utils.java b/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/impl/Utils.java
index 457736e..e124573 100644
--- a/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/impl/Utils.java
+++ b/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/impl/Utils.java
@@ -19,12 +19,16 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.wizard.ProgressMonitorPart;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.rcptt.tesla.internal.core.TeslaCore;
 import org.eclipse.rcptt.tesla.internal.ui.player.TeslaSWTAccess;
 import org.eclipse.rcptt.tesla.swt.dialogs.SWTDialogManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -84,7 +88,11 @@
 							}
 							TeslaSWTAccess.setWizardDialogHasActiveOperations(
 									dialog, 0);
-							dialog.close();
+
+							pressCancel(dialog);
+							if (!shell.isDisposed()) {
+								dialog.close();
+							}
 							// try to cancel monitor if there is one
 						} catch (Throwable e) {
 							TeslaCore.log(e);
@@ -103,4 +111,14 @@
 			SWTDialogManager.setCancelMessageBoxesDisplay(false);
 		}
 	}
+
+	private static void pressCancel(WizardDialog dialog) {
+		Button cancelButton = TeslaSWTAccess.getWizardDialogButton(
+				dialog, IDialogConstants.CANCEL_ID);
+		if (cancelButton == null) {
+			return;
+		}
+		cancelButton.notifyListeners(SWT.Selection, new Event());
+	}
+
 }
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/TeslaSWTAccess.java b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/TeslaSWTAccess.java
index 0256dd1..655cc7e 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/TeslaSWTAccess.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/internal/ui/player/TeslaSWTAccess.java
@@ -32,6 +32,8 @@
 import org.eclipse.jface.viewers.ViewerCell;
 import org.eclipse.jface.wizard.ProgressMonitorPart;
 import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.rcptt.tesla.internal.core.TeslaCore;
+import org.eclipse.rcptt.tesla.swt.events.TimerUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.custom.CTabFolder;
@@ -56,9 +58,6 @@
 import org.eclipse.ui.part.PageBook;
 import org.eclipse.ui.progress.DeferredTreeContentManager;
 
-import org.eclipse.rcptt.tesla.internal.core.TeslaCore;
-import org.eclipse.rcptt.tesla.swt.events.TimerUtils;
-
 @SuppressWarnings("rawtypes")
 public class TeslaSWTAccess {
 
@@ -568,6 +567,17 @@
 		return null;
 	}
 
+	public static Button getWizardDialogButton(WizardDialog dialog, int buttonId) {
+		try {
+			final Method method = WizardDialog.class.getDeclaredMethod("getButton", int.class);
+			method.setAccessible(true);
+			return (Button) method.invoke(dialog, buttonId);
+		} catch (Throwable e) {
+			TeslaCore.log(e);
+		}
+		return null;
+	}
+
 	@SuppressWarnings("restriction")
 	public static boolean getJobEventReSchedule(IJobChangeEvent event) {
 		try {
@@ -638,4 +648,5 @@
 		return null;
 
 	}
+
 }