forked from enlightenment/efl
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
This commit is contained in:
parent
98e5a71974
commit
6bb197caa9
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue