Openjfx GDK3“ Bug”(带拖动n拖放)-解决方法?

时间:2019-01-25 10:39:26

标签: java javafx gtk gtk3 openjfx

对于GTK3,Javafx似乎调用了不再有效的GTK2函数。有什么办法可以解决这个问题?

要进行复制,可以使用股票debian(stretch)Mate destop与来自反向端口的股票Openjdk 11以及来自Maven的openjfx 12-ea8一起使用。 其他设置也显示出相同的效果-但我猜这种设置很容易复制。

public void test() {
        AnchorPane anchorpane = new AnchorPane();
        anchorpane.setOnDragDetected(event -> {
                 //test don'z care about mode
                final Dragboard db = anchorpane.startDragAndDrop(TransferMode.COPY_OR_MOVE);
                final ClipboardContent cc = new ClipboardContent();
                cc.putString("somecontent");
                SnapshotParameters snapshotParameters = new SnapshotParameters();
                snapshotParameters.setViewport(new Rectangle2D(0, 0, 50,50));
                db.setDragView(anchorpane.snapshot(snapshotParameters, null));
                db.setContent(cc);
                event.consume();
        });
        Stage test =new Stage();
        test.setScene(new Scene(anchorpane));
        test.show();
}

如果我使用-Djdk.gtk.verbose = true参数运行它,则会得到:

checking GTK version 3
trying GTK library libgtk-3.so.0
using GTK library version 3 set libgtk-3.so.0
Glass GTK library to load is glassgtk3
loaded gdk_x11_display_set_window_scale

当我这样做时,会出现此消息,并且没有显示dragview:

  

(java:2946):GLib-GObject-WARNING **:/build/glib2.0-B1uXK /glib2.0-2.50.3/./gobject/gsignal.c:2523:信号'暴露事件'对于类型'GtkWindow'的实例'0x7f63001f2a40'无效

现在,如果我使用参数-Djdk.gtk.version = 2 -Djdk.gtk.verbose = true运行它

checking GTK version 2
trying GTK library libgtk-x11-2.0.so.0
using GTK library version 2 set libgtk-x11-2.0.so.0
Glass GTK library to load is glassgtk2

现在,反对gtk2的一切都能正常工作:显示了Dragview,没有错误。

似乎它可以正确检测到gtk3(不错!),但是仍然对gtk3库使用gtk2调用,但失败了。

是否有某种变通办法,例如以某种方式重新创建dragview或将Popup设置为dragview或其他方式,以使其在用户桌面上工作而对他们没有特殊要求?

0 个答案:

没有答案