Bonjour,

je débute en GTK et je cherche à appeler une fonction de callback à partir d'un bouton de menu et à partir de la détection du signal delete_event.

En fait, la partie suivante fonctionne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(GTK_OBJECT(main_window), "delete_event", G_CALLBACK(delete_event), (GtkWidget*) main_window);
qui appelle :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
bool delete_event(GtkWidget *widget, GdkEvent *event, gpointer window) {
    GtkWidget *dialog_box;
    dialog_box = gtk_message_dialog_new(GTK_WINDOW(window),
        GTK_DIALOG_MODAL,
        GTK_MESSAGE_QUESTION,
        GTK_BUTTONS_YES_NO,
        "Êtes-vous sûr de vouloir quitter ?");
    gtk_window_set_title(GTK_WINDOW(dialog_box), "CD Manager");
    switch(gtk_dialog_run(GTK_DIALOG(dialog_box))) {
        case GTK_RESPONSE_YES:
            // Exit program
            return false;
            break;
        case GTK_RESPONSE_NO:
            // Message box destroyed
            gtk_widget_destroy(dialog_box);
            return true;
            break;
    }
}
En fait, j'ai aussi le code suivant dans la fenêtre principale main_windows:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
// Ce n'est pas du code mais juste la hiérarchie de ma barre de menu
menu_bar = gtk_menu_bar_new();
menu_item_1 = gtk_menu_item_new_with_mnemonic("_Fichier");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_1), menu_item_1_menu);
quit = gtk_image_menu_item_new_from_stock("gtk-quit", accel_group);
J'aimerais connecter le signal "activate" à la fonction de callback delete_event. J'ai essayé des choses comme pour pouvoir fermer la fenêtre avec le même code en cliquant aussi sur ce bouton du menu :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
g_signal_connect((gpointer) quit, "activate", G_CALLBACK(delete_event), main_window);
J'obtiens des erreurs à l'exécution du programme:
(encoder:22453): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GtkWindow'
(encoder:22453): Gtk-CRITICAL **: gtk_message_dialog_new: assertion `parent == NULL || GTK_IS_WINDOW (parent)' failed
(encoder:22453): Gtk-CRITICAL **: gtk_window_set_title: assertion `GTK_IS_WINDOW (window)' failed
(encoder:22453): Gtk-CRITICAL **: gtk_dialog_run: assertion `GTK_IS_DIALOG (dialog)' failed

Est ce que quelqu'un pourrait m'éclairer ?

Merci d'avance.