Openjfx GDK3 "Ошибка" с перетаскиванием - обходной путь? - PullRequest
0 голосов
/ 25 января 2019

С GTK3 Javafx, кажется, вызывает функцию GTK2, которая больше не действительна. Есть ли способ обойти это?

Для воспроизведения вы можете использовать стандартный debian (stretch) Mate destop со стандартным Openjdk 11 из бэкпортов вместе с openjfx 12-ea8 из maven. Другие установки показывают тот же эффект - но я думаю, что эту настройку довольно легко воспроизвести.

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

И когда я делаю перетаскивание, появляется это сообщение, а перетаскивание не отображается:

(java: 2946): GLib-GObject-WARNING **: /build/glib2.0-B1uXK /glib2.0-2.50.3/./gobject/gsignal.c:2523: сигнал 'expose-event' недопустим для экземпляра '0x7f63001f2a40' типа 'GtkWindow'

Теперь, если я запускаю его с параметром -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 etherything работает безупречно: Dragview отображается без ошибок.

Похоже, что он правильно обнаруживает gtk3 (хорошо!), Но затем все еще использует вызовы gtk2 против библиотеки gtk3, которая завершается неудачей.

Есть ли обходной путь, например, как-то воссоздать dragview или установить вместо него Popup как dragview или whatelse, чтобы он работал на рабочих столах пользователей без особых требований к ним?

...