From: Cedric BAIL Date: Fri, 23 Jan 2015 17:02:40 +0000 (+0100) Subject: evas: also allow Evas_VG and NULL as parent. X-Git-Tag: accepted/tizen/mobile/20150709.001446~132 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4953a547802c60d4567cdaf8b0fb92c6ad7dc0a9;p=platform%2Fupstream%2Fefl.git evas: also allow Evas_VG and NULL as parent. I have yet to be sure of the Evas_VG one. Change-Id: I1492ca3d56d80506718d5d8d3412ca5a2295dfbd --- diff --git a/src/lib/evas/canvas/evas_vg_node.c b/src/lib/evas/canvas/evas_vg_node.c index b6d3f01..633718a 100644 --- a/src/lib/evas/canvas/evas_vg_node.c +++ b/src/lib/evas/canvas/evas_vg_node.c @@ -104,7 +104,8 @@ _evas_vg_node_mask_get(Eo *obj EINA_UNUSED, Evas_VG_Node_Data *pd) // Parent should be a container otherwise dismissing the stacking operation void -_evas_vg_node_eo_base_constructor(Eo *obj, Evas_VG_Node_Data *pd EINA_UNUSED) +_evas_vg_node_eo_base_constructor(Eo *obj, + Evas_VG_Node_Data *pd EINA_UNUSED) { Evas_VG_Container_Data *cd; Eo *parent; @@ -112,13 +113,22 @@ _evas_vg_node_eo_base_constructor(Eo *obj, Evas_VG_Node_Data *pd EINA_UNUSED) eo_do_super(obj, MY_CLASS, eo_constructor()); eo_do(obj, parent = eo_parent_get()); - cd = eo_data_scope_get(parent, EVAS_VG_CONTAINER_CLASS); - if (!cd) + if (eo_isa(parent, EVAS_VG_CONTAINER_CLASS)) + { + cd = eo_data_scope_get(parent, EVAS_VG_CONTAINER_CLASS); + if (!cd) + { + ERR("Can't get EVAS_VG_CONTAINER_CLASS data."); + eo_error_set(obj); + return ; + } + cd->children = eina_list_append(cd->children, obj); + } + else if (parent != NULL && !eo_isa(parent, EVAS_VG_CLASS)) { + ERR("Not even an EVAS_VG_CLASS."); eo_error_set(obj); - return ; } - cd->children = eina_list_append(cd->children, obj); } void @@ -126,30 +136,48 @@ _evas_vg_node_eo_base_parent_set(Eo *obj, Evas_VG_Node_Data *pd EINA_UNUSED, Eo *parent) { - Evas_VG_Container_Data *cd; - Evas_VG_Container_Data *old_cd; + Evas_VG_Container_Data *cd = NULL; + Evas_VG_Container_Data *old_cd = NULL; Eo *old_parent; - cd = eo_data_scope_get(parent, EVAS_VG_CONTAINER_CLASS); - if (!cd) + if (eo_isa(parent, EVAS_VG_CONTAINER_CLASS)) { - eo_error_set(obj); - return ; + ERR("Can't get EVAS_VG_CONTAINER_CLASS data from %p.", parent); + cd = eo_data_scope_get(parent, EVAS_VG_CONTAINER_CLASS); + if (!cd) goto on_error; + } + else if (parent != NULL && !eo_isa(parent, EVAS_VG_CLASS)) + { + ERR("%p not even an EVAS_VG_CLASS.", parent); + goto on_error; } eo_do(obj, old_parent = eo_parent_get()); - old_cd = eo_data_scope_get(old_parent, EVAS_VG_CONTAINER_CLASS); - if (!old_cd) + if (eo_isa(old_parent, EVAS_VG_CONTAINER_CLASS)) { - eo_error_set(obj); - return ; + ERR("Can't get EVAS_VG_CONTAINER_CLASS data from %p.", old_parent); + old_cd = eo_data_scope_get(old_parent, EVAS_VG_CONTAINER_CLASS); + if (!old_cd) goto on_error; + } + else if (old_parent != NULL && !eo_isa(old_parent, EVAS_VG_CLASS)) + { + ERR("%p not even an EVAS_VG_CLASS.", old_parent); + goto on_error; } // FIXME: this may become slow with to much object - old_cd->children = eina_list_remove(old_cd->children, obj); + if (old_cd) + old_cd->children = eina_list_remove(old_cd->children, obj); eo_do_super(obj, MY_CLASS, eo_parent_set(parent)); - cd->children = eina_list_append(cd->children, obj); + if (cd) + cd->children = eina_list_append(cd->children, obj); + + return ; + + on_error: + eo_error_set(obj); + return ; } void