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:

-- 


Reply via email to