Openjfx GDK3 "Ошибка" с перетаскиванием - обходной путь?

С 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

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

(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 или как-то так, чтобы он работал на рабочих столах пользователей без особых требований к ним?

0 ответов

Другие вопросы по тегам