Fix for bug 53654
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/RectangleAnimation.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/RectangleAnimation.java
index 78888cc..6993959 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/RectangleAnimation.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/RectangleAnimation.java
@@ -57,6 +57,11 @@
 	private UIJob paintJob = new UIJob(WorkbenchMessages.getString("RectangleAnimation.Animating_Rectangle")) { //$NON-NLS-1$
 
 		public IStatus runInUIThread(IProgressMonitor monitor) {
+			if (canvas == null || canvas.isDisposed()) {
+				done = true;
+				return Status.OK_STATUS;
+			}
+			
 			canvas.redraw();
 			
 			return Status.OK_STATUS;
@@ -69,6 +74,11 @@
 			return;
 		}
 		
+		if (canvas == null || canvas.isDisposed()) {
+			done = true;
+			return;
+		}
+		
 		long currentTime = System.currentTimeMillis();
 		
 		double amount = (double)(currentTime - startTime) / (double)duration;
@@ -145,11 +155,13 @@
 			}
 		}
 
-		canvas.getDisplay().syncExec(new Runnable() {
-			public void run() {
-				canvas.dispose();
-			}
-		});
+		if (!canvas.isDisposed()) {
+			canvas.getDisplay().syncExec(new Runnable() {
+				public void run() {
+					canvas.dispose();
+				}
+			});
+		}
 		
 		return Status.OK_STATUS;
 	}