3
我想创建并发出GTK信号:创建并发出GTK信号
g_signal_new("child-finished",
G_TYPE_OBJECT,
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL,
NULL, // *** I think this is where I need to change it
G_TYPE_NONE, 0);
g_signal_connect(G_OBJECT(myWindow), "child-finished", G_CALLBACK(MyCallback), NULL);
这里是我的代码发出信号:
gtk_signal_emit_by_name(referenceToMyWindow, "child-finished");
这里是我的代码是处理信号:
void MyCallback(GtkWidget *w, GdkEvent *e)
{
// handler code here
}
当我运行代码,我得到了以下错误:
GLib-GObject-CRITICAL **: g
_closure_
invoke: assertion `closure->marshal || closure->meta_marshal' failed
我知道它是与传递一个编组到g_signal_new
功能,但我不知道编组是什么,我不明白the documentation,以及在线的例子是少之又少。我如何声明并连接自己的信号?
只是修正了上述内容:GBoxed类型没有类型检查,它们只是C结构的包装器,没有类型信息。 G_TYPE_POINTER与G_TYPE_BOXED之间的真正区别在于后者使用了GdkEvent结构的_copy_。如果事件没有被修改,这并没有什么区别,但是如果你需要修改它,使用G_TYPE_POINTER。 – ntd 2009-10-12 23:08:44