X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkliststore.c;h=467bac0f15dc4da7b0a98336a01fe22f63952e7c;hb=d84f5ae17e5b891b30dd54ddc10fd22c2a609e0e;hp=907b50e990a6e17b59039d1be3a159657d5e0c23;hpb=0853ce3077d577a5062f224918a115a2e52803af;p=~andy%2Fgtk diff --git a/gtk/gtkliststore.c b/gtk/gtkliststore.c index 907b50e99..467bac0f1 100644 --- a/gtk/gtkliststore.c +++ b/gtk/gtkliststore.c @@ -12,9 +12,7 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ #include "config.h" @@ -420,7 +418,7 @@ iter_is_valid (GtkTreeIter *iter, * in. Note that only types derived from standard GObject fundamental types * are supported. * - * As an example, gtk_tree_store_new (3, G_TYPE_INT, G_TYPE_STRING, + * As an example, gtk_list_store_new (3, G_TYPE_INT, G_TYPE_STRING, * GDK_TYPE_PIXBUF); will create a new #GtkListStore with three columns, of type * int, string and #GdkPixbuf respectively. * @@ -469,7 +467,7 @@ gtk_list_store_new (gint n_columns, * * Non-vararg creation function. Used primarily by language bindings. * - * Return value: (transfer none): a new #GtkListStore + * Return value: (transfer full): a new #GtkListStore * Rename to: gtk_list_store_new **/ GtkListStore * @@ -844,8 +842,7 @@ gtk_list_store_real_set_value (GtkListStore *list_store, if (! g_type_is_a (G_VALUE_TYPE (value), priv->column_headers[column])) { - if (! (g_value_type_compatible (G_VALUE_TYPE (value), priv->column_headers[column]) && - g_value_type_compatible (priv->column_headers[column], G_VALUE_TYPE (value)))) + if (! (g_value_type_transformable (G_VALUE_TYPE (value), priv->column_headers[column]))) { g_warning ("%s: Unable to convert from %s to %s\n", G_STRLOC, @@ -853,6 +850,8 @@ gtk_list_store_real_set_value (GtkListStore *list_store, g_type_name (priv->column_headers[column])); return retval; } + + g_value_init (&real_value, priv->column_headers[column]); if (!g_value_transform (value, &real_value)) { g_warning ("%s: Unable to make conversion from %s to %s\n", @@ -1250,12 +1249,12 @@ gtk_list_store_remove (GtkListStore *list_store, * gtk_list_store_insert: * @list_store: A #GtkListStore * @iter: (out): An unset #GtkTreeIter to set to the new row - * @position: position to insert the new row + * @position: position to insert the new row, or -1 for last * * Creates a new row at @position. @iter will be changed to point to this new - * row. If @position is larger than the number of rows on the list, then the - * new row will be appended to the list. The row will be empty after this - * function is called. To fill in values, you need to call + * row. If @position is -1 or is larger than the number of rows on the list, + * then the new row will be appended to the list. The row will be empty after + * this function is called. To fill in values, you need to call * gtk_list_store_set() or gtk_list_store_set_value(). * **/ @@ -1272,7 +1271,6 @@ gtk_list_store_insert (GtkListStore *list_store, g_return_if_fail (GTK_IS_LIST_STORE (list_store)); g_return_if_fail (iter != NULL); - g_return_if_fail (position >= 0); priv = list_store->priv; @@ -1281,7 +1279,7 @@ gtk_list_store_insert (GtkListStore *list_store, seq = priv->seq; length = g_sequence_get_length (seq); - if (position > length) + if (position > length || position < 0) position = length; ptr = g_sequence_get_iter_at_pos (seq, position); @@ -1406,14 +1404,10 @@ void gtk_list_store_append (GtkListStore *list_store, GtkTreeIter *iter) { - GtkListStorePrivate *priv; - g_return_if_fail (GTK_IS_LIST_STORE (list_store)); g_return_if_fail (iter != NULL); - priv = list_store->priv; - - gtk_list_store_insert (list_store, iter, g_sequence_get_length (priv->seq)); + gtk_list_store_insert (list_store, iter, -1); } static void @@ -1692,11 +1686,12 @@ gtk_list_store_reorder_func (GSequenceIter *a, } /** - * gtk_list_store_reorder: (skip) + * gtk_list_store_reorder: * @store: A #GtkListStore. - * @new_order: (array): an array of integers mapping the new position of each child - * to its old position before the re-ordering, - * i.e. @new_order[newpos] = oldpos. + * @new_order: (array zero-terminated=1): an array of integers mapping the new + * position of each child to its old position before the re-ordering, + * i.e. @new_order[newpos] = oldpos. It must have + * exactly as many items as the list store's length. * * Reorders @store to follow the order indicated by @new_order. Note that * this function only works with unsorted stores. @@ -2171,12 +2166,13 @@ gtk_list_store_has_default_sort_func (GtkTreeSortable *sortable) * gtk_list_store_insert_with_values: * @list_store: A #GtkListStore * @iter: (out) (allow-none): An unset #GtkTreeIter to set to the new row, or %NULL - * @position: position to insert the new row + * @position: position to insert the new row, or -1 to append after existing + * rows * @...: pairs of column number and value, terminated with -1 * * Creates a new row at @position. @iter will be changed to point to this new - * row. If @position is larger than the number of rows on the list, then the - * new row will be appended to the list. The row will be filled with the + * row. If @position is -1, or larger than the number of rows in the list, then + * the new row will be appended to the list. The row will be filled with the * values given to this function. * * Calling @@ -2224,7 +2220,7 @@ gtk_list_store_insert_with_values (GtkListStore *list_store, seq = priv->seq; length = g_sequence_get_length (seq); - if (position > length) + if (position > length || position < 0) position = length; ptr = g_sequence_get_iter_at_pos (seq, position); @@ -2260,7 +2256,7 @@ gtk_list_store_insert_with_values (GtkListStore *list_store, * gtk_list_store_insert_with_valuesv: * @list_store: A #GtkListStore * @iter: (out) (allow-none): An unset #GtkTreeIter to set to the new row, or %NULL. - * @position: position to insert the new row + * @position: position to insert the new row, or -1 for last * @columns: (array length=n_values): an array of column numbers * @values: (array length=n_values): an array of GValues * @n_values: the length of the @columns and @values arrays @@ -2304,7 +2300,7 @@ gtk_list_store_insert_with_valuesv (GtkListStore *list_store, seq = priv->seq; length = g_sequence_get_length (seq); - if (position > length) + if (position > length || position < 0) position = length; ptr = g_sequence_get_iter_at_pos (seq, position); @@ -2441,10 +2437,12 @@ list_store_start_element (GMarkupParseContext *context, else if (strcmp (element_name, "row") == 0) ; else if (strcmp (element_name, "column") == 0) - for (i = 0; names[i]; i++) - if (strcmp (names[i], "type") == 0) - data->column_type_names = g_slist_prepend (data->column_type_names, - g_strdup (values[i])); + { + for (i = 0; names[i]; i++) + if (strcmp (names[i], "type") == 0) + data->column_type_names = g_slist_prepend (data->column_type_names, + g_strdup (values[i])); + } else if (strcmp (element_name, "columns") == 0) ; else if (strcmp (element_name, "data") == 0)