From 378c046fcdac80df175d4372e5396ac18305eddf Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 3 Dec 2019 07:37:24 +0100 Subject: [PATCH] builder: Autofill scope property of listitemfactory I couldn't come up with a better way to automatically inherit the scope in the builder list item factory that didn't involve a magic incantation in the XML file. And I do not want developers to know magic incantations to do a thing that should pretty much always be done. --- gtk/gtkbuilder.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c index efc47863d4..ed358a36df 100644 --- a/gtk/gtkbuilder.c +++ b/gtk/gtkbuilder.c @@ -216,6 +216,7 @@ #include "gtkbuilderprivate.h" #include "gtkbuildable.h" +#include "gtkbuilderlistitemfactory.h" #include "gtkbuilderscopeprivate.h" #include "gtkdebug.h" #include "gtkexpression.h" @@ -698,6 +699,22 @@ gtk_builder_take_bindings (GtkBuilder *builder, priv->bindings = g_slist_concat (priv->bindings, bindings); } +static void +ensure_special_construct_parameters (GtkBuilder *builder, + GType object_type, + ObjectProperties *construct_parameters) +{ + GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder); + GValue value = G_VALUE_INIT; + + if (g_type_is_a (object_type, GTK_TYPE_BUILDER_LIST_ITEM_FACTORY)) + { + g_value_init (&value, GTK_TYPE_BUILDER_SCOPE); + g_value_set_object (&value, priv->scope); + object_properties_add (construct_parameters, "scope", &value); + } +} + GObject * _gtk_builder_construct (GtkBuilder *builder, ObjectInfo *info, @@ -795,6 +812,8 @@ _gtk_builder_construct (GtkBuilder *builder, } else { + ensure_special_construct_parameters (builder, info->type, construct_parameters); + obj = g_object_new_with_properties (info->type, construct_parameters->len, (const char **) construct_parameters->names->pdata,