container: ensure we only append a single node

The snapshot vfuncs must only append at most a single node,
otherwise things are going to break if the widget is the root node.

Unfortunately there is no code that can check this in a generic fashion,
so we'll have to debug this on a case-by-case basis.
This commit is contained in:
Benjamin Otte 2016-11-15 22:39:26 +01:00
parent 2e9ff11c85
commit f728f33382

View File

@ -3095,10 +3095,21 @@ gtk_container_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot)
{
GtkContainer *container = GTK_CONTAINER (widget);
GtkAllocation allocation, clip;
graphene_rect_t bounds;
gtk_widget_get_clip (widget, &clip);
gtk_widget_get_allocation (widget, &allocation);
graphene_rect_init (&bounds,
clip.x - allocation.x, clip.y - allocation.y,
clip.width, clip.height);
gtk_snapshot_push (snapshot, &bounds, "Children<%s>", G_OBJECT_TYPE_NAME (container));
gtk_container_forall (container,
gtk_container_snapshot_forall,
snapshot);
gtk_snapshot_pop (snapshot);
}
static void