diff options
author | Kristian Rietveld <kris@gtk.org> | 2007-06-04 23:48:38 +0000 |
---|---|---|
committer | Kristian Rietveld <kristian@src.gnome.org> | 2007-06-04 23:48:38 +0000 |
commit | 21b381a2e29bb13e29502b6eeff2375c69e31a67 (patch) | |
tree | 97d5092a20e6570512b274374d8151e9202d6e80 /gtk/gtktreestore.c | |
parent | 3337ee8fa2fde7db58f4fe60ac55caad2189e4fa (diff) | |
download | gtk+-21b381a2e29bb13e29502b6eeff2375c69e31a67.tar.gz |
Fix #399071, suggestion from Benoit Dejean.
2007-06-05 Kristian Rietveld <kris@gtk.org>
Fix #399071, suggestion from Benoit Dejean.
* gtk/gtkliststore.[ch] (gtk_list_store_set_vector_internal): new
function, factored out code iterating (columns, values) vectors from
gtk_list_store_new_with_valuesv to here,
(gtk_list_store_set_valuesv): new public function to set list store
values using (columns, values) vectors,
(gtk_list_store_new_with_valuesv): call new _set_vector_internal
instead.
* gtk/gtktreestore.[ch] (gtk_tree_store_set_vector_internal),
(gtk_tree_store_set_valuesv), (gtk_tree_store_new_with_valuesv):
likewise.
* gtk/gtk.symbols: updated.
svn path=/trunk/; revision=18041
Diffstat (limited to 'gtk/gtktreestore.c')
-rw-r--r-- | gtk/gtktreestore.c | 93 |
1 files changed, 77 insertions, 16 deletions
diff --git a/gtk/gtktreestore.c b/gtk/gtktreestore.c index 55a89af428..4379af70bb 100644 --- a/gtk/gtktreestore.c +++ b/gtk/gtktreestore.c @@ -864,6 +864,34 @@ gtk_tree_store_get_compare_func (GtkTreeStore *tree_store) } static void +gtk_tree_store_set_vector_internal (GtkTreeStore *tree_store, + GtkTreeIter *iter, + gboolean *emit_signal, + gboolean *maybe_need_sort, + gint *columns, + GValue *values, + gint n_values) +{ + gint i; + GtkTreeIterCompareFunc func = NULL; + + func = gtk_tree_store_get_compare_func (tree_store); + if (func != _gtk_tree_data_list_compare_func) + *maybe_need_sort = TRUE; + + for (i = 0; i < n_values; i++) + { + *emit_signal = gtk_tree_store_real_set_value (tree_store, iter, + columns[i], &values[i], + FALSE) || *emit_signal; + + if (func == _gtk_tree_data_list_compare_func && + columns[i] == tree_store->sort_column_id) + *maybe_need_sort = TRUE; + } +} + +static void gtk_tree_store_set_valist_internal (GtkTreeStore *tree_store, GtkTreeIter *iter, gboolean *emit_signal, @@ -920,6 +948,52 @@ gtk_tree_store_set_valist_internal (GtkTreeStore *tree_store, } /** + * gtk_tree_store_set_valuesv: + * @tree_store: A #GtkTreeStore + * @iter: A valid #GtkTreeIter for the row being modified + * @columns: an array of column numbers + * @values: an array of GValues + * @n_values: the length of the @columns and @values arrays + * + * A variant of gtk_tree_store_set_valist() which takes + * the columns and values as two arrays, instead of varargs. This + * function is mainly intended for language bindings or in case + * the number of columns to change is not known until run-time. + * + * Since: 2.12 + **/ +void +gtk_tree_store_set_valuesv (GtkTreeStore *tree_store, + GtkTreeIter *iter, + gint *columns, + GValue *values, + gint n_values) +{ + gboolean emit_signal = FALSE; + gboolean maybe_need_sort = FALSE; + + g_return_if_fail (GTK_IS_TREE_STORE (tree_store)); + g_return_if_fail (VALID_ITER (iter, tree_store)); + + gtk_tree_store_set_vector_internal (tree_store, iter, + &emit_signal, + &maybe_need_sort, + columns, values, n_values); + + if (maybe_need_sort && GTK_TREE_STORE_IS_SORTED (tree_store)) + gtk_tree_store_sort_iter_changed (tree_store, iter, tree_store->sort_column_id, TRUE); + + if (emit_signal) + { + GtkTreePath *path; + + path = gtk_tree_store_get_path (GTK_TREE_MODEL (tree_store), iter); + gtk_tree_model_row_changed (GTK_TREE_MODEL (tree_store), path, iter); + gtk_tree_path_free (path); + } +} + +/** * gtk_tree_store_set_valist: * @tree_store: A #GtkTreeStore * @iter: A valid #GtkTreeIter for the row being modified @@ -1394,8 +1468,6 @@ gtk_tree_store_insert_with_valuesv (GtkTreeStore *tree_store, GtkTreeIter tmp_iter; gboolean changed = FALSE; gboolean maybe_need_sort = FALSE; - GtkTreeIterCompareFunc func = NULL; - gint i; g_return_if_fail (GTK_IS_TREE_STORE (tree_store)); @@ -1418,20 +1490,9 @@ gtk_tree_store_insert_with_valuesv (GtkTreeStore *tree_store, iter->user_data = new_node; g_node_insert (parent_node, position, new_node); - func = gtk_tree_store_get_compare_func (tree_store); - if (func != _gtk_tree_data_list_compare_func) - maybe_need_sort = TRUE; - - for (i = 0; i < n_values; i++) - { - changed = gtk_tree_store_real_set_value (tree_store, iter, - columns[i], &values[i], - FALSE) || changed; - - if (func == _gtk_tree_data_list_compare_func && - columns[i] == tree_store->sort_column_id) - maybe_need_sort = TRUE; - } + gtk_tree_store_set_vector_internal (tree_store, iter, + &changed, &maybe_need_sort, + columns, values, n_values); if (maybe_need_sort && GTK_TREE_STORE_IS_SORTED (tree_store)) gtk_tree_store_sort_iter_changed (tree_store, iter, tree_store->sort_column_id, FALSE); |