[gtk+] box: follow children visibility when building the sibling path
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] box: follow children visibility when building the sibling path
- Date: Fri, 1 Jul 2011 15:50:17 +0000 (UTC)
commit ef153a5fffb3986f53992bcb45936b3a19f242d7
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Thu Jun 30 16:19:57 2011 -0400
box: follow children visibility when building the sibling path
This fixes nth-child not working for widgets which were not
visible before being added to the box, but it's also a better fix
for https://bugzilla.gnome.org/show_bug.cgi?id=652769
gtk/gtkbox.c | 26 +++++++++++++++++++-------
1 files changed, 19 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
index f97a80d..ecf7bb1 100644
--- a/gtk/gtkbox.c
+++ b/gtk/gtkbox.c
@@ -847,11 +847,8 @@ count_widget_position (GtkWidget *widget,
{
CountingData *count = data;
-#if 0
- /* We cannot reliably detect changes in widget visibility */
if (!gtk_widget_get_visible (widget))
return;
-#endif
if (count->widget == widget)
count->found = TRUE;
@@ -904,11 +901,9 @@ gtk_box_get_path_for_child (GtkContainer *container,
for (list = children; list; list = list->next)
{
-#if 0
- /* We cannot reliably detect changes in widget visibility */
if (!gtk_widget_get_visible (list->data))
- return;
-#endif
+ continue;
+
gtk_widget_path_append_for_widget (private->sibling_path, list->data);
}
g_list_free (children);
@@ -950,6 +945,16 @@ gtk_box_direction_changed (GtkWidget *widget,
}
static void
+box_child_visibility_notify_cb (GObject *obj,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GtkBox *box = user_data;
+
+ gtk_box_invalidate_order (box);
+}
+
+static void
gtk_box_pack (GtkBox *box,
GtkWidget *child,
gboolean expand,
@@ -978,6 +983,9 @@ gtk_box_pack (GtkBox *box,
gtk_box_invalidate_order (box);
gtk_widget_set_parent (child, GTK_WIDGET (box));
+ g_signal_connect (child, "notify::visible",
+ G_CALLBACK (box_child_visibility_notify_cb), box);
+
gtk_widget_child_notify (child, "expand");
gtk_widget_child_notify (child, "fill");
gtk_widget_child_notify (child, "padding");
@@ -1795,6 +1803,10 @@ gtk_box_remove (GtkContainer *container,
was_visible = gtk_widget_get_visible (widget);
gtk_widget_unparent (widget);
+ g_signal_handlers_disconnect_by_func (widget,
+ box_child_visibility_notify_cb,
+ box);
+
priv->children = g_list_remove_link (priv->children, children);
g_list_free (children);
g_free (child);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]