Revert "elm focus manager - dont leak child lists when updating focus order"
authorMarcel Hollerbach <marcel-hollerbach@t-online.de>
Fri, 29 Sep 2017 09:09:33 +0000 (11:09 +0200)
committerMarcel Hollerbach <marcel-hollerbach@t-online.de>
Fri, 29 Sep 2017 09:28:15 +0000 (11:28 +0200)
This reverts commit bd6dcbb044ffea543f27cc69c421317bdea4a14a.

This was not fixing the issue, just ducktaping over a bug in eolian, the
bug is now probebly fixed in eo / eolian.

src/lib/elementary/efl_ui_focus_manager_calc.c
src/lib/elementary/efl_ui_focus_manager_calc.eo
src/lib/elementary/elc_fileselector.c
src/lib/elementary/elm_box.c
src/lib/elementary/elm_grid.c
src/lib/elementary/elm_table.c
src/lib/elementary/elm_toolbar.c
src/tests/elementary/elm_test_focus.c

index 62a33b2..d6066bb 100644 (file)
@@ -552,7 +552,6 @@ _efl_ui_focus_manager_calc_register_logical(Eo *obj, Efl_Ui_Focus_Manager_Calc_D
 
         tmp = eina_list_clone(T(pnode).saved_order);
         efl_ui_focus_manager_calc_update_order(obj, parent, tmp);
-        eina_list_free(tmp);
      }
 
    return EINA_TRUE;
@@ -595,7 +594,6 @@ _efl_ui_focus_manager_calc_register(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd,
 
         tmp = eina_list_clone(T(pnode).saved_order);
         efl_ui_focus_manager_calc_update_order(obj, parent, tmp);
-        eina_list_free(tmp);
      }
 
    return EINA_TRUE;
@@ -695,7 +693,7 @@ _efl_ui_focus_manager_calc_update_order(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data
      return;
 
    ELM_SAFE_FREE(T(pnode).saved_order, eina_list_free);
-   T(pnode).saved_order = eina_list_clone(order);
+   T(pnode).saved_order = order;
 
    //get all nodes from the subset
    EINA_LIST_FOREACH(order, n, o)
@@ -728,14 +726,14 @@ _efl_ui_focus_manager_calc_update_children(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Man
    Node *pnode;
    Efl_Ui_Focus_Object *o;
    Eina_Bool fail = EINA_FALSE;
-   Eina_List *node_order = NULL, *n;
+   Eina_List *node_order = NULL;
 
    pnode = node_get(obj, pd, parent);
    if (!pnode)
      return EINA_FALSE;
 
    //get all nodes from the subset
-   EINA_LIST_FOREACH(order, n, o)
+   EINA_LIST_FREE(order, o)
      {
         Node *tmp;
 
index 7d622c9..2b78b25 100644 (file)
@@ -66,7 +66,7 @@ class Efl.Ui.Focus.Manager.Calc (Efl.Object, Efl.Ui.Focus.Manager) {
             [[Give the list of children a different order.]]
             params {
                 parent : Efl.Ui.Focus.Object @nonull; [[the parent to update]]
-                children : list<Efl.Ui.Focus.Object>; [[the list with the new order]]
+                children : own(list<Efl.Ui.Focus.Object>); [[the list with the new order]]
             }
             return : bool; [[$true if successful, $false otherwise]]
         }
index 4b4dda5..74dd7f9 100644 (file)
@@ -96,26 +96,24 @@ EFL_CALLBACKS_ARRAY_DEFINE(monitoring_callbacks,
 static void
 _focus_chain_update(Eo *obj, Elm_Fileselector_Data *pd)
 {
-   Eo *fman = efl_ui_focus_user_manager_get(obj);
-   if (fman)
-     {
-        Eina_List *tmp = NULL;
+   Eina_List *tmp = NULL;
 
 #define A(p) tmp = eina_list_append(tmp, p);
-        A(pd->up_button)
-        A(pd->home_button)
-        A(pd->search_entry)
-        A(pd->files_view)
-        A(pd->path_entry)
-        A(pd->name_entry)
-        A(pd->filter_hoversel)
-        A(pd->ok_button)
-        A(pd->cancel_button)
+
+   A(pd->up_button)
+   A(pd->home_button)
+   A(pd->search_entry)
+   A(pd->files_view)
+   A(pd->path_entry)
+   A(pd->name_entry)
+   A(pd->filter_hoversel)
+   A(pd->ok_button)
+   A(pd->cancel_button)
+
+
 #undef A
 
-        efl_ui_focus_manager_calc_update_order(efl_ui_focus_user_manager_get(obj), obj, tmp);
-        eina_list_free(tmp);
-     }
+   efl_ui_focus_manager_calc_update_order(efl_ui_focus_user_manager_get(obj), obj, tmp);
 }
 
 static void
index 3f55144..b87d33c 100644 (file)
@@ -26,13 +26,9 @@ static void
 _focus_order_flush(Eo *obj, Elm_Box_Data *pd EINA_UNUSED)
 {
    Elm_Widget_Smart_Data *wpd = efl_data_scope_get(obj, ELM_WIDGET_CLASS);
-   if (wpd->focus.manager)
-     {
-        Eina_List *order = evas_object_box_children_get(wpd->resize_obj);
+   Eina_List *order = evas_object_box_children_get(wpd->resize_obj);
 
-        efl_ui_focus_manager_calc_update_order(wpd->focus.manager, obj, order);
-        eina_list_free(order);
-     }
+   efl_ui_focus_manager_calc_update_order(wpd->focus.manager, obj, order);
 }
 
 static void *
index 9b37e3e..7c85648 100644 (file)
@@ -17,13 +17,9 @@ static void
 _focus_order_flush(Eo *obj)
 {
    Elm_Widget_Smart_Data *wpd = efl_data_scope_get(obj, ELM_WIDGET_CLASS);
-   if (wpd->focus.manager)
-     {
-        Eina_List *order = evas_object_grid_children_get(wpd->resize_obj);
+   Eina_List *order = evas_object_grid_children_get(wpd->resize_obj);
 
-        efl_ui_focus_manager_calc_update_order(wpd->focus.manager, obj, order);
-        eina_list_free(order);
-     }
+   efl_ui_focus_manager_calc_update_order(wpd->focus.manager, obj, order);
 }
 
 
index b1e5b3b..30d5788 100644 (file)
@@ -18,13 +18,9 @@ static void
 _focus_order_flush(Eo *obj)
 {
    Elm_Widget_Smart_Data *wpd = efl_data_scope_get(obj, ELM_WIDGET_CLASS);
-   if (wpd->focus.manager)
-     {
-        Eina_List *order = evas_object_table_children_get(wpd->resize_obj);
+   Eina_List *order = evas_object_table_children_get(wpd->resize_obj);
 
-        efl_ui_focus_manager_calc_update_order(wpd->focus.manager, obj, order);
-        eina_list_free(order);
-     }
+   efl_ui_focus_manager_calc_update_order(wpd->focus.manager, obj, order);
 }
 
 EOLIAN static Eina_Bool
index 4e96ac6..183d148 100644 (file)
@@ -102,29 +102,24 @@ _item_focus_eval(Elm_Toolbar_Item_Data *pd)
 static void
 _item_focus_eval_all(Elm_Toolbar *obj, Elm_Toolbar_Data *pd)
 {
+   Elm_Toolbar_Item_Data *it;
    Elm_Widget_Smart_Data *wpd;
+   Eina_List *order = NULL;
 
    wpd = efl_data_scope_get(obj, ELM_WIDGET_CLASS);
-   if (wpd->focus.manager)
+   EINA_INLIST_FOREACH(pd->items, it)
      {
-        Eina_List *order = NULL;
-        Elm_Toolbar_Item_Data *it;
-
-        EINA_INLIST_FOREACH(pd->items, it)
-          {
-             _item_focus_eval(it);
-             order = eina_list_append(order, EO_OBJ(it));
-          }
-
-        if (pd->more_item)
-          {
-             _item_focus_eval(pd->more_item);
-             order = eina_list_append(order, EO_OBJ(pd->more_item));
-          }
+        _item_focus_eval(it);
+        order = eina_list_append(order, EO_OBJ(it));
+     }
 
-        efl_ui_focus_manager_calc_update_order(wpd->focus.manager, obj, order);
-        eina_list_free(order);
+   if (pd->more_item)
+     {
+        _item_focus_eval(pd->more_item);
+        order = eina_list_append(order, EO_OBJ(pd->more_item));
      }
+
+   efl_ui_focus_manager_calc_update_order(wpd->focus.manager, obj, order);
 }
 
 static int
index 063d4cd..ab6c7f5 100644 (file)
@@ -320,7 +320,6 @@ START_TEST(order_check)
    order = eina_list_append(order, child3);
    order = eina_list_append(order, child1);
    ck_assert_int_eq(efl_ui_focus_manager_calc_update_children(m, root, order), 1);
-   eina_list_free(order);
 
    order = NULL;