无法在 gtk2 的销毁信号中传递数据

Cannot pass data in destroy signal of gtk2

这是代码,我想将my_pointer传递给gtk的destroy信号window GtkWidget *window:

static gboolean destroy(GtkWidget *widget, GdkEvent *event, gpointer data) {
  printf("gpointer: %ld\n", data);
}

g_signal_connect (window, "destroy", G_CALLBACK(destroy), my_pointer);

但是我得到的是1,总是1

当我将 my_pointer 传递给它时,任何其他信号都可以正常工作,例如 focus-in-eventkey-press-event 等,但是 destroy 信号有什么问题? 1 根本不是指针。

destroy signal 不同于 destroy-event 信号。

destroy 信号回调的预期函数原型如下:

void
user_function (GtkWidget *object,
               gpointer   user_data)

而您的函数当前匹配 destroy-event 信号的回调:

gboolean
user_function (GtkWidget *widget,
               GdkEvent  *event,
               gpointer   user_data)

更改 return 类型并删除函数的第二个参数。

static void destroy(GtkWidget *widget, gpointer data) {
    printf("gpointer: %ld\n", data);
}