[gtk+] box: Remove cache for sibling paths



commit 246a7ecbc97ed65362f08693bd994a59a12d2a7b
Author: Benjamin Otte <otte redhat com>
Date:   Sat Jul 2 01:25:45 2011 +0200

    box: Remove cache for sibling paths
    
    We can't cache this path as widgets might dynamically add or remove
    style classes without telling us. At which point the stored path does
    not work.

 gtk/gtkbox.c |   42 +++++++++++++++++-------------------------
 1 files changed, 17 insertions(+), 25 deletions(-)
---
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
index ecf7bb1..c36b4df 100644
--- a/gtk/gtkbox.c
+++ b/gtk/gtkbox.c
@@ -109,7 +109,6 @@ struct _GtkBoxPrivate
 
   GtkOrientation  orientation;
   gint16          spacing;
-  GtkWidgetPath  *sibling_path;
 
   guint           default_expand : 1;
   guint           homogeneous    : 1;
@@ -881,17 +880,19 @@ static GtkWidgetPath *
 gtk_box_get_path_for_child (GtkContainer *container,
                             GtkWidget    *child)
 {
-  GtkWidgetPath *path;
+  GtkWidgetPath *path, *sibling_path;
   GtkBox *box;
   GtkBoxPrivate *private;
+  GList *list, *children;
 
   box = GTK_BOX (container);
   private = box->priv;
 
-  if (private->sibling_path == NULL)
+  path = gtk_widget_path_copy (gtk_widget_get_path (GTK_WIDGET (container)));
+
+  if (gtk_widget_get_visible (child))
     {
-      GList *list, *children;
-      private->sibling_path = gtk_widget_path_new ();
+      sibling_path = gtk_widget_path_new ();
 
       /* get_children works in visible order */
       children = gtk_container_get_children (container);
@@ -904,17 +905,16 @@ gtk_box_get_path_for_child (GtkContainer *container,
           if (!gtk_widget_get_visible (list->data))
             continue;
 
-          gtk_widget_path_append_for_widget (private->sibling_path, list->data);
+          gtk_widget_path_append_for_widget (sibling_path, list->data);
         }
-      g_list_free (children);
-    }
+        g_list_free (children);
 
-  path = gtk_widget_path_copy (gtk_widget_get_path (GTK_WIDGET (container)));
-  if (gtk_widget_get_visible (child))
-    gtk_widget_path_append_with_siblings (path,
-                                          private->sibling_path,
-                                          gtk_box_get_visible_position (box,
-                                                                        child));
+        gtk_widget_path_append_with_siblings (path,
+                                              sibling_path,
+                                              gtk_box_get_visible_position (box,
+                                                                            child));
+        gtk_widget_path_unref (sibling_path);
+    }
   else
     gtk_widget_path_append_for_widget (path, child);
 
@@ -924,17 +924,9 @@ gtk_box_get_path_for_child (GtkContainer *container,
 static void
 gtk_box_invalidate_order (GtkBox *box)
 {
-  GtkBoxPrivate *private = box->priv;
-
-  if (private->sibling_path != NULL)
-    {
-      gtk_widget_path_unref (private->sibling_path);
-      private->sibling_path = NULL;
-
-      gtk_container_foreach (GTK_CONTAINER (box),
-                             (GtkCallback) gtk_widget_reset_style,
-                             NULL);
-    }
+  gtk_container_foreach (GTK_CONTAINER (box),
+                         (GtkCallback) gtk_widget_reset_style,
+                         NULL);
 }
 
 static void



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