Передача переменных через функцию обратного вызова в GTK C - PullRequest
0 голосов
/ 04 июля 2011

Я пытаюсь напечатать значение переменной i на консоли из моего обратного вызова. functon, но вместо печати 23 он продолжает печатать какой-то адрес 11652528 и т.д ...

Я довольно много искал в сети, и, согласно старому учебнику GTK (где фактический G_CALLBACK Макрос был GTK_SIGNAL_FUNC), это должно работать.

Кто-нибудь имеет представление, где ошибка ??

#include <stdlib.h>
#include <gtk/gtk.h>
#include <string.h>

void f_window(GtkWidget* widget, gpointer data)
{
    g_print("%d\n",GPOINTER_TO_INT(data));
}
int main(int argc, char **argv)
{
    gint i=23;

    GtkWidget * MainWindow = NULL;

    gtk_init(&argc, &argv);

    MainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    g_signal_connect(G_OBJECT(MainWindow),"delete-event",G_CALLBACK(f_window),GINT_TO_POINTER(i));

    gtk_widget_show_all(MainWindow);
    gtk_main();


    gtk_exit(EXIT_SUCCESS);
    return EXIT_SUCCESS;
}

заранее спасибо !!!

1 Ответ

5 голосов
/ 04 июля 2011

Сигнал обратного вызова "delete-event" принимает три аргумента.

Сигнатура функции для f_window должна быть GtkWidget* widget, GdkEvent *event, gpointer data.

Вы фактически печатаете значение event в своем коде.

...