Bug 400829 - [DND] NPE and hang during dragging
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent.java
index 4664d30..1d2f2fd 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent.java
@@ -277,11 +277,11 @@
 
 		float pct = (float) (onEdge ? 0.34 : 0.50);
 
-		if (feedback != null)
-			feedback.dispose();
+		clearFeedback();
 
 		feedback = new SplitFeedbackOverlay(dropCTF.getShell(), feedbackBounds, side, pct,
 				getEnclosed(), getModified());
+		feedback.setVisible(true);
 	}
 
 	private void clearFeedback() {
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitFeedbackOverlay.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitFeedbackOverlay.java
index f23a84d..bee435c 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitFeedbackOverlay.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitFeedbackOverlay.java
@@ -1,13 +1,5 @@
 package org.eclipse.e4.ui.workbench.addons.dndaddon;

 

-/*

- * Monitor example snippet: center a shell on the primary monitor

- *

- * For a list of all SWT example snippets see

- * http://www.eclipse.org/swt/snippets/

- * 

- * @since 3.0

- */

 import java.util.ArrayList;

 import java.util.List;

 import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer;

@@ -48,7 +40,6 @@
 		setFeedback(enclosed, modified);

 

 		defineRegion();

-		feedbackShell.setVisible(true);

 	}

 

 	public void dispose() {

@@ -138,4 +129,16 @@
 		defineRegion();

 		feedbackShell.update();

 	}

+

+	/**

+	 * Control this instance's visibility.

+	 * 

+	 * @param visible

+	 *            make visible if {@code true} or invisible if {@code false}

+	 */

+	public void setVisible(boolean visible) {

+		if (feedbackShell != null) {

+			feedbackShell.setVisible(visible);

+		}

+	}

 }