// g_signal_connect example: structure pointer. By Bertrand Massot #include <gtk/gtk.h> typedef struct { gchar *name; gint age; } person; static void callback(GtkWidget *widget, person *x) { g_print ("name:%s age:%d\n", x->name, x->age); } int main (int argc, char **argv) { GtkWidget *window, *button; gtk_init (&argc, &argv); // Create window window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "destroy",G_CALLBACK (gtk_main_quit), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); // array of structures person *friends[2]; // populate it friends[0] = (person*) g_malloc(sizeof(person)); friends[0]->name = g_strdup("Joe"); friends[0]->age = 25; friends[1] = (person*) g_malloc(sizeof(person)); friends[1]->name = g_strdup("Bill"); friends[1]->age = 32; // Create the button and pass values of a person to it button = gtk_button_new_with_label ("infos button"); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(callback), (person*)friends[0]); gtk_container_add(GTK_CONTAINER(window), button); gtk_widget_show_all (window); gtk_main (); g_free(friends); return 0; }