X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fhelper.c;h=9cbd6f0f2a9d9bf6991da032358d344e25d505a6;hb=c86f5b8a45cca158b46a4fe3b48280e88ce9aba1;hp=5ed0e98845c9b8e74282e07deb14dc5e256e2f24;hpb=d0371553a98cd169353bf6d211e375e5ffc3a3bd;p=pspp diff --git a/src/ui/gui/helper.c b/src/ui/gui/helper.c index 5ed0e98845..9cbd6f0f2a 100644 --- a/src/ui/gui/helper.c +++ b/src/ui/gui/helper.c @@ -297,3 +297,46 @@ marshaller_VOID__INT_INT_INT (GClosure *closure, g_marshal_value_peek_int (param_values + 3), data2); } + +/* Create a deep copy of SRC */ +GtkListStore * +clone_list_store (const GtkListStore *src) +{ + GtkTreeIter src_iter; + gboolean ok; + gint i; + const gint n_cols = gtk_tree_model_get_n_columns (GTK_TREE_MODEL (src)); + GType *types = g_malloc (sizeof (*types) * n_cols); + + int row = 0; + GtkListStore *dest; + + for (i = 0 ; i < n_cols; ++i ) + types[i] = gtk_tree_model_get_column_type (GTK_TREE_MODEL (src), i); + + dest = gtk_list_store_newv (n_cols, types); + + for (ok = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (src), + &src_iter); + ok; + ok = gtk_tree_model_iter_next (GTK_TREE_MODEL (src), &src_iter)) + { + GtkTreeIter dest_iter; + gtk_list_store_append (dest, &dest_iter); + + for (i = 0 ; i < n_cols; ++i ) + { + GValue val = {0}; + + gtk_tree_model_get_value (GTK_TREE_MODEL (src), &src_iter, i, &val); + gtk_list_store_set_value (dest, &dest_iter, i, &val); + + g_value_unset (&val); + } + row++; + } + + return dest; +} + +