summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Borelli <pborelli@gnome.org>2013-08-06 14:57:22 +0200
committerPaolo Borelli <pborelli@gnome.org>2013-08-07 10:52:11 +0200
commit0b200aaa324075dff3aff2e0a764936b5ed204d9 (patch)
treeacf8304d086b7023785d5d52ba986d51e9de4b4f
parentcdd17183e69a4ddd6e02ca55f2fa0f37efb0c4fa (diff)
downloadgtk+-0b200aaa324075dff3aff2e0a764936b5ed204d9.tar.gz
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
-rw-r--r--docs/reference/gtk/gtk3-sections.txt1
-rw-r--r--gtk/gtklistbox.c34
-rw-r--r--gtk/gtklistbox.h3
3 files changed, 34 insertions, 4 deletions
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);
@@ -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 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,