1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
   | #include <gtk/gtk.h>
 
static gboolean delete_event_signal (GtkWidget *widget, gpointer data);
static void response_event_handler (GtkWidget *widget, gint response_id, gpointer data);
 
int
main (int    argc, 
      char   *argv[])
{
	GtkWidget *window;
	GtkWidget *dialog;
 
	gtk_init (&argc, &argv);
 
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_window_set_default_size (GTK_WINDOW(window), 320, 200);
 
        /* Cette boite de dialogue doit être affichée lorsque l'on clique sur la
         * croix rouge de la fenetre. Sinon, elle est cachée.
         */
	dialog = gtk_message_dialog_new (NULL,
		   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
		   GTK_MESSAGE_QUESTION,
		   GTK_BUTTONS_YES_NO,
		   "Voulez vous vraiment quitter\nl'application ?", NULL);
	g_signal_connect (dialog, "response", G_CALLBACK(response_event_handler), NULL);
	g_signal_connect (window, "delete-event", G_CALLBACK(delete_event_signal), NULL);
 
 
	gtk_widget_show (window);
 
	gtk_main ();
 
	return 0;
}
 
static gboolean
delete_event_signal (GtkWidget *widget, gpointer data)
{
        /* La croix rouge a été cliquée, j'affiche le message */
	gtk_widget_show_all (GTK_WIDGET(data));
	return TRUE;
}
 
static void 
response_event_handler (GtkWidget *widget, gint response_id, gpointer data)
{
        /* L'utilisateur a répondu, je cache la boite de dialogue */
	gtk_widget_hide_all (widget);
 
        /* On quitte l'application en cas de réponse positive */
	if (response_id == GTK_RESPONSE_YES
            || response_id == GTK_RESPONSE_NONE) {
		gtk_main_quit ();
	}
} |