jackdanielz pushed a commit to branch master. http://git.enlightenment.org/tools/erigo.git/commit/?id=59881baded66ca1bfda3f60de1a291a7d43155a6
commit 59881baded66ca1bfda3f60de1a291a7d43155a6 Author: Daniel Zaoui <daniel.za...@samsung.com> Date: Mon Nov 9 08:47:08 2015 +0200 Updater: reconfigure the container widget on contents changes When a container is modified, its properties are re-applied. --- src/lib/ffi_glue.c | 50 ++++++++++++++++++++++++++++++++++---------------- src/lib/updater.c | 18 +++++++++++++++--- 2 files changed, 49 insertions(+), 19 deletions(-) diff --git a/src/lib/ffi_glue.c b/src/lib/ffi_glue.c index 5553818..4cfce13 100644 --- a/src/lib/ffi_glue.c +++ b/src/lib/ffi_glue.c @@ -189,7 +189,7 @@ manager_widget_content_unset(Gui_Session *session, const Gui_Widget *wdg, const /* this actually "soft" unset. It unpacks only Eo objects, and doesn't affect internal widget dependancies. */ Eina_Bool -manager_widget_content_unset_all(Gui_Session *session, const Gui_Widget *wdg, const char *container_name, void *data EINA_UNUSED) +manager_widget_content_unset_all(Gui_Session *session, const Gui_Widget *wdg, const char *container_name, void *data) { Session_Mode mode = session_mode_get(session); if (mode != MODE_EDITOR) @@ -205,25 +205,43 @@ manager_widget_content_unset_all(Gui_Session *session, const Gui_Widget *wdg, co op_desc = db_container_desc_op_desc_get(container_desc, CONTAINER_UNPACK_ALL); if (!op_desc) { - ERR("Container: \"%s\" doesn't have CONTAINER_UNPACK_ALL operation", container_name); - return EINA_FALSE; + const Eina_List *itr; + op_desc = db_container_desc_op_desc_get(container_desc, CONTAINER_UNPACK); + if (!op_desc) + { + ERR("Container: \"%s\" doesn't have CONTAINER_UNPACK_ALL operation", container_name); + return EINA_FALSE; + } + if (db_op_desc_container_type_get(op_desc) == OBJ_CONTAINER) + { + Object_Container_Item *ci; + EINA_LIST_FOREACH(wdg_obj_container_contents_list_get(wdg), itr, ci) + { + manager_widget_content_unset(session, wdg, container_name, obj_container_item_prop_get(ci), data); + } + } } - Gui_Widget_Property *prop = prop_create_for_op(op_desc); - if (prop) prop_ref(prop); - - /* Unset function in table requires Eina_Bool parameter, which shows, if unpacked objects are deleted. - * So add this value. */ - if (wdg_obj_container_class_name_get(wdg) && - !strcmp(wdg_obj_container_class_name_get(wdg), DB_DEF_TABLE_CLASS)) + else { - val = prop_value_nth_get(prop, 0); - gui_value_bool_set(val, EINA_FALSE); - } + Gui_Widget_Property *prop = prop_create_for_op(op_desc); + if (prop) prop_ref(prop); - Eina_Bool ret = _ffi_eo_do_content(session, wdg, prop, op_desc); + /* Unset function in table requires Eina_Bool parameter, which shows, if unpacked objects are deleted. + * So add this value. */ + if (wdg_obj_container_class_name_get(wdg) && + !strcmp(wdg_obj_container_class_name_get(wdg), DB_DEF_TABLE_CLASS)) + { + val = prop_value_nth_get(prop, 0); + gui_value_bool_set(val, EINA_FALSE); + } - if (prop) prop_unref(prop); - return ret; + Eina_Bool ret = _ffi_eo_do_content(session, wdg, prop, op_desc); + + if (prop) prop_unref(prop); + + return ret; + } + return EINA_TRUE; } static void diff --git a/src/lib/updater.c b/src/lib/updater.c index b629b0c..8c976ed 100644 --- a/src/lib/updater.c +++ b/src/lib/updater.c @@ -50,6 +50,20 @@ _eo_del_apply(const Eina_List *sessions, Eid *eid) } } +static void +_obj_container_update(const Eina_List *sessions, Eid *eid) +{ + const Eina_List *itr; + Gui_Session *s; + Gui_Widget *wdg = wdg_get(eid); + EINA_LIST_FOREACH(sessions, itr, s) + { + const char *cont_kl_name = wdg_obj_container_class_name_get(wdg); + if (cont_kl_name) manager_widget_content_unset_all(s, wdg, cont_kl_name, NULL); + manager_widget_configure(s, wdg, NULL); + } +} + static Eina_Bool _update_check(void *data EINA_UNUSED) { @@ -141,9 +155,7 @@ _update_check(void *data EINA_UNUSED) } case MEMENTO_OBJ_CONTAINER: { - Gui_Session *session = (Gui_Session *) gui_context_editor_session_get(ctx); - manager_widget_content_unset_all(session, wdg, wdg_obj_container_class_name_get(wdg), NULL); - manager_widget_content_add(session, wdg, NULL); + _obj_container_update(sessions, eid); break; } case MEMENTO_WIDGET_PARENT: --