fix long standing layer set bug

SVN revision: 74342
This commit is contained in:
Carsten Haitzler 2012-07-24 04:59:22 +00:00
parent 58827ba3b6
commit a3d66cfed3
2 changed files with 44 additions and 0 deletions

View File

@ -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.

View File

@ -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);
}