#include #include void callback (char *data, void *p, void *p2) { printf ("Callback being called: data = %p (%s)\n", data, data); printf (" p = %p\n", p); printf (" p2 = %p\n", p2); printf (" p is object? %d\n", G_IS_OBJECT (p)); printf (" p2 is object? %d\n", G_IS_OBJECT (p2)); gtk_main_quit(); } void callback2 (char *data, GtkWidget *p) { printf ("Callback being called: data = %p (%s)\n", data, data); printf (" ptr = %p\n", p); printf (" is object? %d\n", G_IS_OBJECT (p)); } int main (int argc, char **argv) { GtkWidget *w, *b; GClosure *c, *c2; char *data = "Some data"; printf ("data = %p\n", data); /* Init and create new window */ gtk_init (&argc, &argv); w = gtk_window_new (GTK_WINDOW_TOPLEVEL); b = gtk_button_new_with_label ("A quite long title for a button"); gtk_container_add (GTK_CONTAINER(w), b); gtk_widget_show_all (w); printf ("window = %p\n", w); printf ("button = %p\n", b); /* Create closures and connect */ c = g_cclosure_new_swap (G_CALLBACK(callback), data, NULL); g_signal_connect_closure (w, "delete-event", c, 0); c2 = g_cclosure_new_swap (G_CALLBACK(callback2), data, NULL); g_signal_connect_closure (b, "clicked", c2, 0); gtk_main (); return 0; }