mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-07 01:00:28 +00:00
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.
This commit is contained in:
parent
668790ddee
commit
246a7ecbc9
42
gtk/gtkbox.c
42
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
|
||||
|
Loading…
Reference in New Issue
Block a user