diff options
author | Cedric BAIL <cedric.bail@free.fr> | 2019-02-13 10:46:31 -0800 |
---|---|---|
committer | Cedric BAIL <cedric.bail@free.fr> | 2019-03-08 14:31:06 -0800 |
commit | 6bb197caa9181f6c2639ecd25649a8237c158dd4 (patch) | |
tree | 1bc294f616466547546185dadf4e3202a31ed6ab | |
parent | 98e5a71974553dced24c6858d61d183ecc5b5b29 (diff) | |
download | efl-6bb197caa9181f6c2639ecd25649a8237c158dd4.tar.gz |
efl: for consistency and effiency move Efl.Model event to send stringshare like Property_Bind event.
Reviewed-by: Vitor Sousa da Silva <vitorsousa@expertisesolutions.com.br>
Differential Revision: https://phab.enlightenment.org/D7946
-rw-r--r-- | src/lib/ecore/efl_view_model.c | 2 | ||||
-rw-r--r-- | src/lib/efl/interfaces/efl_model.eo | 4 | ||||
-rw-r--r-- | src/lib/efl/interfaces/efl_mvvm_common.c | 10 | ||||
-rw-r--r-- | src/lib/eldbus/eldbus_model_proxy.c | 23 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_layout.c | 15 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_widget.c | 4 |
6 files changed, 35 insertions, 23 deletions
diff --git a/src/lib/ecore/efl_view_model.c b/src/lib/ecore/efl_view_model.c index 76f2405b28..7bb9a34673 100644 --- a/src/lib/ecore/efl_view_model.c +++ b/src/lib/ecore/efl_view_model.c @@ -304,7 +304,7 @@ _efl_view_model_property_changed(void *data, const Efl_Event *event) eina_array_push(nev.changed_properties, property); - src = eina_stringshare_add(property); + src = eina_stringshare_ref(property); bind = _efl_view_model_property_bind_lookup(pd, src); if (bind) { diff --git a/src/lib/efl/interfaces/efl_model.eo b/src/lib/efl/interfaces/efl_model.eo index 82f4a92b40..29dbf9775c 100644 --- a/src/lib/efl/interfaces/efl_model.eo +++ b/src/lib/efl/interfaces/efl_model.eo @@ -1,7 +1,7 @@ struct @beta Efl.Model_Property_Event { [[EFL model property event data structure]] - changed_properties: array<string>; [[List of changed properties]] - invalidated_properties: array<string>; [[Removed properties identified by name]] + changed_properties: array<stringshare>; [[List of changed properties]] + invalidated_properties: array<stringshare>; [[Removed properties identified by name]] } struct @beta Efl.Model_Children_Event { diff --git a/src/lib/efl/interfaces/efl_mvvm_common.c b/src/lib/efl/interfaces/efl_mvvm_common.c index 2fb9118ebd..a2c7fa4f8d 100644 --- a/src/lib/efl/interfaces/efl_mvvm_common.c +++ b/src/lib/efl/interfaces/efl_mvvm_common.c @@ -62,6 +62,7 @@ _efl_model_properties_changed_internal(const Efl_Model *model, ...) { Efl_Model_Property_Event ev = { 0 }; Eina_Array *properties = eina_array_new(1); + Eina_Stringshare *sp; const char *property; va_list args; @@ -69,7 +70,7 @@ _efl_model_properties_changed_internal(const Efl_Model *model, ...) while ((property = (const char*) va_arg(args, const char*))) { - eina_array_push(properties, property); + eina_array_push(properties, eina_stringshare_add(property)); } va_end(args); @@ -78,6 +79,8 @@ _efl_model_properties_changed_internal(const Efl_Model *model, ...) efl_event_callback_call((Efl_Model *) model, EFL_MODEL_EVENT_PROPERTIES_CHANGED, &ev); + while ((sp = eina_array_pop(properties))) + eina_stringshare_del(sp); eina_array_free(properties); } @@ -87,13 +90,16 @@ efl_model_property_invalidated_notify(Efl_Model *model, const char *property) Eina_Array *invalidated_properties = eina_array_new(1); EINA_SAFETY_ON_NULL_RETURN(invalidated_properties); - Eina_Bool ret = eina_array_push(invalidated_properties, property); + Eina_Stringshare *sp = eina_stringshare_add(property); + + Eina_Bool ret = eina_array_push(invalidated_properties, sp); EINA_SAFETY_ON_FALSE_GOTO(ret, on_error); Efl_Model_Property_Event evt = {.invalidated_properties = invalidated_properties}; efl_event_callback_call(model, EFL_MODEL_EVENT_PROPERTIES_CHANGED, &evt); on_error: + eina_stringshare_del(sp); eina_array_free(invalidated_properties); } diff --git a/src/lib/eldbus/eldbus_model_proxy.c b/src/lib/eldbus/eldbus_model_proxy.c index 32253e36a7..d571732fc8 100644 --- a/src/lib/eldbus/eldbus_model_proxy.c +++ b/src/lib/eldbus/eldbus_model_proxy.c @@ -530,6 +530,7 @@ _eldbus_model_proxy_property_get_all_load(const Eldbus_Message *msg, Eldbus_Mode Eldbus_Message_Iter *values = NULL; Eldbus_Message_Iter *entry; Eina_Array *changed_properties; + Eina_Stringshare *tmp = NULL; const char *error_name, *error_text; if (eldbus_message_error_get(msg, &error_name, &error_text)) @@ -547,7 +548,6 @@ _eldbus_model_proxy_property_get_all_load(const Eldbus_Message *msg, Eldbus_Mode changed_properties = eina_array_new(1); while (eldbus_message_iter_get_and_next(values, 'e', &entry)) { - Eina_Stringshare *tmp; const char *property; Eldbus_Message_Iter *variant; Eina_Value *struct_value; @@ -567,7 +567,6 @@ _eldbus_model_proxy_property_get_all_load(const Eldbus_Message *msg, Eldbus_Mode tmp = eina_stringshare_add(property); prop_value = eina_hash_find(pd->properties, tmp); - eina_stringshare_del(tmp); if (!prop_value) goto on_error; ret = eina_value_copy(&arg0, prop_value); @@ -575,14 +574,20 @@ _eldbus_model_proxy_property_get_all_load(const Eldbus_Message *msg, Eldbus_Mode eina_value_flush(&arg0); - ret = eina_array_push(changed_properties, property); + ret = eina_array_push(changed_properties, tmp); if (!ret) goto on_error; + + // Reset tmp to NULL to avoid double free. + tmp = NULL; } pd->is_loaded = EINA_TRUE; return changed_properties; on_error: + eina_stringshare_del(tmp); + while ((tmp = eina_array_pop(changed_properties))) + eina_stringshare_del(tmp); eina_array_free(changed_properties); return NULL; } @@ -603,6 +608,7 @@ _eldbus_model_proxy_property_get_all_cb(void *data, { Eldbus_Model_Proxy_Data *pd = (Eldbus_Model_Proxy_Data*)data; Eldbus_Property_Promise* p; + Eina_Stringshare *sp; Eina_Array *properties; Efl_Model_Property_Event evt; @@ -623,6 +629,8 @@ _eldbus_model_proxy_property_get_all_cb(void *data, evt.changed_properties = properties; efl_event_callback_call(pd->obj, EFL_MODEL_EVENT_PROPERTIES_CHANGED, &evt); + while ((sp = eina_array_pop(properties))) + eina_stringshare_del(sp); eina_array_free(properties); } @@ -635,6 +643,7 @@ _eldbus_model_proxy_property_set_load_cb(void *data, Eldbus_Model_Proxy_Property_Set_Data *set_data = (Eldbus_Model_Proxy_Property_Set_Data *)data; Eldbus_Model_Proxy_Data *pd = set_data->pd; Eina_Array *properties; + Eina_Stringshare *sp; const char *signature; pd->pendings = eina_list_remove(pd->pendings, pending); @@ -645,16 +654,18 @@ _eldbus_model_proxy_property_set_load_cb(void *data, if (!signature || !properties) { eina_promise_reject(set_data->promise, EFL_MODEL_ERROR_UNKNOWN); - eina_array_free(properties); _eldbus_model_proxy_property_set_data_free(set_data); - return; + goto end; } - eina_array_free(properties); pending = eldbus_proxy_property_value_set(pd->proxy, set_data->property, signature, set_data->value, _eldbus_model_proxy_property_set_cb, set_data); pd->pendings = eina_list_append(pd->pendings, pending); + end: + while ((sp = eina_array_pop(properties))) + eina_stringshare_del(sp); + eina_array_free(properties); } diff --git a/src/lib/elementary/efl_ui_layout.c b/src/lib/elementary/efl_ui_layout.c index f6f725eb9c..8c6e69abcf 100644 --- a/src/lib/elementary/efl_ui_layout.c +++ b/src/lib/elementary/efl_ui_layout.c @@ -2179,21 +2179,18 @@ _efl_model_properties_changed_cb(void *data, const Efl_Event *event) EINA_ARRAY_ITER_NEXT(evt->changed_properties, i, prop, it) { - Eina_Stringshare *sprop = eina_stringshare_add(prop); const char *part; const char *signal; Efl_Ui_Layout_Factory_Tracking *factory; - part = eina_hash_find(pd->connect.properties, sprop); - if (part) _efl_ui_layout_view_model_property_update(pd, part, sprop); + part = eina_hash_find(pd->connect.properties, prop); + if (part) _efl_ui_layout_view_model_property_update(pd, part, prop); - signal = eina_hash_find(pd->connect.signals, sprop); - if (signal) _efl_ui_layout_view_model_signal_update(pd, signal, sprop); + signal = eina_hash_find(pd->connect.signals, prop); + if (signal) _efl_ui_layout_view_model_signal_update(pd, signal, prop); - factory = eina_hash_find(pd->connect.factories, sprop); - if (factory) _efl_ui_layout_view_model_content_update(pd, factory, sprop); - - eina_stringshare_del(sprop); + factory = eina_hash_find(pd->connect.factories, prop); + if (factory) _efl_ui_layout_view_model_content_update(pd, factory, prop); } } diff --git a/src/lib/elementary/efl_ui_widget.c b/src/lib/elementary/efl_ui_widget.c index 86c2db8e97..25462ceb02 100644 --- a/src/lib/elementary/efl_ui_widget.c +++ b/src/lib/elementary/efl_ui_widget.c @@ -6010,12 +6010,10 @@ _efl_ui_model_property_bind_changed(void *data, const Efl_Event *event) EINA_ARRAY_ITER_NEXT(evt->changed_properties, i, prop, it) { - Eina_Stringshare *sp = eina_stringshare_add(prop); Efl_Ui_Property_Bound *lookup; - lookup = eina_hash_find(pd->properties.model_lookup, sp); + lookup = eina_hash_find(pd->properties.model_lookup, prop); if (lookup) _efl_ui_property_bind_get(pd, lookup); - eina_stringshare_del(sp); } } |