1

我正在尝试在我正在开发的扩展中实现拖放系统,但我遇到了问题。据我所知,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 的腹部深处发生故障,而不是从窥镜中失败呢?

4

1 回答 1

1

还需要在您尝试拖动的 Actor 的委托上实现 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;
}
于 2014-01-24T04:13:54.037 回答