jackdanielz pushed a commit to branch master.

http://git.enlightenment.org/tools/erigo.git/commit/?id=a42164e7fdfe85f95f9aa4d2d796655dd92038f1

commit a42164e7fdfe85f95f9aa4d2d796655dd92038f1
Author: Daniel Zaoui <daniel.za...@samsung.com>
Date:   Thu Nov 5 09:43:54 2015 +0200

    Fix JSON parsing when dummy objects are involved
    
    Scenario: naviframe (full of dummies) child of window but not
    contained.
    
    Result: crash. A frame is inserted into a grid when evases are
    different.
    
    During parsing, the orphans checker was not walking over the children
    (just the contained objects). Dummy objects present in the naviframe
    remained orphans.
    
    This patch adds a children checker during the orphans check.
---
 src/lib/gui_widget.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/lib/gui_widget.c b/src/lib/gui_widget.c
index 890068b..cc10c93 100644
--- a/src/lib/gui_widget.c
+++ b/src/lib/gui_widget.c
@@ -1502,13 +1502,21 @@ wdg_orphans_check(Gui_Widget *wdg)
 {
    Gui_Context *ctx = (Gui_Context *)wdg_context_get(wdg);
    const char *wdg_name = wdg_name_get(wdg);
-   const Eina_List *contents = wdg_obj_container_contents_list_get(wdg), *itr;
+   const Eina_List *contents, *itr;
    Object_Container_Item *ci;
+   Eid *child_id;
+   contents = wdg_children_list_get(wdg);
+   EINA_LIST_FOREACH(contents, itr, child_id)
+     {
+        Gui_Widget *child = wdg_get(child_id);
+        wdg_orphans_check(child);
+     }
+   contents = wdg_obj_container_contents_list_get(wdg);
    EINA_LIST_FOREACH(contents, itr, ci)
      {
         Eina_List *itr2;
         Gui_Value *val;
-        Eid *child_id = obj_container_item_eid_get(ci);
+        child_id = obj_container_item_eid_get(ci);
         Gui_Widget *child = wdg_get(child_id);
         wdg_orphans_check(child);
         if (child && !wdg_parent_get(child))
@@ -1544,7 +1552,7 @@ wdg_orphans_check(Gui_Widget *wdg)
           {
              if (gui_value_type_get(val) == GUI_TYPE_OBJECT)
                {
-                  Eid *child_id = EID_ID_GET(val);
+                  child_id = EID_ID_GET(val);
                   if (!child_id) continue;
                   Gui_Widget *child = wdg_get(child_id);
                   wdg_orphans_check(child);

-- 


Reply via email to