From b6ebcc35fcc03388f2d128ed2e81dd9b4b28c12a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 11 Jul 2019 14:17:54 -0400 Subject: [PATCH] evas/render: clear smart render cache when re-adding smart parent in post-render given the following scenario: * object is added to smartobj * smartobj is otherwise unchanged * render occurs object will never render due to smartobj's render cache not including object by clearing this cache when reinserting smartobj into the render tree for a followup render, the object chain will be correctly processed on the next pass fix T7990 Reviewed-by: Cedric BAIL Differential Revision: https://phab.enlightenment.org/D9287 --- src/lib/evas/canvas/evas_render.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 87934be5e4..074dc1d618 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -3625,11 +3625,16 @@ evas_render_updates_internal(Evas *eo_e, obj = eina_array_data_get(&e->pending_objects, i); if (obj->smart.parent) { + /* these are all objects which could not be rendered because they were + * added to their smart parent in this cycle and the parent was not changed + */ Evas_Object_Protected_Data *smart_parent; smart_parent = efl_data_scope_get(obj->smart.parent, EFL_CANVAS_OBJECT_CLASS); evas_object_change(obj->smart.parent, smart_parent); + /* render cache must be invalidated to correctly render subobj on next pass */ + evas_object_smart_render_cache_clear(obj->smart.parent); } obj->changed = EINA_TRUE; }