zmike pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=6714c821f787f4acf52005bfea8091049b503365

commit 6714c821f787f4acf52005bfea8091049b503365
Author: Marcel Hollerbach <m...@marcel-hollerbach.de>
Date:   Mon Sep 23 16:03:26 2019 -0400

    efl_ui_pack: allow NULL as existing parameter in after and before
    
    Summary:
    with this commit all implementations of Efl.Pack_Linear to permit NULL
    as existing parameter, this is verified with a spec test unit.
    
    fixes T8210
    
    Reviewers: zmike, segfaultxavi
    
    Reviewed By: zmike
    
    Subscribers: woohyun, Jaehyun_Cho, YOhoho, segfaultxavi, zmike, cedric, 
#reviewers, #committers
    
    Tags: #efl
    
    Maniphest Tasks: T8210
    
    Differential Revision: https://phab.enlightenment.org/D10023
---
 src/lib/elementary/efl_ui_collection.c           |  6 +++--
 src/lib/elementary/efl_ui_group_item.c           | 21 ++++++++++++++--
 src/lib/elementary/efl_ui_spotlight_container.c  |  6 +++--
 src/lib/elementary/efl_ui_tab_bar.c              |  6 +++--
 src/tests/elementary/spec/efl_test_pack_linear.c | 32 ++++++++++++++++++++++++
 5 files changed, 63 insertions(+), 8 deletions(-)

diff --git a/src/lib/elementary/efl_ui_collection.c 
b/src/lib/elementary/efl_ui_collection.c
index 9494fae9ab..dde77ab9b0 100644
--- a/src/lib/elementary/efl_ui_collection.c
+++ b/src/lib/elementary/efl_ui_collection.c
@@ -821,7 +821,8 @@ EOLIAN static Eina_Bool
 _efl_ui_collection_efl_pack_linear_pack_before(Eo *obj, Efl_Ui_Collection_Data 
*pd, Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing)
 {
    Eina_List *subobj_list = eina_list_data_find_list(pd->items, existing);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(subobj_list, EINA_FALSE);
+   if (existing)
+     EINA_SAFETY_ON_NULL_RETURN_VAL(subobj_list, EINA_FALSE);
 
    if (!register_item(obj, pd, subobj))
      return EINA_FALSE;
@@ -835,7 +836,8 @@ EOLIAN static Eina_Bool
 _efl_ui_collection_efl_pack_linear_pack_after(Eo *obj, Efl_Ui_Collection_Data 
*pd, Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing)
 {
    Eina_List *subobj_list = eina_list_data_find_list(pd->items, existing);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(subobj_list, EINA_FALSE);
+   if (existing)
+     EINA_SAFETY_ON_NULL_RETURN_VAL(subobj_list, EINA_FALSE);
 
    if (!register_item(obj, pd, subobj))
      return EINA_FALSE;
diff --git a/src/lib/elementary/efl_ui_group_item.c 
b/src/lib/elementary/efl_ui_group_item.c
index 5dd3a6bafe..361bd0e06d 100644
--- a/src/lib/elementary/efl_ui_group_item.c
+++ b/src/lib/elementary/efl_ui_group_item.c
@@ -149,10 +149,19 @@ _efl_ui_group_item_efl_pack_linear_pack_before(Eo *obj, 
Efl_Ui_Group_Item_Data *
    EINA_SAFETY_ON_TRUE_RETURN_VAL(subobj == obj, EINA_FALSE);
    Eo *container = efl_ui_item_container_get(obj);
    EINA_SAFETY_ON_NULL_RETURN_VAL(container, EINA_FALSE);
+   int group_index = efl_pack_index_get(container, obj);
 
    //FIXME, maybe we should check if existing is really part of this group
    _register_item(obj, pd, subobj);
-   HANDLE_REG_CALL(efl_pack_before(container, subobj, existing));
+   if (existing)
+     {
+        HANDLE_REG_CALL(efl_pack_before(container, subobj, existing));
+     }
+   else
+     {
+        HANDLE_REG_CALL(efl_pack_at(container, subobj, group_index + 1));
+     }
+
 }
 
 EOLIAN static Eina_Bool
@@ -161,10 +170,18 @@ _efl_ui_group_item_efl_pack_linear_pack_after(Eo *obj, 
Efl_Ui_Group_Item_Data *p
    EINA_SAFETY_ON_TRUE_RETURN_VAL(subobj == obj, EINA_FALSE);
    Eo *container = efl_ui_item_container_get(obj);
    EINA_SAFETY_ON_NULL_RETURN_VAL(container, EINA_FALSE);
+   int group_index = efl_pack_index_get(container, obj);
 
    //FIXME, maybe we should check if existing is really part of this group
    _register_item(obj, pd, subobj);
-   HANDLE_REG_CALL(efl_pack_after(container, subobj, existing));
+   if (existing)
+     {
+        HANDLE_REG_CALL(efl_pack_after(container, subobj, existing));
+     }
+   else
+     {
+        HANDLE_REG_CALL(efl_pack_at(container, subobj, group_index + 
eina_list_count(pd->registered_items)));
+     }
 }
 
 EOLIAN static Eina_Bool
diff --git a/src/lib/elementary/efl_ui_spotlight_container.c 
b/src/lib/elementary/efl_ui_spotlight_container.c
index 50a8e9a014..608aca1d3c 100644
--- a/src/lib/elementary/efl_ui_spotlight_container.c
+++ b/src/lib/elementary/efl_ui_spotlight_container.c
@@ -317,7 +317,8 @@ _efl_ui_spotlight_container_efl_pack_linear_pack_before(Eo 
*obj EINA_UNUSED,
                                           const Efl_Gfx_Entity *existing)
 {
    int index = eina_list_data_idx(pd->content_list, (void *)existing);
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(index >= 0, EINA_FALSE);
+   if (existing)
+     EINA_SAFETY_ON_FALSE_RETURN_VAL(index >= 0, EINA_FALSE);
 
    if (!_register_child(obj, pd, subobj)) return EINA_FALSE;
    pd->content_list = eina_list_prepend_relative(pd->content_list, subobj, 
existing);
@@ -332,7 +333,8 @@ _efl_ui_spotlight_container_efl_pack_linear_pack_after(Eo 
*obj EINA_UNUSED,
                                          const Efl_Gfx_Entity *existing)
 {
    int index = eina_list_data_idx(pd->content_list, (void *)existing);
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(index >= 0, EINA_FALSE);
+   if (existing)
+     EINA_SAFETY_ON_FALSE_RETURN_VAL(index >= 0, EINA_FALSE);
 
    if (!_register_child(obj, pd, subobj)) return EINA_FALSE;
    pd->content_list = eina_list_append_relative(pd->content_list, subobj, 
existing);
diff --git a/src/lib/elementary/efl_ui_tab_bar.c 
b/src/lib/elementary/efl_ui_tab_bar.c
index db7c169653..ff831f8c3d 100644
--- a/src/lib/elementary/efl_ui_tab_bar.c
+++ b/src/lib/elementary/efl_ui_tab_bar.c
@@ -188,7 +188,8 @@ _efl_ui_tab_bar_efl_pack_linear_pack_end(Eo *obj, 
Efl_Ui_Tab_Bar_Data *pd, Efl_G
 EOLIAN static Eina_Bool
 _efl_ui_tab_bar_efl_pack_linear_pack_before(Eo *obj, Efl_Ui_Tab_Bar_Data *pd, 
Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing)
 {
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_pack_index_get(pd->bx, existing) >= 0, 
EINA_FALSE);
+   if (existing)
+     EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_pack_index_get(pd->bx, existing) >= 
0, EINA_FALSE);
    EINA_SAFETY_ON_FALSE_RETURN_VAL(_register_item(obj, pd, subobj), 
EINA_FALSE);
    return efl_pack_before(pd->bx, subobj, existing);
 }
@@ -196,7 +197,8 @@ _efl_ui_tab_bar_efl_pack_linear_pack_before(Eo *obj, 
Efl_Ui_Tab_Bar_Data *pd, Ef
 EOLIAN static Eina_Bool
 _efl_ui_tab_bar_efl_pack_linear_pack_after(Eo *obj, Efl_Ui_Tab_Bar_Data *pd, 
Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing)
 {
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_pack_index_get(pd->bx, existing) >= 0, 
EINA_FALSE);
+   if (existing)
+     EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_pack_index_get(pd->bx, existing) >= 
0, EINA_FALSE);
    EINA_SAFETY_ON_FALSE_RETURN_VAL(_register_item(obj, pd, subobj), 
EINA_FALSE);
    return efl_pack_after(pd->bx, subobj, existing);
 }
diff --git a/src/tests/elementary/spec/efl_test_pack_linear.c 
b/src/tests/elementary/spec/efl_test_pack_linear.c
index b66f449b8d..0ecaacd432 100644
--- a/src/tests/elementary/spec/efl_test_pack_linear.c
+++ b/src/tests/elementary/spec/efl_test_pack_linear.c
@@ -182,6 +182,21 @@ EFL_START_TEST(pack_before3)
 }
 EFL_END_TEST
 
+EFL_START_TEST(pack_before4)
+{
+   Efl_Ui_Widget *wid[3];
+   Efl_Ui_Widget *inv = create_test_widget();
+
+   _fill_array(wid);
+
+   for (int i = 0; i < 3; i++)
+     efl_pack_end(widget, wid[i]);
+
+   ck_assert_int_eq(efl_pack_before(widget, inv, NULL), EINA_TRUE);
+   ck_assert_ptr_eq(efl_pack_content_get(widget, 0), inv);
+}
+EFL_END_TEST
+
 EFL_START_TEST(pack_after1)
 {
    Efl_Ui_Widget *wid[3];
@@ -247,6 +262,21 @@ EFL_START_TEST(pack_after3)
 }
 EFL_END_TEST
 
+EFL_START_TEST(pack_after4)
+{
+   Efl_Ui_Widget *wid[3];
+   Efl_Ui_Widget *inv = create_test_widget();
+
+   _fill_array(wid);
+
+   for (int i = 0; i < 3; i++)
+     efl_pack_end(widget, wid[i]);
+
+   ck_assert_int_eq(efl_pack_after(widget, inv, NULL), EINA_TRUE);
+   ck_assert_ptr_eq(efl_pack_content_get(widget, 3), inv);
+}
+EFL_END_TEST
+
 EFL_START_TEST(pack_at1)
 {
    for (int x = -3; x < 3; ++x)
@@ -449,9 +479,11 @@ efl_pack_linear_behavior_test(TCase *tc)
    tcase_add_test(tc, pack_before1);
    tcase_add_test(tc, pack_before2);
    tcase_add_test(tc, pack_before3);
+   tcase_add_test(tc, pack_before4);
    tcase_add_test(tc, pack_after1);
    tcase_add_test(tc, pack_after2);
    tcase_add_test(tc, pack_after3);
+   tcase_add_test(tc, pack_after4);
    tcase_add_test(tc, pack_at1);
    tcase_add_test(tc, pack_at2);
    tcase_add_test(tc, pack_at3);

-- 


Reply via email to