[gtk+] box: Remove cache for sibling paths
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] box: Remove cache for sibling paths
- Date: Fri, 1 Jul 2011 23:58:05 +0000 (UTC)
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]