#include #include int destroy_handler (void) { fprintf (stderr, "destroy handler\n"); return TRUE; } int destroy_after (void) { fprintf (stderr, "destroy after\n"); gtk_main_quit (); return FALSE; } int main (int argc, char **argv) { GtkWidget *window; GtkWidget *vbox; GtkWidget *entry; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); vbox = gtk_vbox_new (FALSE, 0); entry = gtk_entry_new (); gtk_entry_set_editable (GTK_ENTRY (entry), TRUE); gtk_container_add (GTK_CONTAINER (vbox), entry); gtk_container_add (GTK_CONTAINER (window), vbox); /* Hook destroy and after destroy */ g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_handler), NULL); g_signal_connect_after (G_OBJECT (window), "destroy", G_CALLBACK (destroy_after), NULL); /* Hook expose_event and after expose_event */ g_signal_connect (G_OBJECT (entry), "expose_event", G_CALLBACK (destroy_handler), NULL); g_signal_connect_after (G_OBJECT (entry), "expose_event", G_CALLBACK (destroy_after), NULL); gtk_widget_show_all (window); gtk_main (); return 0; }