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 :
qui appelle :
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);
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
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; } }
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
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'obtiens des erreurs à l'exécution du programme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 g_signal_connect((gpointer) quit, "activate", G_CALLBACK(delete_event), main_window);
(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.
Partager