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 <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D9287
This commit is contained in:
Mike Blumenkrantz 2019-07-11 14:17:54 -04:00 committed by Cedric BAIL
parent 3b5d050353
commit b6ebcc35fc
1 changed files with 5 additions and 0 deletions

View File

@ -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;
}