diff --git a/legacy/evas/ChangeLog b/legacy/evas/ChangeLog index 18cf412343..247fc54a34 100644 --- a/legacy/evas/ChangeLog +++ b/legacy/evas/ChangeLog @@ -884,3 +884,8 @@ 2012-07-16 Hermet (ChunEon Park) * Fixed to do pre render for the children of mapped object. + +2012-07-17 Cedric Bail + + * Fix garbage left by mapped smart object when they fly away from the canvas. + diff --git a/legacy/evas/NEWS b/legacy/evas/NEWS index 319e39edd1..8caf2b01f3 100644 --- a/legacy/evas/NEWS +++ b/legacy/evas/NEWS @@ -21,6 +21,7 @@ Fixes: * Add missing files in the tarball. * Add svg rendering with Esvg * Don't accept broken map. + * Fix garbage left by mapped smart object when they fly away from the canvas. Removal: * Remove EVAS_FRAME_QUEUING, EVAS_SLI, METRIC_CACHE and WORD_CACHE. diff --git a/legacy/evas/src/lib/canvas/evas_map.c b/legacy/evas/src/lib/canvas/evas_map.c index afa433bb4d..23c8de10d8 100644 --- a/legacy/evas/src/lib/canvas/evas_map.c +++ b/legacy/evas/src/lib/canvas/evas_map.c @@ -104,6 +104,7 @@ _evas_map_calc_map_geometry(Evas_Object *obj) obj->cur.map->normal_geometry.y = yy1; obj->cur.map->normal_geometry.w = (x2 - x1); obj->cur.map->normal_geometry.h = (yy2 - yy1); + obj->changed_map = ch; if (ch) _evas_map_calc_geom_change(obj); } @@ -494,7 +495,6 @@ evas_object_map_set(Evas_Object *obj, const Evas_Map *map) if (obj->cur.usemap) evas_object_mapped_clip_across_mark(obj); } - obj->changed_map = EINA_TRUE; _evas_map_calc_map_geometry(obj); } diff --git a/legacy/evas/src/lib/canvas/evas_object_main.c b/legacy/evas/src/lib/canvas/evas_object_main.c index e0e6f0a6e8..44eb6bdd7f 100644 --- a/legacy/evas/src/lib/canvas/evas_object_main.c +++ b/legacy/evas/src/lib/canvas/evas_object_main.c @@ -93,7 +93,7 @@ evas_object_change(Evas_Object *obj) obj->changed_move = EINA_FALSE; } - if (obj->changed) return; + if (obj->changed) return; evas_render_object_recalc(obj); /* set changed flag on all objects this one clips too */ @@ -321,7 +321,7 @@ evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *obj, int i int evas_object_was_in_output_rect(Evas_Object *obj, int x, int y, int w, int h) { - if (obj->smart.smart) return 0; + if (obj->smart.smart && !obj->prev.map && !obj->prev.usemap) return 0; /* assumes coords have been recalced */ if ((RECTS_INTERSECT(x, y, w, h, obj->prev.cache.clip.x,