diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c index 79c4403545..f9545a578e 100644 --- a/gtk/gtklistbox.c +++ b/gtk/gtklistbox.c @@ -1671,72 +1671,6 @@ gtk_list_box_row_visibility_changed (GtkListBox *list_box, } } -/** - * gtk_list_box_insert: - * @list_box: a #GtkListBox. - * @child: the #GtkWidget to add - * @position: the position to insert @child in - * - * Insert the @child into the @list_box at @position. 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(). - * - * If @position is -1, or larger than the total number of items in the - * @list_box, then the @child will be appended to the end. - * - * Since: 3.10 - */ -void -gtk_list_box_insert (GtkListBox *list_box, - GtkWidget *child, - gint position) -{ - GtkListBoxPrivate *priv = gtk_list_box_get_instance_private (list_box); - GtkListBoxRow *row; - GSequenceIter* iter = NULL; - - g_return_if_fail (list_box != NULL); - g_return_if_fail (child != NULL); - - if (GTK_IS_LIST_BOX_ROW (child)) - row = GTK_LIST_BOX_ROW (child); - else - { - row = GTK_LIST_BOX_ROW (gtk_list_box_row_new ()); - gtk_widget_show (GTK_WIDGET (row)); - gtk_container_add (GTK_CONTAINER (row), child); - } - - if (priv->sort_func != NULL) - iter = g_sequence_insert_sorted (priv->children, row, - (GCompareDataFunc)do_sort, list_box); - else if (position == 0) - iter = g_sequence_prepend (priv->children, row); - else if (position == -1) - iter = g_sequence_append (priv->children, row); - else - { - GSequenceIter *current_iter; - - current_iter = g_sequence_get_iter_at_pos (priv->children, position); - iter = g_sequence_insert_before (current_iter, 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); - ROW_PRIV (row)->visible = gtk_widget_get_visible (GTK_WIDGET (row)); - if (ROW_PRIV (row)->visible) - list_box_add_visible_rows (list_box, 1); - gtk_list_box_apply_filter (list_box, row); - if (gtk_widget_get_visible (GTK_WIDGET (list_box))) - { - gtk_list_box_update_header (list_box, ROW_PRIV (row)->iter); - gtk_list_box_update_header (list_box, - gtk_list_box_get_next_visible (list_box, ROW_PRIV (row)->iter)); - } -} - static void gtk_list_box_real_add (GtkContainer *container, GtkWidget *child) @@ -2097,6 +2031,72 @@ gtk_list_box_prepend (GtkListBox *list_box, gtk_list_box_insert (list_box, child, 0); } +/** + * gtk_list_box_insert: + * @list_box: a #GtkListBox. + * @child: the #GtkWidget to add + * @position: the position to insert @child in + * + * Insert the @child into the @list_box at @position. 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(). + * + * If @position is -1, or larger than the total number of items in the + * @list_box, then the @child will be appended to the end. + * + * Since: 3.10 + */ +void +gtk_list_box_insert (GtkListBox *list_box, + GtkWidget *child, + gint position) +{ + GtkListBoxPrivate *priv = gtk_list_box_get_instance_private (list_box); + GtkListBoxRow *row; + GSequenceIter *iter = NULL; + + g_return_if_fail (list_box != NULL); + g_return_if_fail (child != NULL); + + if (GTK_IS_LIST_BOX_ROW (child)) + row = GTK_LIST_BOX_ROW (child); + else + { + row = GTK_LIST_BOX_ROW (gtk_list_box_row_new ()); + gtk_widget_show (GTK_WIDGET (row)); + gtk_container_add (GTK_CONTAINER (row), child); + } + + if (priv->sort_func != NULL) + iter = g_sequence_insert_sorted (priv->children, row, + (GCompareDataFunc)do_sort, list_box); + else if (position == 0) + iter = g_sequence_prepend (priv->children, row); + else if (position == -1) + iter = g_sequence_append (priv->children, row); + else + { + GSequenceIter *current_iter; + + current_iter = g_sequence_get_iter_at_pos (priv->children, position); + iter = g_sequence_insert_before (current_iter, 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); + ROW_PRIV (row)->visible = gtk_widget_get_visible (GTK_WIDGET (row)); + if (ROW_PRIV (row)->visible) + list_box_add_visible_rows (list_box, 1); + gtk_list_box_apply_filter (list_box, row); + if (gtk_widget_get_visible (GTK_WIDGET (list_box))) + { + gtk_list_box_update_header (list_box, ROW_PRIV (row)->iter); + gtk_list_box_update_header (list_box, + gtk_list_box_get_next_visible (list_box, ROW_PRIV (row)->iter)); + } +} + /** * gtk_list_box_drag_unhighlight_row: * @list_box: An #GtkListBox.