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/gtkliststore.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/gtkliststore.c')
-rw-r--r-- | gtk/gtkliststore.c | 98 |
1 files changed, 80 insertions, 18 deletions
diff --git a/gtk/gtkliststore.c b/gtk/gtkliststore.c index 30123a23b8..dc5ebbfa9a 100644 --- a/gtk/gtkliststore.c +++ b/gtk/gtkliststore.c @@ -711,6 +711,36 @@ gtk_list_store_get_compare_func (GtkListStore *list_store) } static void +gtk_list_store_set_vector_internal (GtkListStore *list_store, + GtkTreeIter *iter, + gboolean *emit_signal, + gboolean *maybe_need_sort, + gint *columns, + GValue *values, + gint n_values) +{ + gint i; + GtkTreeIterCompareFunc func = NULL; + + func = gtk_list_store_get_compare_func (list_store); + if (func != _gtk_tree_data_list_compare_func) + *maybe_need_sort = TRUE; + + for (i = 0; i < n_values; i++) + { + *emit_signal = gtk_list_store_real_set_value (list_store, + iter, + columns[i], + &values[i], + FALSE) || *emit_signal; + + if (func == _gtk_tree_data_list_compare_func && + columns[i] == list_store->sort_column_id) + *maybe_need_sort = TRUE; + } +} + +static void gtk_list_store_set_valist_internal (GtkListStore *list_store, GtkTreeIter *iter, gboolean *emit_signal, @@ -768,6 +798,53 @@ gtk_list_store_set_valist_internal (GtkListStore *list_store, } /** + * gtk_list_store_set_valuesv: + * @list_store: A #GtkListStore + * @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_list_store_set_valist() which + * takes the columns and values as two arrays, instead of + * varargs. This function is mainly intended for + * language-bindings and in case the number of columns to + * change is not known until run-time. + * + * Since: 2.12 + */ +void +gtk_list_store_set_valuesv (GtkListStore *list_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_LIST_STORE (list_store)); + g_return_if_fail (VALID_ITER (iter, list_store)); + + gtk_list_store_set_vector_internal (list_store, iter, + &emit_signal, + &maybe_need_sort, + columns, values, n_values); + + if (maybe_need_sort && GTK_LIST_STORE_IS_SORTED (list_store)) + gtk_list_store_sort_iter_changed (list_store, iter, list_store->sort_column_id); + + if (emit_signal) + { + GtkTreePath *path; + + path = gtk_list_store_get_path (GTK_TREE_MODEL (list_store), iter); + gtk_tree_model_row_changed (GTK_TREE_MODEL (list_store), path, iter); + gtk_tree_path_free (path); + } +} + +/** * gtk_list_store_set_valist: * @list_store: A #GtkListStore * @iter: A valid #GtkTreeIter for the row being modified @@ -1888,8 +1965,6 @@ gtk_list_store_insert_with_valuesv (GtkListStore *list_store, gint length; gboolean changed = FALSE; gboolean maybe_need_sort = FALSE; - GtkTreeIterCompareFunc func = NULL; - gint i; /* FIXME refactor to reduce overlap with * gtk_list_store_insert_with_values() @@ -1917,22 +1992,9 @@ gtk_list_store_insert_with_valuesv (GtkListStore *list_store, list_store->length++; - func = gtk_list_store_get_compare_func (list_store); - if (func != _gtk_tree_data_list_compare_func) - maybe_need_sort = TRUE; - - for (i = 0; i < n_values; i++) - { - changed = gtk_list_store_real_set_value (list_store, - iter, - columns[i], - &values[i], - FALSE) || changed; - - if (func == _gtk_tree_data_list_compare_func && - columns[i] == list_store->sort_column_id) - maybe_need_sort = TRUE; - } + gtk_list_store_set_vector_internal (list_store, iter, + &changed, &maybe_need_sort, + columns, values, n_values); /* Don't emit rows_reordered here */ if (maybe_need_sort && GTK_LIST_STORE_IS_SORTED (list_store)) |