Reutilisation de fonctions callback
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:
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:
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:
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:
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.