From 3d23ecc456c9d92ffa1f70c6d0c314c7b82a0e5d Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 8 Nov 2018 15:22:40 -0200 Subject: [PATCH] clutter: Drop g_object_newv from ClutterScriptParser Build an additional set of (GStrv, GValue[]) and pass it to the non-deprecated g_object_new_with_properties(). --- clutter/clutter/clutter-script-parser.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/clutter/clutter/clutter-script-parser.c b/clutter/clutter/clutter-script-parser.c index db8b50ad8..55e70dac9 100644 --- a/clutter/clutter/clutter-script-parser.c +++ b/clutter/clutter/clutter-script-parser.c @@ -2208,8 +2208,9 @@ _clutter_script_construct_object (ClutterScript *script, } else { + g_autoptr (GPtrArray) param_names = NULL; + GArray *param_values; GList *properties = oinfo->properties; - GParameter *parameters; /* every other object: first, we get the construction parameters */ oinfo->properties = @@ -2219,10 +2220,22 @@ _clutter_script_construct_object (ClutterScript *script, properties, ¶ms); - parameters = (GParameter *) (void *) params->data; - oinfo->object = g_object_newv (oinfo->gtype, - params->len, - parameters); + /* Convert GParameter → (GStrv, GValue[]) */ + param_names = g_ptr_array_sized_new (params->len); + param_values = g_array_sized_new (TRUE, FALSE, sizeof (GValue), params->len); + for (i = 0; i < params->len; i++) + { + GParameter *param = &g_array_index (params, GParameter, i); + + g_ptr_array_add (param_names, (gchar *) param->name); + g_array_append_val (param_values, param->value); + } + g_ptr_array_add (param_names, NULL); + + oinfo->object = g_object_new_with_properties (oinfo->gtype, + params->len, + (const gchar **) param_names->pdata, + (const GValue *) param_values->data); /* by sinking the floating reference, we make sure that the reference * count is correct whether the object is referenced from somewhere @@ -2238,6 +2251,7 @@ _clutter_script_construct_object (ClutterScript *script, g_value_unset (¶m->value); } + g_array_free (param_values, FALSE); g_array_free (params, TRUE); }