Bonjour,
Je viens poster un message ici car j'ai un problème avec le logiciel que je suis en train de modifier, un problème au niveau de GTK.
Je vous explique donc mon problème :
J'ai, pour commencer, une fenêtre principale, dans laquelle il y a un menu. Via ce menu, il y a possibilité de lancer une autre fenêtre pour gérer des paramètres!
Dans cette fenêtre de paramètres, plusieurs choix sont disponibles, qui sont inutiles de préciser, et un bouton en bas est cliquable à tout moment, le bouton "Fermer", qui va cacher la fenêtre et enregistrer les nouveaux paramètres. Voici le code de ce bouton :
WConfig.hbuttonbox = gtk_hbutton_box_new ();
gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_END);
gtk_container_add (GTK_CONTAINER (WConfig.vbox), WConfig.hbuttonbox);
WConfig.buttonfermer = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
gtk_container_add (GTK_CONTAINER (WConfig.hbuttonbox), WConfig.buttonfermer);
g_signal_connect ((gpointer) WConfig.buttonfermer, "clicked",
G_CALLBACK (buttonFermerConfig_clicked),
NULL);
Après, lorsque je relance la fenêtre de paramètres, tout fonctionne nickel.
Si, au lieu de cliquer sur le bouton "Fermer", je clique sur la croix en haut à droite, la fenêtre ce cache et les paramètres sont enregistrés. Voici le code de ce boutton :
WConfig.wconfig = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_position (GTK_WINDOW(WConfig.wconfig),GTK_WIN_POS_CENTER);
gtk_window_set_modal(GTK_WINDOW(WConfig.wconfig), TRUE);
WConfig.vbox = gtk_vbox_new (FALSE, 10);
gtk_container_add (GTK_CONTAINER (WConfig.wconfig), WConfig.vbox);
g_signal_connect(WConfig.wconfig, "destroy", G_CALLBACK(buttonFermerConfig_clicked), NULL);
Le problème étant que lorsque je relance cette fenêtre de paramètres, une erreur surviens, lié aux combos qui sont présent dans la fenêtre :
(prog:12879): Gtk-CRITICAL **: gtk_widget_show_all: assertion `GTK_IS_WIDGET (widget)' failed
(prog:12879): GLib-GObject-WARNING **: invalid uninstantiatable type `(null)' in cast to `GtkEntry'
(prog:12879): Gtk-CRITICAL **: gtk_entry_set_text: assertion `GTK_IS_ENTRY (entry)' failed
(prog:12879): GLib-GObject-WARNING **: invalid uninstantiatable type `(null)' in cast to `GtkComboBox'
(prog:12879): Gtk-CRITICAL **: gtk_combo_box_get_model: assertion `GTK_IS_COMBO_BOX (combo_box)' failed
(prog:12879): Gtk-CRITICAL **: gtk_tree_model_get_iter_first: assertion `GTK_IS_TREE_MODEL (tree_model)' failed
(et bien d'autre mais identique, qui sont reliés à d'autres combos).
J'ai donc était voir dans la FAQ de GTK+ la différence entre "cliqued" et "delete-event", ce qui m'a permis de mettre, dans ma fonction callback, la fonction :
gtk_widget_hide_on_delete (WConfig.wconfig);
à la place de la fonction :
gtk_widget_hide (WConfig.wconfig);
Résultat : aucun changement, le bug persiste.
Je pense que lorsque je clique sur la croix, cela ferme la fenêtre, et je suis obligé de réinitialiser tout les combo et le reste pour pouvoir réafficher ma fenêtre correctement, mais je n'en suis pas sur du tout, n'étant pas un pro en GTK+ (loin de là) ...
Je vous demande donc de m'aider à comprendre ce problème et ainsi trouver une solution, car cela est plutôt embétant(surtout avec moi qui clique souvent sur la croix et non sur le bouton Fermer ... -_-)
Merci d'avance pour vos réponses!
Ridbark
Partager