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));
|
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. */
|
* parent ref, or with the lack of, just a ref. */
|
||||||
{
|
{
|
||||||
Eo *parent_tmp;
|
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,7 +124,12 @@ _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.",
|
ERR("CONTACT DEVS!!! SHOULD NEVER HAPPEN!!! Old parent %p for object %p is not a valid Eo object.",
|
||||||
pd->parent, obj);
|
pd->parent, obj);
|
||||||
}
|
}
|
||||||
eo_unref(obj);
|
|
||||||
|
/* Only unref if we don't have a new parent instead. */
|
||||||
|
if (!parent_id)
|
||||||
|
{
|
||||||
|
eo_unref(obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set new parent */
|
/* Set new parent */
|
||||||
|
@ -138,7 +143,6 @@ _eo_base_parent_set(Eo *obj, Eo_Base_Data *pd, Eo *parent_id)
|
||||||
pd->parent = parent_id;
|
pd->parent = parent_id;
|
||||||
parent_pd->children = eina_list_append(parent_pd->children, obj);
|
parent_pd->children = eina_list_append(parent_pd->children, obj);
|
||||||
pd->parent_list = eina_list_last(parent_pd->children);
|
pd->parent_list = eina_list_last(parent_pd->children);
|
||||||
eo_ref(obj);
|
|
||||||
}
|
}
|
||||||
else
|
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(obj2), 1);
|
||||||
ck_assert_int_eq(eo_ref_get(obj3), 2);
|
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. */
|
/* Just check it doesn't seg atm. */
|
||||||
obj = eo_add(SIMPLE_CLASS, NULL);
|
obj = eo_add(SIMPLE_CLASS, NULL);
|
||||||
|
|
Loading…
Reference in New Issue