summaryrefslogtreecommitdiff
path: root/gtk/gtkbuilderparser.c
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2021-01-06 19:07:44 +0100
committerTimm Bäder <mail@baedert.org>2021-01-17 04:39:26 +0100
commitaec2fb939f470a85f0cd66c2c57db88408417a02 (patch)
tree4b02d5b16a6c9248e5f39e77a5019cf76d7f754a /gtk/gtkbuilderparser.c
parent69293db804d01fe0e7c360b6c82bdad35a5acbf4 (diff)
downloadgtk+-aec2fb939f470a85f0cd66c2c57db88408417a02.tar.gz
builderparser: Keep properties in a GPtrArray
Diffstat (limited to 'gtk/gtkbuilderparser.c')
-rw-r--r--gtk/gtkbuilderparser.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index b22cb1dfe5..4009307af7 100644
--- a/gtk/gtkbuilderparser.c
+++ b/gtk/gtkbuilderparser.c
@@ -471,8 +471,6 @@ builder_construct (ParserData *data,
if (object_info->object && object_info->applied_properties)
return object_info->object;
- object_info->properties = g_slist_reverse (object_info->properties);
-
if (object_info->object == NULL)
{
object = _gtk_builder_construct (data->builder, object_info, error);
@@ -800,18 +798,19 @@ free_object_info (ObjectInfo *info)
/* Do not free the signal items, which GtkBuilder takes ownership of */
g_type_class_unref (info->oclass);
g_slist_free (info->signals);
- g_slist_free_full (info->properties, (GDestroyNotify)free_property_info);
+ if (info->properties)
+ g_ptr_array_free (info->properties, TRUE);
g_free (info->constructor);
g_free (info->id);
g_slice_free (ObjectInfo, info);
}
static void
-parse_child (ParserData *data,
- const char *element_name,
+parse_child (ParserData *data,
+ const char *element_name,
const char **names,
const char **values,
- GError **error)
+ GError **error)
{
ObjectInfo* object_info;
@@ -1707,7 +1706,6 @@ parse_custom (GtkBuildableParseContext *context,
ObjectInfo* object_info = (ObjectInfo*)parent_info;
if (!object_info->object)
{
- object_info->properties = g_slist_reverse (object_info->properties);
object_info->object = _gtk_builder_construct (data->builder,
object_info,
error);
@@ -1885,7 +1883,10 @@ end_element (GtkBuildableParseContext *context,
g_string_assign (prop_info->text, translated);
}
- object_info->properties = g_slist_prepend (object_info->properties, prop_info);
+ if (G_UNLIKELY (!object_info->properties))
+ object_info->properties = g_ptr_array_new_with_free_func ((GDestroyNotify)free_property_info);
+
+ g_ptr_array_add (object_info->properties, prop_info);
}
else
g_assert_not_reached ();