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;
}
+
}