fix long standing layer set bug
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 24 Jul 2012 04:59:22 +0000 (04:59 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 24 Jul 2012 04:59:22 +0000 (04:59 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@74342 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
src/lib/canvas/evas_layer.c

index a0c175a..e4dda37 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 2012-07-24  Ingvaldur Sigurjonsson
 
        * Fix typoe in docs
+<<<<<<< .mine
 
 2012-07-24  Hermet (ChunEon Park)
 
 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.
+
index 54e9907..3c7bc84 100644 (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);
 }