[gtk+/wip/listbox] GtkListBox: Track the number of visible children
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/listbox] GtkListBox: Track the number of visible children
- Date: Tue, 11 Jun 2013 15:02:58 +0000 (UTC)
commit 50d3d3068fe5657d655bc095c3752a4a4bb68a29
Author: Alexander Larsson <alexl redhat com>
Date: Tue Jun 11 16:20:45 2013 +0200
GtkListBox: Track the number of visible children
gtk/gtklistbox.c | 29 +++++++++++++++++++++++++----
1 files changed, 25 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index a59c7a5..30097f0 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -80,6 +80,8 @@ struct _GtkListBoxPrivate
/* DnD */
GtkListBoxRow *drag_highlighted_row;
+
+ int n_visible_rows;
};
struct _GtkListBoxRowPrivate
@@ -1316,9 +1318,21 @@ gtk_list_box_real_realize (GtkWidget* widget)
/* Children are visible if they are shown by the app (visible)
and not filtered out (child_visible) by the listbox */
static void
-update_row_is_visible (GtkListBoxRow *row)
+update_row_is_visible (GtkListBox *list_box, GtkListBoxRow *row)
{
- row->priv->visible = gtk_widget_get_visible (GTK_WIDGET (row)) && gtk_widget_get_child_visible (GTK_WIDGET
(row));
+ GtkListBoxPrivate *priv = list_box->priv;
+ gboolean was_visible;
+
+ was_visible = row->priv->visible;
+
+ row->priv->visible =
+ gtk_widget_get_visible (GTK_WIDGET (row)) &&
+ gtk_widget_get_child_visible (GTK_WIDGET (row));
+
+ if (was_visible && !row->priv->visible)
+ priv->n_visible_rows--;
+ if (!was_visible && row->priv->visible)
+ priv->n_visible_rows++;
}
static gboolean
@@ -1339,7 +1353,7 @@ gtk_list_box_apply_filter (GtkListBox *list_box, GtkListBoxRow *row)
gtk_widget_set_child_visible (GTK_WIDGET (row), do_show);
- update_row_is_visible (row);
+ update_row_is_visible (list_box, row);
}
static void
@@ -1510,7 +1524,7 @@ gtk_list_box_update_header (GtkListBox *list_box, GSequenceIter* iter)
static void
gtk_list_box_row_visibility_changed (GtkListBox *list_box, GtkListBoxRow *row)
{
- update_row_is_visible (row);
+ update_row_is_visible (list_box, row);
if (gtk_widget_get_visible (GTK_WIDGET (list_box)))
{
@@ -1543,9 +1557,13 @@ gtk_list_box_real_add (GtkContainer* container, GtkWidget *child)
else
iter = g_sequence_append (priv->children, row);
+
row->priv->iter = iter;
gtk_widget_set_parent (GTK_WIDGET (row), GTK_WIDGET (list_box));
+ gtk_widget_set_child_visible (GTK_WIDGET (row), TRUE);
row->priv->visible = gtk_widget_get_visible (GTK_WIDGET (row));
+ if (row->priv->visible)
+ priv->n_visible_rows++;
gtk_list_box_apply_filter (list_box, row);
if (gtk_widget_get_visible (GTK_WIDGET (list_box)))
{
@@ -1592,6 +1610,9 @@ gtk_list_box_real_remove (GtkContainer* container, GtkWidget* child)
return;
}
+ if (row->priv->visible)
+ priv->n_visible_rows--;
+
if (row->priv->header != NULL)
{
g_hash_table_remove (priv->header_hash, row->priv->header);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]