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