[gtk+] Add gtk_list_box_prepend



commit 0b200aaa324075dff3aff2e0a764936b5ed204d9
Author: Paolo Borelli <pborelli gnome org>
Date:   Tue Aug 6 14:57:22 2013 +0200

    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

 docs/reference/gtk/gtk3-sections.txt |    1 +
 gtk/gtklistbox.c                     |   34 ++++++++++++++++++++++++++++++----
 gtk/gtklistbox.h                     |    3 +++
 3 files changed, 34 insertions(+), 4 deletions(-)
---
diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt
index 886f4d9..491e1e9 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 21fb7c5..8777ffc 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);
@@ -1712,6 +1713,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)
 {
@@ -2047,6 +2055,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 161bdb1..d537d7d 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,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]