diff options
-rw-r--r-- | gtk/gtkcontainer.c | 37 | ||||
-rw-r--r-- | gtk/gtkcontainerprivate.h | 5 |
2 files changed, 41 insertions, 1 deletions
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c index 7e549c4496..26fc804456 100644 --- a/gtk/gtkcontainer.c +++ b/gtk/gtkcontainer.c @@ -24,7 +24,6 @@ #include "config.h" -#include "gtkcontainer.h" #include "gtkcontainerprivate.h" #include <stdarg.h> @@ -54,6 +53,7 @@ #include "gtkpopovermenu.h" #include "gtkshortcutswindow.h" + /* A handful of containers inside GTK+ are cheating and widgets * inside internal structure as direct children for the purpose * of forall(). @@ -3397,3 +3397,38 @@ gtk_container_get_path_for_child (GtkContainer *container, return path; } + +typedef struct { + GtkContainer *container; + GskRenderer *renderer; + GskRenderNode *parent; +} RenderData; + +static void +propagate_render_node (GtkWidget *widget, + gpointer data_) +{ + RenderData *data = data_; + GskRenderNode *node; + + node = gtk_widget_get_render_node (widget, data->renderer); + if (node != NULL) + { + gsk_render_node_append_child (data->parent, node); + gsk_render_node_unref (node); + } +} + +void +gtk_container_propagate_render_node (GtkContainer *container, + GskRenderer *renderer, + GskRenderNode *parent_node) +{ + RenderData data = { + container, + renderer, + parent_node + }; + + gtk_container_forall (container, propagate_render_node, &data); +} diff --git a/gtk/gtkcontainerprivate.h b/gtk/gtkcontainerprivate.h index e581df958b..203059106e 100644 --- a/gtk/gtkcontainerprivate.h +++ b/gtk/gtkcontainerprivate.h @@ -21,6 +21,7 @@ #define __GTK_CONTAINER_PRIVATE_H__ #include "gtkcontainer.h" +#include <gsk/gsk.h> G_BEGIN_DECLS @@ -42,6 +43,10 @@ void _gtk_container_maybe_start_idle_sizer (GtkContainer *container); void gtk_container_get_children_clip (GtkContainer *container, GtkAllocation *out_clip); +void gtk_container_propagate_render_node (GtkContainer *container, + GskRenderer *renderer, + GskRenderNode *parent_node); + G_END_DECLS #endif /* __GTK_CONTAINER_PRIVATE_H__ */ |