forked from enlightenment/efl
Revert "Revert "Eo base: Change parent_set to be an assignment of ref.""
Had to revert it until I pushed the changes to elm, which I had issues
with. Now the patch can safely go back in.
This reverts commit 37abea3831
.
This commit is contained in:
parent
37abea3831
commit
acc158a2bf
|
@ -917,13 +917,13 @@ _eo_add_internal_start(const char *file, int line, const Eo_Class *klass_id, Eo
|
|||
|
||||
eo_do(eo_id, eo_parent_set(parent_id));
|
||||
|
||||
/* If there's a parent. Unref. Eo_add should return an object with either a
|
||||
/* If there's a parent. Ref. Eo_add should return an object with either a
|
||||
* parent ref, or with the lack of, just a ref. */
|
||||
{
|
||||
Eo *parent_tmp;
|
||||
if (!ref && eo_do_ret(eo_id, parent_tmp, eo_parent_get()))
|
||||
if (ref && eo_do_ret(eo_id, parent_tmp, eo_parent_get()))
|
||||
{
|
||||
_eo_unref(obj);
|
||||
_eo_ref(obj);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -124,8 +124,13 @@ _eo_base_parent_set(Eo *obj, Eo_Base_Data *pd, Eo *parent_id)
|
|||
ERR("CONTACT DEVS!!! SHOULD NEVER HAPPEN!!! Old parent %p for object %p is not a valid Eo object.",
|
||||
pd->parent, obj);
|
||||
}
|
||||
|
||||
/* Only unref if we don't have a new parent instead. */
|
||||
if (!parent_id)
|
||||
{
|
||||
eo_unref(obj);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set new parent */
|
||||
if (parent_id)
|
||||
|
@ -138,7 +143,6 @@ _eo_base_parent_set(Eo *obj, Eo_Base_Data *pd, Eo *parent_id)
|
|||
pd->parent = parent_id;
|
||||
parent_pd->children = eina_list_append(parent_pd->children, obj);
|
||||
pd->parent_list = eina_list_last(parent_pd->children);
|
||||
eo_ref(obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -464,6 +464,29 @@ START_TEST(eo_refs)
|
|||
ck_assert_int_eq(eo_ref_get(obj2), 1);
|
||||
ck_assert_int_eq(eo_ref_get(obj3), 2);
|
||||
|
||||
/* Setting and removing parents. */
|
||||
obj = eo_add(SIMPLE_CLASS, NULL);
|
||||
obj2 = eo_ref(eo_add(SIMPLE_CLASS, obj));
|
||||
obj3 = eo_ref(eo_add(SIMPLE_CLASS, NULL));
|
||||
|
||||
eo_do(obj2, eo_parent_set(obj3));
|
||||
eo_do(obj3, eo_parent_set(obj));
|
||||
ck_assert_int_eq(eo_ref_get(obj2), 2);
|
||||
ck_assert_int_eq(eo_ref_get(obj3), 2);
|
||||
|
||||
eo_do(obj2, eo_parent_set(NULL));
|
||||
eo_do(obj3, eo_parent_set(NULL));
|
||||
ck_assert_int_eq(eo_ref_get(obj2), 1);
|
||||
ck_assert_int_eq(eo_ref_get(obj3), 1);
|
||||
|
||||
eo_do(obj2, eo_parent_set(obj));
|
||||
eo_do(obj3, eo_parent_set(obj));
|
||||
ck_assert_int_eq(eo_ref_get(obj2), 1);
|
||||
ck_assert_int_eq(eo_ref_get(obj3), 1);
|
||||
|
||||
eo_del(obj);
|
||||
eo_del(obj2);
|
||||
eo_del(obj3);
|
||||
|
||||
/* Just check it doesn't seg atm. */
|
||||
obj = eo_add(SIMPLE_CLASS, NULL);
|
||||
|
|
Loading…
Reference in New Issue