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().
This commit is contained in:
Georges Basile Stavracas Neto 2018-11-08 15:22:40 -02:00
parent cbf6e74915
commit 3d23ecc456
No known key found for this signature in database
GPG Key ID: 886C17EE170D1385

View File

@ -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,
&params);
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 (&param->value);
}
g_array_free (param_values, FALSE);
g_array_free (params, TRUE);
}