[GTK_TREE_VIEW] Sélection multiple
Bonjour,
Voici mon problème:
j'ai un GTK_TREE_VIEW configuré avec sélection multiple.
J'ai un bouton "supprimer" qui permet de supprimer le ou les éléments sélectionnés.
Je procède donc comme suite (CB_wordsdelbtn est le callback du bouton clicked, CB_wordsdel est appelée pour supprimer chaque élément sélectionné un par un, WIN_managevoc_data est la fenêtre contenant le tout, c'est une structure dans laquelle j'ai mis les widgets):
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
| void CB_wordsdel(gpointer data, gpointer user_data)
{
WIN_managevoc_data_str *WIN_managevoc_data = (WIN_managevoc_data_str*) user_data;
GtkTreeIter iter;
gchar *word1, *word2, *theme;
GtkTreeModel *p_tree_model;
p_tree_model = gtk_tree_view_get_model(GTK_TREE_VIEW(WIN_managevoc_data->VocTreeview));
if(p_tree_model != NULL)
{
if(gtk_tree_model_get_iter(p_tree_model, &iter, data))
{
gtk_tree_model_get(p_tree_model, &iter, 0, &word1, 1, &word2, 2, &theme, -1);
gtk_list_store_remove(WIN_managevoc_data->Store, &iter);
free(word1);
free(word2);
free(theme);
}
}
}
void CB_wordsdelbtn(GtkWidget* treeview, gpointer data)
{
WIN_managevoc_data_str *WIN_managevoc_data = (WIN_managevoc_data_str*) data;
GtkTreeModel *p_tree_model;
p_tree_model = gtk_tree_view_get_model(GTK_TREE_VIEW(WIN_managevoc_data->VocTreeview));
WIN_managevoc_data->SelectedRows = gtk_tree_selection_get_selected_rows(WIN_managevoc_data->Selection, &p_tree_model);
g_list_foreach(WIN_managevoc_data->SelectedRows, CB_wordsdel, WIN_managevoc_data);
// free memory
g_list_foreach(WIN_managevoc_data->SelectedRows, (GFunc)gtk_tree_path_free, NULL);
g_list_free(WIN_managevoc_data->SelectedRows);
(void)treeview;
} |
Le problème en pratique, c'est que lorsque je sélectionne plusieurs éléments et que je clique sur "supprimer", environ une fois sur deux tous les éléments voulus ne sont pas supprimés.
Il reste donc des éléments sélectionnés qui auraient dû être supprimés. Pour tout supprimer je dois donc parfois cliquer plusieurs fois sur supprimer.
Et je ne compends pas où j'ai commis une erreur... si quelqu'un pouvait m'éclairer parce que là je sèche!
Je vous remercie.