Problèmes ... listes, index, ....
Bonjour,
Je m'amuse un peu avec GTK+ histoire de passer le temps et pour ca je me fait mon notepad perso mais avec affichage en onglets des fichiers ouverts !
J'ai un problème lors de la suppression d'onglet, ou de suppression des informations des onglets que je stock dans une GList, chaque onglet a donc une petite structure allouée dynamiquement lors de la creation de l'onglet.
Voici la fonction de suppression d'onglets:
Code:
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
|
void gui_remove_current_tab (GtkWidget * p_notebook)
{
struct file_tab * p_tab = NULL;
gint i_index = -1;
gboolean b_ret = FALSE;
/*
* On recupere l'index de l'onglet courant.
*/
i_index = gui_get_current_tab_index (p_notebook);
if (i_index >= 0)
{
/*
* On verifie si le fichier a ete change ou pas.
*/
b_ret = gui_get_file_modified (i_index);
if (b_ret)
{
/*
* Afficher un message indiquant que le fichier a ete modifie
* et demande s'il doit etre enregistre.
*/
}
/*
* Suppression de la structure dans la liste.
*/
p_tab = (struct file_tab *) g_list_nth_data (p_tab_list, i_index);
g_free (p_tab);
g_list_remove_link (p_tab_list, g_list_nth (p_tab_list, i_index));
printf ("Nombre d'elements dans la liste: %d\n", g_list_length (p_tab_list));
printf ("Nombre d'onglets ouverts: %d\n", gtk_notebook_get_n_pages (GTK_NOTEBOOK (p_notebook)));
/*
* Suppression de l'onglet.
*/
gtk_notebook_remove_page (GTK_NOTEBOOK (p_notebook), i_index);
}
} |
et voici un ptit test pendant la suppression d'onglets, vous pouvez voir deja un decallage des chiffres, je ne sais pas d'où ca viens mais le plus important reside dans le fait que certaines infos sont erronées au bout d'un moment comme là, dans le nombre d'éléments dans la liste:
Citation:
Nombre d'elements dans la liste: 7
Nombre d'onglets ouverts: 8
Nombre d'elements dans la liste: 6
Nombre d'onglets ouverts: 7
Nombre d'elements dans la liste: 5
Nombre d'onglets ouverts: 6
Nombre d'elements dans la liste: 4
Nombre d'onglets ouverts: 5
Nombre d'elements dans la liste: 3
Nombre d'onglets ouverts: 4
Nombre d'elements dans la liste: 71
Nombre d'onglets ouverts: 3
Nombre d'elements dans la liste: 2
Nombre d'onglets ouverts: 2
Je ne sais pas d'où ca viens, lorsque cela arrive, la suppression du prochain onglet entraine l'arret immédiat du programme, je suis un peu perdu j'dois dire !
J'ai pû remarquer que cela arrive surtout lorsque je supprime le premier onglet donc egalement le premier élément de la GList !
Merci pour vos lumières ;)