diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2020-04-08 18:34:04 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2020-08-24 17:44:07 +0100 |
commit | e4db3ea6ea0f8e6318f0d266e2015976b97f7716 (patch) | |
tree | 3f957b3ca8ce2f9364c7483180f6af952123fee6 /json-glib/json-gobject.c | |
parent | a8fb2afa32896e72019e40c1487b3defb27591d8 (diff) | |
download | json-glib-e4db3ea6ea0f8e6318f0d266e2015976b97f7716.tar.gz |
Use non-deprecated GObject constructor and types
Both g_object_newv() and GParameter have been deprecated for a long
time.
Diffstat (limited to 'json-glib/json-gobject.c')
-rw-r--r-- | json-glib/json-gobject.c | 51 |
1 files changed, 23 insertions, 28 deletions
diff --git a/json-glib/json-gobject.c b/json-glib/json-gobject.c index 076517b..b42dc83 100644 --- a/json-glib/json-gobject.c +++ b/json-glib/json-gobject.c @@ -189,8 +189,8 @@ json_gobject_new (GType gtype, guint n_members; GObjectClass *klass; GObject *retval; - GArray *construct_params; - gint i; + GArray *construct_values; + GPtrArray *construct_names; klass = g_type_class_ref (gtype); @@ -203,15 +203,20 @@ json_gobject_new (GType gtype, * * FIXME - find a way to allow deserialization for these properties */ - construct_params = g_array_sized_new (FALSE, FALSE, sizeof (GParameter), n_members); + construct_names = g_ptr_array_sized_new (n_members); + g_ptr_array_set_free_func (construct_names, g_free); + + construct_values = g_array_sized_new (FALSE, FALSE, sizeof (GValue), n_members); + g_array_set_clear_func (construct_values, (GDestroyNotify) g_value_unset); + for (l = members->head; l != NULL; l = l->next) { - const gchar *member_name = l->data; + const char *member_name = l->data; + GValue value = G_VALUE_INIT; + gboolean res = FALSE; GParamSpec *pspec; - GParameter param = { NULL, }; JsonNode *val; - gboolean res = FALSE; pspec = g_object_class_find_property (klass, member_name); if (!pspec) @@ -224,22 +229,21 @@ json_gobject_new (GType gtype, if (!(pspec->flags & G_PARAM_WRITABLE)) goto next_member; - g_value_init (¶m.value, G_PARAM_SPEC_VALUE_TYPE (pspec)); + g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec)); val = json_object_get_member (object, member_name); - res = json_deserialize_pspec (¶m.value, pspec, val); + res = json_deserialize_pspec (&value, pspec, val); if (!res) { g_warning ("Failed to deserialize \"%s\" property of type \"%s\" for an object of type \"%s\"", - pspec->name, G_VALUE_TYPE_NAME (¶m.value), g_type_name (gtype)); + pspec->name, G_VALUE_TYPE_NAME (&value), g_type_name (gtype)); - g_value_unset (¶m.value); + g_value_unset (&value); } else { - param.name = g_strdup (pspec->name); - - g_array_append_val (construct_params, param); + g_ptr_array_add (construct_names, g_strdup (pspec->name)); + g_array_append_val (construct_values, value); continue; } @@ -248,22 +252,13 @@ json_gobject_new (GType gtype, g_queue_push_tail (&members_left, l->data); } - G_GNUC_BEGIN_IGNORE_DEPRECATIONS - retval = g_object_newv (gtype, - construct_params->len, - (GParameter *) construct_params->data); - G_GNUC_END_IGNORE_DEPRECATIONS - - /* free the contents of the GArray */ - for (i = 0; i < construct_params->len; i++) - { - GParameter *param = &g_array_index (construct_params, GParameter, i); - - g_free ((gchar *) param->name); - g_value_unset (¶m->value); - } + retval = g_object_new_with_properties (gtype, + construct_names->len, + (const char **) construct_names->pdata, + (GValue *) construct_values->data); - g_array_free (construct_params, TRUE); + g_ptr_array_unref (construct_names); + g_array_unref (construct_values); /* do the Serializable type check once */ if (g_type_is_a (gtype, JSON_TYPE_SERIALIZABLE)) |