From 1c3412d57ffe78f6d219501cd8ef77e603610ff1 Mon Sep 17 00:00:00 2001 From: raster Date: Tue, 24 Jul 2012 04:59:22 +0000 Subject: [PATCH] fix long standing layer set bug git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@74342 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- ChangeLog | 8 ++++++++ src/lib/canvas/evas_layer.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/ChangeLog b/ChangeLog index a0c175a..e4dda37 100644 --- a/ChangeLog +++ b/ChangeLog @@ -908,6 +908,7 @@ 2012-07-24 Ingvaldur Sigurjonsson * Fix typoe in docs +<<<<<<< .mine 2012-07-24 Hermet (ChunEon Park) @@ -917,3 +918,10 @@ 2012-07-24 Cedric Bail * Handle Proxy with the right context. + +2012-07-24 Carsten Haitzler (The Rasterman) + + * Fix long-standing bug when changing layer of a smart object, + its children dont change their layer value and pointer with it, thus + getting layer from them get you the wrong one. + diff --git a/src/lib/canvas/evas_layer.c b/src/lib/canvas/evas_layer.c index 54e9907..3c7bc84 100644 --- a/src/lib/canvas/evas_layer.c +++ b/src/lib/canvas/evas_layer.c @@ -133,6 +133,31 @@ evas_layer_del(Evas_Layer *lay) e->layers = (Evas_Layer *)eina_inlist_remove(EINA_INLIST_GET(e->layers), EINA_INLIST_GET(lay)); } +static void +_evas_object_layer_set_child(Evas_Object *obj, Evas_Object *par, short l) +{ + Evas *e; + + if (obj->delete_me) return; + if (obj->cur.layer == l) return; + e = obj->layer->evas; + evas_object_release(obj, 1); + obj->cur.layer = l; + obj->layer = par->layer; + obj->layer->usage++; + if (obj->smart.smart) + { + Eina_Inlist *contained; + Evas_Object *member; + + contained = (Eina_Inlist *)evas_object_smart_members_get_direct(obj); + EINA_INLIST_FOREACH(contained, member) + { + _evas_object_layer_set_child(member, obj, l); + } + } +} + /* public functions */ EAPI void @@ -176,6 +201,17 @@ evas_object_layer_set(Evas_Object *obj, short l) obj->layer->evas->last_timestamp, NULL); } + else + { + Eina_Inlist *contained; + Evas_Object *member; + + contained = (Eina_Inlist *)evas_object_smart_members_get_direct(obj); + EINA_INLIST_FOREACH(contained, member) + { + _evas_object_layer_set_child(member, obj, l); + } + } evas_object_inform_call_restack(obj); } -- 2.7.4