snapshot: merge container nodes
authorTimm Bäder <mail@baedert.org>
Tue, 1 May 2018 19:18:51 +0000 (21:18 +0200)
committerTimm Bäder <mail@baedert.org>
Wed, 2 May 2018 17:48:34 +0000 (19:48 +0200)
A container node inside another container node doesn't make a lot of
sense, we can instead just use the parent container node and add the
child container node's children to it directly.

gtk/gtksnapshot.c

index 10ea6556e5a78d45663b683f96f42cfa95966052..4d367948e953cdda3e7d8df5940438aa11623e39 100644 (file)
@@ -1076,8 +1076,22 @@ gtk_snapshot_append_node_internal (GtkSnapshot   *snapshot,
 
   if (current_state)
     {
-      g_ptr_array_add (snapshot->nodes, gsk_render_node_ref (node));
-      current_state->n_nodes ++;
+      if (gsk_render_node_get_node_type (node) == GSK_CONTAINER_NODE)
+        {
+          guint i, p;
+
+          for (i = 0, p = gsk_container_node_get_n_children (node); i < p; i ++)
+            g_ptr_array_add (snapshot->nodes,
+                             gsk_render_node_ref (gsk_container_node_get_child (node, i)));
+
+          current_state->n_nodes += p;
+          /* Don't unref @node... */
+        }
+      else
+        {
+          g_ptr_array_add (snapshot->nodes, gsk_render_node_ref (node));
+          current_state->n_nodes ++;
+        }
     }
   else
     {