Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Williams2017-07-28 13:15:09 +0000
committerEric Williams2017-07-28 13:29:43 +0000
commitdf42da7bdd4b917d662f2f3f7ed4379a3e1e1c0c (patch)
treebccc27ff987ae4ea897bf5cb633b61a9eeeb7233
parent7ab38c85e2f6295518ed8a7c6f7037841abfe35e (diff)
downloadeclipse.platform.swt-df42da7bdd4b917d662f2f3f7ed4379a3e1e1c0c.tar.gz
eclipse.platform.swt-df42da7bdd4b917d662f2f3f7ed4379a3e1e1c0c.tar.xz
eclipse.platform.swt-df42da7bdd4b917d662f2f3f7ed4379a3e1e1c0c.zip
Bug 307441: [DND] DnD on Linux does not behave as expected with
overlapping controls Add reproducer snippet. Change-Id: I7d9fdd85995fad36ba13344b1706c10f01ca9a7d Signed-off-by: Eric Williams <ericwill@redhat.com>
-rw-r--r--tests/org.eclipse.swt.tests.gtk/Bug Snippets/org/eclipse/swt/tests/gtk/snippets/Bug307441_DnDOverlappingControls.java180
1 files changed, 180 insertions, 0 deletions
diff --git a/tests/org.eclipse.swt.tests.gtk/Bug Snippets/org/eclipse/swt/tests/gtk/snippets/Bug307441_DnDOverlappingControls.java b/tests/org.eclipse.swt.tests.gtk/Bug Snippets/org/eclipse/swt/tests/gtk/snippets/Bug307441_DnDOverlappingControls.java
new file mode 100644
index 0000000000..3cb08b254f
--- /dev/null
+++ b/tests/org.eclipse.swt.tests.gtk/Bug Snippets/org/eclipse/swt/tests/gtk/snippets/Bug307441_DnDOverlappingControls.java
@@ -0,0 +1,180 @@
+package org.eclipse.swt.tests.gtk.snippets;
+
+/*
+ * Drag and Drop example snippet: drag a URL between two labels.
+ *
+ * For a list of all SWT example snippets see
+ * http://www.eclipse.org/swt/snippets/
+ */
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.DropTargetListener;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.URLTransfer;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+
+/*
+ * Title: Bug 307441 - [DND] DnD on Linux does not behave as expected with overlapping controls
+ * How to run: launch snippet and drag controls from left side to right, watch console for print statements
+ * Bug description: Improper events for overlapped controls
+ * Expected results: All events should be fired correctly
+ * GTK Version(s): all
+ */
+public class Bug307441_DnDOverlappingControls {
+
+public static void main (String [] args) {
+
+ Display display = new Display ();
+ final Shell shell = new Shell (display);
+ shell.setText("URLTransfer");
+ shell.setLayout(new FillLayout());
+ final Label label1 = new Label (shell, SWT.BORDER);
+ label1.setText ("http://www.eclipse.org");
+
+ final Composite dropComp = new Composite(shell, SWT.BORDER);
+ dropComp.setSize(600,300);
+ Rectangle clientArea = dropComp.getClientArea();
+
+ final Label label2 = new Label (dropComp, SWT.BORDER);
+ label2.setBackground(new Color(null,255,255,0));
+ label2.setText("DropLabel1");
+ label2.setSize(100,100);
+ label2.setBounds(clientArea.x, clientArea.y, clientArea.width, (clientArea.height*2)/3);
+
+ final Label label3 = new Label (dropComp, SWT.BORDER);
+ label3.setBackground(new Color(null, 255, 0,0));
+ label3.setText("DropLabel2");
+ label3.setSize(100,100);
+ label3.setBounds(clientArea.x+10, clientArea.y+clientArea.height/3, clientArea.width-10, clientArea.height/2);
+ label3.moveAbove(label2);
+
+ setDragSource (label1);
+ setDropTarget (dropComp);
+ setDropTargetForLabel (label2);
+ setDropTargetForLabel (label3);
+
+ shell.setSize(900, 300);
+ shell.open ();
+ while (!shell.isDisposed ()) {
+ if (!display.readAndDispatch ()) display.sleep ();
+ }
+ display.dispose ();
+}
+
+public static void setDragSource (final Label label) {
+ int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
+ final DragSource source = new DragSource (label, operations);
+ source.setTransfer(new Transfer[] {URLTransfer.getInstance()});
+ source.addDragListener (new DragSourceListener () {
+ @Override
+ public void dragStart(DragSourceEvent e) {
+ }
+ @Override
+ public void dragSetData(DragSourceEvent e) {
+ e.data = label.getText();
+ }
+ @Override
+ public void dragFinished(DragSourceEvent event) {
+ }
+ });
+}
+
+public static void setDropTargetForLabel (final Label control) {
+ int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
+ DropTarget target = new DropTarget(control, operations);
+ target.setTransfer(new Transfer[] {URLTransfer.getInstance()});
+ target.addDropListener (new DropTargetListener() {
+ @Override
+ public void dragEnter(DropTargetEvent e) {
+ System.out.println("dragEnter="+control.getText());
+ if (e.detail == DND.DROP_NONE)
+ e.detail = DND.DROP_LINK;
+ }
+ @Override
+ public void dragOperationChanged(DropTargetEvent e) {
+ if (e.detail == DND.DROP_NONE)
+ e.detail = DND.DROP_LINK;
+ }
+ @Override
+ public void drop(DropTargetEvent event) {
+ if (event.data == null) {
+ event.detail = DND.DROP_NONE;
+ return;
+ }
+ control.setText(((String) event.data));
+
+ }
+ @Override
+ public void dragLeave(DropTargetEvent arg0) {
+ // TODO Auto-generated method stub
+ System.out.println("dragLeave="+control.getText());
+
+ }
+ @Override
+ public void dragOver(DropTargetEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ @Override
+ public void dropAccept(DropTargetEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+}
+public static void setDropTarget (final Control control) {
+ int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
+ DropTarget target = new DropTarget(control, operations);
+ target.setTransfer(new Transfer[] {URLTransfer.getInstance()});
+ target.addDropListener (new DropTargetListener() {
+ @Override
+ public void dragEnter(DropTargetEvent e) {
+ System.out.println("dragEnter=composite");
+
+ if (e.detail == DND.DROP_NONE)
+ e.detail = DND.DROP_LINK;
+ }
+ @Override
+ public void dragOperationChanged(DropTargetEvent e) {
+ if (e.detail == DND.DROP_NONE)
+ e.detail = DND.DROP_LINK;
+ }
+ @Override
+ public void drop(DropTargetEvent event) {
+ if (event.data == null) {
+ event.detail = DND.DROP_NONE;
+ return;
+ }
+ control.setBackground(new Color(null,0,0,255));
+ }
+ @Override
+ public void dragLeave(DropTargetEvent arg0) {
+ // TODO Auto-generated method stub
+ System.out.println("dragLeave=composite");
+
+ }
+ @Override
+ public void dragOver(DropTargetEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ @Override
+ public void dropAccept(DropTargetEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+}
+} \ No newline at end of file

Back to the top