// g_signal_connect example: casting, arrays. By Bertrand Massot #include <gtk/gtk.h> static void pass_char_array (GtkWidget *widget, gpointer data) { g_print ("Value passed to callback: [%s]\n", (char *) data); } static void pass_int (GtkWidget *widget, gpointer data) { g_print ("Value passed to callback: [%d]\n", (int) data); } static void pass_int_array (GtkWidget *widget, int *array) { g_print ("Values passed to callback: [%d][%d]\n", array[0], array[1]); } int main (int argc, char **argv) { GtkWidget *window, *button, *box; 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); box = gtk_vbox_new (FALSE, 5); gtk_container_add (GTK_CONTAINER (window), box); // First button button = gtk_button_new_with_label ("char array button"); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(pass_char_array), "test data"); gtk_box_pack_start (GTK_BOX (box), button, TRUE, TRUE, 5); // now let's work on an integer array: int a[3] = {362,45,1789}; // Create 2d button, then pass him only the first integer button = gtk_button_new_with_label ("int button"); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(pass_int), (gpointer)a[0]); gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 5); // 3d button: pass him whole array. See callback prototype button = gtk_button_new_with_label ("int array button"); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(pass_int_array), (int*)a); gtk_box_pack_start (GTK_BOX (box), button, TRUE, TRUE, 5); gtk_widget_show_all (window); gtk_main (); return 0; }