Bug 578378 - SWTError: No more handles if "Run in background" is
disabled

Dispose all created arrowCursors' properly.

Change-Id: Icd4c46657f59c4dd5285c2b4aa12bbc89e967aaf
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.ui/+/190942
Reviewed-by: Matthias Becker <ma.becker@sap.com>
Reviewed-by: Lars Vogel <Lars.Vogel@vogella.com>
Reviewed-by: Andrey Loskutov <loskutov@gmx.de>
Tested-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/bundles/org.eclipse.e4.ui.progress/src/org/eclipse/e4/ui/progress/internal/ProgressMonitorJobsDialog.java b/bundles/org.eclipse.e4.ui.progress/src/org/eclipse/e4/ui/progress/internal/ProgressMonitorJobsDialog.java
index a6f701f..0f6bdf3 100644
--- a/bundles/org.eclipse.e4.ui.progress/src/org/eclipse/e4/ui/progress/internal/ProgressMonitorJobsDialog.java
+++ b/bundles/org.eclipse.e4.ui.progress/src/org/eclipse/e4/ui/progress/internal/ProgressMonitorJobsDialog.java
@@ -219,7 +219,9 @@
 		composite.setFont(parent.getFont());
 		// Add the buttons to the button bar.
 		if (arrowCursor == null) {
-			arrowCursor = new Cursor(parent.getDisplay(), SWT.CURSOR_ARROW);
+			Cursor cursor = new Cursor(parent.getDisplay(), SWT.CURSOR_ARROW);
+			arrowCursor = cursor;
+			composite.addDisposeListener(e -> cursor.dispose());
 		}
 		createButtonsForButtonBar(composite);
 		return composite;
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/ProgressMonitorDialog.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/ProgressMonitorDialog.java
index f81abbd..f9c8d82 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/ProgressMonitorDialog.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/dialogs/ProgressMonitorDialog.java
@@ -395,7 +395,9 @@
 		cancel = createButton(parent, IDialogConstants.CANCEL_ID,
 				IDialogConstants.CANCEL_LABEL, true);
 		if (arrowCursor == null) {
-			arrowCursor = new Cursor(cancel.getDisplay(), SWT.CURSOR_ARROW);
+			Cursor cursor = new Cursor(cancel.getDisplay(), SWT.CURSOR_ARROW);
+			arrowCursor = cursor;
+			cancel.addDisposeListener(e -> cursor.dispose());
 		}
 		cancel.setCursor(arrowCursor);
 		setOperationCancelButtonEnabled(enableCancelButton);
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorJobsDialog.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorJobsDialog.java
index d843e8b..34d0fc5 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorJobsDialog.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorJobsDialog.java
@@ -192,7 +192,9 @@
 		composite.setFont(parent.getFont());
 		// Add the buttons to the button bar.
 		if (arrowCursor == null) {
-			arrowCursor = new Cursor(parent.getDisplay(), SWT.CURSOR_ARROW);
+			Cursor cursor = new Cursor(parent.getDisplay(), SWT.CURSOR_ARROW);
+			arrowCursor = cursor;
+			composite.addDisposeListener(e -> cursor.dispose());
 		}
 		createButtonsForButtonBar(composite);
 		return composite;