st_widget_get_theme_node ошибки при перетаскивании

Я пытаюсь реализовать систему перетаскивания в разрабатываемом мной расширении, но столкнулся с проблемой. Насколько я могу судить, dnd реализуется созданием объекта draggable, подобного этому

 let draggable = DND.makeDraggable(this.actor)

где this.actor — актор Clutter, который я хочу перетащить, а затем реализовать необходимые обратные вызовы. Однако, когда я это делаю, Gnome Shell сразу же падает, когда я начинаю перетаскивать, и оставляет вывод на stderr, как это

 (gnome-shell:15279): St-ERROR **: st_widget_get_theme_node called on the widget [0x2b3c000 StBoxLayout.window-list-item-box:focused ("extension.js (~/Source/js/Botto...gmail.com) - GVIM")] which is not in the stage.

Однако использование Зазеркалья для вызова метода get_theme_node для этого конкретного виджета работает отлично!

Нужно ли явно добавлять актеров на сцену? И как мог get_theme_node выйти из строя где-то глубоко в чреве Gnome Shell, а не из Зазеркалья?


person Kasper    schedule 02.09.2012    source источник
comment
У меня была похожая проблема (которую я не могу воспроизвести) с моим расширением на экране блокировки gnome 3.6 (отчет об ошибке). Является ли window-list-item-box классом CSS, который вы назначили с помощью параметра style_class? Если это так, попробуйте оставить это.   -  person Lukas Knuth    schedule 24.11.2012


Ответы (1)


Также необходимо реализовать методы getDragActor и getDragActorSource для делегата актера, которого вы пытаетесь перетащить.

Вот простая реализация, которая просто перетаскивает клон актера.

getDragActor: function() {
    return new Clutter.Clone({source: this.actor,
                                   reactive: false,
                                   width: this.actor.get_width(),
                                   height: this.actor.get_height()});
},

getDragActorSource: function() {
    return this.actor;
}
person Kasper    schedule 24.01.2014