From aab8389a6f07273530cc28905ef36578efa6a5c3 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Sun, 5 Jun 2016 09:58:19 +0100 Subject: [PATCH] Eo: remove strict class checking for composite objects. When compositing objects, we were checking that class_of(B) is in A's inheritance tree before allowing attaching B as a composite object of A. This is wrong and breaks a few cases, for example: B extends a class that is in A's inheritance tree or B implements an interface that is in A's inheritance tree. Thanks to Marcel for reporting. --- src/lib/eo/eo_base_class.c | 5 ----- src/tests/eo/composite_objects/composite_objects_main.c | 2 -- 2 files changed, 7 deletions(-) diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c index 5d8601b91d..e378b70ec1 100644 --- a/src/lib/eo/eo_base_class.c +++ b/src/lib/eo/eo_base_class.c @@ -1242,11 +1242,6 @@ _eo_base_composite_attach(Eo *parent_id, Eo_Base_Data *pd EINA_UNUSED, Eo *comp_ EO_OBJ_POINTER_RETURN_VAL(comp_obj_id, comp_obj, EINA_FALSE); EO_OBJ_POINTER_RETURN_VAL(parent_id, parent, EINA_FALSE); - if (!eo_isa(parent_id, _eo_class_id_get(comp_obj->klass))) - { - return EINA_FALSE; - } - Eo_Base_Data *comp_pd = eo_data_scope_get(comp_obj_id, EO_BASE_CLASS); /* Don't composite if we already have a composite object of this type */ { diff --git a/src/tests/eo/composite_objects/composite_objects_main.c b/src/tests/eo/composite_objects/composite_objects_main.c index b32d5f995f..e424192529 100644 --- a/src/tests/eo/composite_objects/composite_objects_main.c +++ b/src/tests/eo/composite_objects/composite_objects_main.c @@ -73,8 +73,6 @@ main(int argc, char *argv[]) fail_if(!eo_composite_part_is(simple)); fail_if(eo_composite_attach(obj, simple)); - fail_if(eo_composite_attach(simple, obj)); - eo_unref(simple); eo_unref(obj);