Revert "Eo base: Change parent_set to be an assignment of ref."

Damn, this breaks some things. Reverting until fixed.

This reverts commit 9c78ee0bf4.
This commit is contained in:
Tom Hacohen 2015-08-26 10:32:32 +01:00
parent 9c78ee0bf4
commit 37abea3831
3 changed files with 5 additions and 32 deletions

View File

@ -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. Ref. Eo_add should return an object with either a
/* If there's a parent. Unref. 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_ref(obj);
_eo_unref(obj);
}
}

View File

@ -124,12 +124,7 @@ _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);
}
eo_unref(obj);
}
/* Set new parent */
@ -143,6 +138,7 @@ _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
{

View File

@ -464,29 +464,6 @@ 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);