diff options
Diffstat (limited to 'tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug548661_AWTDragDrop.java')
-rw-r--r-- | tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug548661_AWTDragDrop.java | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug548661_AWTDragDrop.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug548661_AWTDragDrop.java new file mode 100644 index 0000000000..7243f8815f --- /dev/null +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug548661_AWTDragDrop.java @@ -0,0 +1,125 @@ +/******************************************************************************* + * Copyright (c) 2019 Oleksandr Zakusylo and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Oleksandr Zakusylo - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.tests.gtk.snippets; + +import java.awt.Frame; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.IOException; + +import javax.swing.JButton; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.awt.SWT_AWT; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.DragSource; +import org.eclipse.swt.dnd.DragSourceAdapter; +import org.eclipse.swt.dnd.DragSourceEvent; +import org.eclipse.swt.dnd.DropTarget; +import org.eclipse.swt.dnd.DropTargetAdapter; +import org.eclipse.swt.dnd.DropTargetEvent; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; + +/* + * Title: Bug 548661 - [GTK] DND from SWT to embbedded AWT frame is broken. Verify that + * How to run: launch snippet, drag the button "Drag Source" onto the button "Swing Target" + * Bug description: no drag events are reported in the console. + * Expected results: drag enter and drop/drag exit are reported according to user actions. + */ +public class Bug548661_AWTDragDrop { + + public static void main(String[] args) { + Shell shell = new Shell(SWT.DIALOG_TRIM); + shell.setLayout(new GridLayout(3, true)); + + Button sourceButton = new Button(shell, SWT.PUSH); + sourceButton.setText("Drag Source"); + + Button targetButton = new Button(shell, SWT.PUSH); + targetButton.setText("SWT Target"); + + Composite swingContainer = new Composite(shell, SWT.EMBEDDED); + Frame frame = SWT_AWT.new_Frame(swingContainer); + + JButton swingButton = new JButton("Swing target"); + frame.add(swingButton); + + shell.open(); + shell.pack(); + + DragSource ds = new DragSource(sourceButton, DND.DROP_MOVE); + ds.setTransfer(new Transfer[] { TextTransfer.getInstance() }); + ds.addDragListener(new DragSourceAdapter() { + @Override + public void dragSetData(DragSourceEvent event) { + event.data = "TRANSFERRED DATA STRING"; + } + }); + + DropTarget dt = new DropTarget(targetButton, DND.DROP_MOVE); + dt.setTransfer(new Transfer[] { TextTransfer.getInstance() }); + dt.addDropListener(new DropTargetAdapter() { + @Override + public void dragEnter(DropTargetEvent event) { + System.err.println("SWT drag enter"); + } + + @Override + public void dragLeave(DropTargetEvent event) { + System.err.println("SWT drag exit"); + } + + @Override + public void drop(DropTargetEvent event) { + System.err.println("SWT drop " + event.data); + } + }); + + new java.awt.dnd.DropTarget(swingButton, new java.awt.dnd.DropTargetAdapter() { + @Override + public void dragEnter(java.awt.dnd.DropTargetDragEvent dtde) { + System.err.println("AWT drag enter"); + } + + @Override + public void dragExit(java.awt.dnd.DropTargetEvent dte) { + System.err.println("AWT drag exit"); + } + + @Override + public void drop(java.awt.dnd.DropTargetDropEvent dtde) { + dtde.acceptDrop(java.awt.dnd.DnDConstants.ACTION_MOVE); + try { + Object data = dtde.getTransferable().getTransferData(DataFlavor.stringFlavor); + System.err.println("AWT drop " + data); + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + }); + + Display display = shell.getDisplay(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) { + display.sleep(); + } + } + } +} |