diff --git a/legacy/evas/src/lib/canvas/evas_layer.c b/legacy/evas/src/lib/canvas/evas_layer.c index 4b11f544fd..f6e1228da0 100644 --- a/legacy/evas/src/lib/canvas/evas_layer.c +++ b/legacy/evas/src/lib/canvas/evas_layer.c @@ -15,6 +15,7 @@ evas_object_inject(Evas_Object *obj, Evas *e) evas_layer_add(lay); } lay->objects = evas_object_list_append(lay->objects, obj); + lay->usage++; obj->layer = lay; obj->in_layer = 1; } @@ -24,9 +25,10 @@ evas_object_release(Evas_Object *obj, int clean_layer) { if (!obj->in_layer) return; obj->layer->objects = evas_object_list_remove(obj->layer->objects, obj); + obj->layer->usage--; if (clean_layer) { - if (!obj->layer->objects) + if (obj->layer->usage <= 0) { evas_layer_del(obj->layer); evas_layer_free(obj->layer); diff --git a/legacy/evas/src/lib/canvas/evas_object_smart.c b/legacy/evas/src/lib/canvas/evas_object_smart.c index 390c08b1bc..9caf490dc7 100644 --- a/legacy/evas/src/lib/canvas/evas_object_smart.c +++ b/legacy/evas/src/lib/canvas/evas_object_smart.c @@ -139,6 +139,7 @@ evas_object_smart_member_add(Evas_Object *obj, Evas_Object *smart_obj) evas_object_release(obj, 1); obj->layer = smart_obj->layer; obj->cur.layer = obj->layer->layer; + obj->layer->usage++; obj->smart.parent = smart_obj; smart_obj->smart.contained = evas_object_list_append(smart_obj->smart.contained, obj); evas_object_smart_member_cache_invalidate(obj); @@ -163,6 +164,7 @@ evas_object_smart_member_del(Evas_Object *obj) obj->smart.parent->smart.contained = evas_object_list_remove(obj->smart.parent->smart.contained, obj); obj->smart.parent = NULL; evas_object_smart_member_cache_invalidate(obj); + obj->layer->usage--; obj->cur.layer = obj->layer->layer; evas_object_inject(obj, obj->layer->evas); obj->restack = 1; diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index c48a66a073..e3eff0b1ce 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -286,6 +286,7 @@ struct _Evas_Layer Evas *evas; void *engine_data; + int usage; unsigned char delete_me : 1; };