diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt index 886f4d9e21..491e1e93a3 100644 --- a/docs/reference/gtk/gtk3-sections.txt +++ b/docs/reference/gtk/gtk3-sections.txt @@ -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 diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c index 21fb7c5ec3..8777ffc4f7 100644 --- a/gtk/gtklistbox.c +++ b/gtk/gtklistbox.c @@ -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. diff --git a/gtk/gtklistbox.h b/gtk/gtklistbox.h index 161bdb1e8e..d537d7db78 100644 --- a/gtk/gtklistbox.h +++ b/gtk/gtklistbox.h @@ -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,