diff --git a/src/lib/eldbus/eldbus_model_arguments.c b/src/lib/eldbus/eldbus_model_arguments.c index cc82a20cb8..28bce61194 100644 --- a/src/lib/eldbus/eldbus_model_arguments.c +++ b/src/lib/eldbus/eldbus_model_arguments.c @@ -51,7 +51,19 @@ _eldbus_model_arguments_arguments_set(Eo *obj EINA_UNUSED, { DBG("(%p)", obj); - pd->arguments = arguments; + Eldbus_Introspection_Argument* data; + EINA_LIST_FREE(pd->arguments, data) + { + free(data); + } + pd->arguments = eina_list_clone(arguments); + Eina_List* l; + EINA_LIST_FOREACH(pd->arguments, l, data) + { + void* cp = malloc(sizeof(Eldbus_Introspection_Argument)); + memcpy(cp, data, sizeof(Eldbus_Introspection_Argument)); + eina_list_data_set(l, cp); + } } static const Eina_List* @@ -115,6 +127,12 @@ _eldbus_model_arguments_eo_base_destructor(Eo *obj, Eldbus_Model_Arguments_Data eina_stringshare_del(pd->name); eldbus_proxy_unref(pd->proxy); + Eldbus_Introspection_Argument* data; + EINA_LIST_FREE(pd->arguments, data) + { + free(data); + } + eo_do_super(obj, MY_CLASS, eo_destructor()); } diff --git a/src/lib/eldbus/eldbus_model_arguments.eo b/src/lib/eldbus/eldbus_model_arguments.eo index c2c78bf777..1688276393 100644 --- a/src/lib/eldbus/eldbus_model_arguments.eo +++ b/src/lib/eldbus/eldbus_model_arguments.eo @@ -15,8 +15,10 @@ class Eldbus.Model_Arguments (Eo.Base, Efl.Model.Base) { [[Custom Eldbus_Model_Arguments constructor. @since 1.16]] - set {} - get {} + set { + } + get { + } values { arguments: const(list)* @optional; [[The introspected arguments]] } diff --git a/src/lib/eldbus/eldbus_model_arguments_private.h b/src/lib/eldbus/eldbus_model_arguments_private.h index fc93552a81..33a9d7d497 100644 --- a/src/lib/eldbus/eldbus_model_arguments_private.h +++ b/src/lib/eldbus/eldbus_model_arguments_private.h @@ -19,7 +19,7 @@ struct _Eldbus_Model_Arguments_Data Eina_Hash *properties_hash; Eina_Stringshare *name; Eina_List *pending_list; - const Eina_List *arguments; + Eina_List *arguments; Eina_Value tmp_value; };