diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index 97d6becb68..61e24e9def 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -100,6 +100,7 @@ evas_object_change_reset(Evas_Object *eo_obj) obj->changed_color = EINA_FALSE; obj->changed_pchange = EINA_FALSE; obj->changed_src_visible = EINA_FALSE; + obj->need_surface_clear = EINA_FALSE; } void @@ -223,6 +224,7 @@ evas_object_change(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) movch = EINA_TRUE; obj->changed_move = EINA_FALSE; } + else obj->need_surface_clear = EINA_TRUE; if (obj->changed) return; diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index 0b93a81215..42da500947 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c @@ -973,6 +973,7 @@ evas_object_smart_changed_get(Evas_Object *eo_obj) { Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); Evas_Object_Protected_Data *o2; + Eina_Bool has_map = EINA_FALSE; if (!evas_object_is_visible(eo_obj, obj) && !evas_object_was_visible(eo_obj, obj)) @@ -980,16 +981,18 @@ evas_object_smart_changed_get(Evas_Object *eo_obj) if (!obj->clip.clipees) { - if (obj->changed && !obj->is_smart) return EINA_TRUE; - if (_evas_render_has_map(eo_obj, obj)) + has_map = _evas_render_has_map(eo_obj, obj); + if (obj->changed && !obj->is_smart && !has_map) return EINA_TRUE; + + if (has_map) { - if (((obj->changed_pchange) && (obj->changed_map)) || - (obj->changed_color)) return EINA_TRUE; + if (obj->need_surface_clear || ((obj->changed_pchange) && (obj->changed_map))) + return EINA_TRUE; } } EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), o2) - if (evas_object_smart_changed_get(o2->object)) return EINA_TRUE; + if (evas_object_smart_changed_get(o2->object)) return EINA_TRUE; return EINA_FALSE; } diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 2adac27c39..f216221eaa 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -920,6 +920,7 @@ struct _Evas_Object_Protected_Data Eina_Bool changed_map : 1; Eina_Bool changed_pchange : 1; Eina_Bool changed_src_visible : 1; + Eina_Bool need_surface_clear : 1; Eina_Bool del_ref : 1; Eina_Bool is_frame : 1;