discomfitor pushed a commit to branch enlightenment-0.20. http://git.enlightenment.org/core/enlightenment.git/commit/?id=6bedbfc2356d12ee77d203030cc7ec28170c331b
commit 6bedbfc2356d12ee77d203030cc7ec28170c331b Author: Mike Blumenkrantz <zm...@osg.samsung.com> Date: Mon Jan 18 13:32:12 2016 -0500 create comp object updates tiler in helper function from either show or damage it's possible for damage to occur before the show interceptor is triggered, and in this case damages would be lost despite it being a valid usage ref T3011 --- src/bin/e_comp_object.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index b1a699f..149387d 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -296,6 +296,21 @@ _e_comp_object_layers_remove(E_Comp_Object *cw) ///////////////////////////////////// static void +_e_comp_object_updates_init(E_Comp_Object *cw) +{ + int pw, ph; + + if (cw->updates) return; + pw = cw->ec->client.w, ph = cw->ec->client.h; + if ((!pw) || (!ph)) + e_pixmap_size_get(cw->ec->pixmap, &pw, &ph); + cw->updates = eina_tiler_new(pw, ph); + if (cw->updates) + eina_tiler_tile_size_set(cw->updates, 1, 1); +} + + +static void _e_comp_object_alpha_set(E_Comp_Object *cw) { Eina_Bool alpha = cw->ec->argb; @@ -1533,12 +1548,7 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw) } if ((!cw->updates) && (!cw->ec->input_only) && (!cw->ec->ignored)) { - int pw, ph; - - pw = cw->ec->client.w, ph = cw->ec->client.h; - if ((!pw) || (!ph)) - e_pixmap_size_get(cw->ec->pixmap, &pw, &ph); - cw->updates = eina_tiler_new(pw, ph); + _e_comp_object_updates_init(cw); if (!cw->updates) { cw->ec->changes.visible = !cw->ec->hidden; @@ -1547,8 +1557,6 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw) return; } } - if (cw->updates) - eina_tiler_tile_size_set(cw->updates, 1, 1); if (cw->ec->new_client) { /* ignore until client idler first run */ @@ -3285,8 +3293,10 @@ e_comp_object_damage(Evas_Object *obj, int x, int y, int w, int h) Eina_Rectangle rect; API_ENTRY; - if (cw->ec->input_only || (!cw->updates)) return; + if (cw->ec->input_only) return; if (cw->nocomp) return; + _e_comp_object_updates_init(cw); + EINA_SAFETY_ON_NULL_RETURN(cw->updates); rect.x = x, rect.y = y; rect.w = w, rect.h = h; evas_object_smart_callback_call(obj, "damage", &rect); --