Hi, I must be doing something completely wrong or there is a major bug in JavaFX-DnD from Java-8 upwards to JavaFX-14-ea.
If you run the attached application on OS-X the and press the CMD-key while dragging you get null for the getTransferMode() inside DragOver and you don't get a DragDropped and null on the DragDone. I tracked that back to View#notifyDragOver() where one gets 0 from the native side. So am I missing something in my code? I also tried with https://docs.oracle.com/javafx/2/drag_drop/jfxpub-drag_drop.htm and it does not work either. So I guess it's a major bug in openjfx but before filing a jira-ticket I wanted to make extra sure it's not a stupid mistake, my german operating system, ... Tom -- Tom Schindl, CTO BestSolution.at EDV Systemhaus GmbH Salurnerstrasse 15. A-6020 Innsbruck Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck
package bla; import java.util.UUID; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.input.ClipboardContent; import javafx.scene.input.Dragboard; import javafx.scene.input.TransferMode; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; public class SampleApp extends Application { @Override public void start(Stage primaryStage) throws Exception { HBox b = new HBox(50); Rectangle sourceR = new Rectangle(300, 300); sourceR.setOnDragDetected( evt -> { Dragboard dragboard = sourceR.startDragAndDrop(TransferMode.ANY); ClipboardContent content = new ClipboardContent(); content.putString(UUID.randomUUID().toString()); dragboard.setContent(content); evt.consume(); }); sourceR.setOnDragDone( evt -> System.err.println("Done: " + evt.getTransferMode())); sourceR.setFill(Color.RED); Rectangle targetR = new Rectangle(300, 300); targetR.setOnDragOver( evt -> { evt.acceptTransferModes(TransferMode.ANY); System.err.println(evt.getTransferMode()); evt.consume(); }); targetR.setOnDragDropped( evt -> { System.err.println("Completed: " + evt.getTransferMode()); evt.setDropCompleted(true); evt.consume(); }); targetR.setFill(Color.BLUE); b.getChildren().setAll(sourceR, targetR); Scene s = new Scene(new VBox(b), 800, 600); primaryStage.setScene(s); primaryStage.show(); } public static void main(String[] args) { launch(args); } }