Add gtk_list_box_prepend

Add a convenience method for prepending rows to a list box without
having to fiddle with a sort function.

https://bugzilla.gnome.org/show_bug.cgi?id=705558
This commit is contained in:
Paolo Borelli 2013-08-06 14:57:22 +02:00
parent cdd17183e6
commit 0b200aaa32
3 changed files with 34 additions and 4 deletions

View File

@ -510,6 +510,7 @@ GtkListBoxSortFunc
GtkListBoxUpdateHeaderFunc
gtk_list_box_new
gtk_list_box_prepend
gtk_list_box_select_row
gtk_list_box_get_selected_row

View File

@ -1672,10 +1672,10 @@ gtk_list_box_row_visibility_changed (GtkListBox *list_box,
}
static void
gtk_list_box_real_add (GtkContainer *container,
GtkWidget *child)
gtk_list_box_add_row (GtkListBox *list_box,
GtkWidget *child,
gboolean prepend)
{
GtkListBox *list_box = GTK_LIST_BOX (container);
GtkListBoxPrivate *priv = gtk_list_box_get_instance_private (list_box);
GtkListBoxRow *row;
GSequenceIter* iter = NULL;
@ -1692,10 +1692,11 @@ gtk_list_box_real_add (GtkContainer *container,
if (priv->sort_func != NULL)
iter = g_sequence_insert_sorted (priv->children, row,
(GCompareDataFunc)do_sort, list_box);
else if (prepend)
iter = g_sequence_prepend (priv->children, row);
else
iter = g_sequence_append (priv->children, row);
ROW_PRIV (row)->iter = iter;
gtk_widget_set_parent (GTK_WIDGET (row), GTK_WIDGET (list_box));
gtk_widget_set_child_visible (GTK_WIDGET (row), TRUE);
@ -1711,6 +1712,13 @@ gtk_list_box_real_add (GtkContainer *container,
}
}
static void
gtk_list_box_real_add (GtkContainer *container,
GtkWidget *child)
{
gtk_list_box_add_row (GTK_LIST_BOX (container), child, FALSE);
}
static void
gtk_list_box_real_remove (GtkContainer *container,
GtkWidget *child)
@ -2046,6 +2054,24 @@ gtk_list_box_real_size_allocate (GtkWidget *widget,
}
}
/**
* gtk_list_box_prepend:
* @list_box: a #GtkListBox.
* @child: the #GtkWidget to add
*
* Prepend a widget to the list. If a sort function is set, the widget will
* actually be inserted at the calculated position and this function has the
* same effect of gtk_container_add().
*
* Since: 3.10
*/
void
gtk_list_box_prepend (GtkListBox *list_box,
GtkWidget *child)
{
gtk_list_box_add_row (list_box, child, TRUE);
}
/**
* gtk_list_box_drag_unhighlight_row:
* @list_box: An #GtkListBox.

View File

@ -161,6 +161,9 @@ void gtk_list_box_row_changed (GtkListBoxRow *row);
GDK_AVAILABLE_IN_3_10
GType gtk_list_box_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_3_10
void gtk_list_box_prepend (GtkListBox *list_box,
GtkWidget *child);
GDK_AVAILABLE_IN_3_10
GtkListBoxRow* gtk_list_box_get_selected_row (GtkListBox *list_box);
GDK_AVAILABLE_IN_3_10
GtkListBoxRow* gtk_list_box_get_row_at_index (GtkListBox *list_box,