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

Reply via email to