static void tree_selection_unselect_helper(gpointer data, gpointer user_data) { GtkTreeSelection *s = user_data; GtkTreeIter *iter = data; gtk_tree_selection_unselect_iter(s, iter); w_tree_iter_free(iter); }
static void remove_selected_file(void *iter_ptr, void *search_ptr) { GtkTreeModel *model; GtkTreeIter *iter; GtkTreeIter child; struct result_data *rd; struct search *search; record_t *rc; search = search_ptr; iter = iter_ptr; model = gtk_tree_view_get_model(GTK_TREE_VIEW(search->tree)); g_assert(search->items > 0); search->items--; rd = get_result_data(model, iter); rc = rd->record; /* First get the record, it must be unreferenced at the end */ g_assert(rc->refcount > 1); if (gtk_tree_model_iter_nth_child(model, &child, iter, 0)) { struct result_data *child_data, tmp; guint children; child_data = get_result_data(model, &child); /* * Copy the contents of the first child's row into the parent's row */ children = rd->children; tmp = *rd; *rd = *child_data; *child_data = tmp; rd->iter = *iter; rd->children = children; /* And remove the child's row */ iter = &child; } else { /* * The row has no children, it's either a child or a top-level node * without children. */ } prepare_remove_record(model, NULL, iter, search); gtk_tree_store_remove(GTK_TREE_STORE(model), iter); w_tree_iter_free(iter_ptr); }