Multiple calls to remove item from history don't work #21.

After removing items from widget's model, subsequent items need to be
reindexed to correctly point at items in history's data sructure.
This commit is contained in:
Paweł Błaszczyk 2014-07-12 22:15:22 +02:00
parent 31a12b8ebd
commit 68eb16f929

View File

@ -199,7 +199,8 @@ static void remove_selected()
gint selected_count = gtk_tree_selection_count_selected_rows(search_selection); gint selected_count = gtk_tree_selection_count_selected_rows(search_selection);
if (selected_count > 0) { if (selected_count > 0) {
gint i; gint i;
GtkListStore *store = GTK_LIST_STORE(gtk_tree_view_get_model((GtkTreeView*)treeview_search)); GtkTreeModel *model = gtk_tree_view_get_model((GtkTreeView*)treeview_search);
GtkListStore *store = GTK_LIST_STORE(model);
GArray *sel = g_array_new(FALSE, FALSE, sizeof(GtkTreeIter)); GArray *sel = g_array_new(FALSE, FALSE, sizeof(GtkTreeIter));
gtk_tree_selection_selected_foreach(search_selection, add_iter, sel); gtk_tree_selection_selected_foreach(search_selection, add_iter, sel);
gtk_tree_selection_unselect_all(search_selection); gtk_tree_selection_unselect_all(search_selection);
@ -207,8 +208,15 @@ static void remove_selected()
gint remove_item; gint remove_item;
GtkTreeIter *iter = &g_array_index(sel, GtkTreeIter, i); GtkTreeIter *iter = &g_array_index(sel, GtkTreeIter, i);
gtk_tree_model_get((GtkTreeModel*)search_list, iter, 0, &remove_item, -1); gtk_tree_model_get((GtkTreeModel*)search_list, iter, 0, &remove_item, -1);
history = g_list_remove(history, g_list_nth_data(history, remove_item-i)); history = g_list_remove(history, g_list_nth_data(history, remove_item));
gtk_list_store_remove(store, iter); if (!gtk_list_store_remove(store, iter))
continue;
do {
gint item;
gtk_tree_model_get(model, iter, 0, &item, -1);
gtk_list_store_set(store, iter, 0, item - 1, -1);
} while (gtk_tree_model_iter_next(model, iter));
} }
g_array_free(sel, TRUE); g_array_free(sel, TRUE);
} }