summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2016-01-18 13:32:12 -0500
committerMike Blumenkrantz <zmike@osg.samsung.com>2016-01-18 15:43:40 -0500
commit6bedbfc2356d12ee77d203030cc7ec28170c331b (patch)
tree4bd066a36266ff7d8d64fcc5496e01d98de2ff9a
parentd093fc8e337c7be9ecd09e53fd4eb115dce97080 (diff)
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
-rw-r--r--src/bin/e_comp_object.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c
index b1a699f6d..149387dbc 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)
296 296
297///////////////////////////////////// 297/////////////////////////////////////
298static void 298static void
299_e_comp_object_updates_init(E_Comp_Object *cw)
300{
301 int pw, ph;
302
303 if (cw->updates) return;
304 pw = cw->ec->client.w, ph = cw->ec->client.h;
305 if ((!pw) || (!ph))
306 e_pixmap_size_get(cw->ec->pixmap, &pw, &ph);
307 cw->updates = eina_tiler_new(pw, ph);
308 if (cw->updates)
309 eina_tiler_tile_size_set(cw->updates, 1, 1);
310}
311
312
313static void
299_e_comp_object_alpha_set(E_Comp_Object *cw) 314_e_comp_object_alpha_set(E_Comp_Object *cw)
300{ 315{
301 Eina_Bool alpha = cw->ec->argb; 316 Eina_Bool alpha = cw->ec->argb;
@@ -1533,12 +1548,7 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw)
1533 } 1548 }
1534 if ((!cw->updates) && (!cw->ec->input_only) && (!cw->ec->ignored)) 1549 if ((!cw->updates) && (!cw->ec->input_only) && (!cw->ec->ignored))
1535 { 1550 {
1536 int pw, ph; 1551 _e_comp_object_updates_init(cw);
1537
1538 pw = cw->ec->client.w, ph = cw->ec->client.h;
1539 if ((!pw) || (!ph))
1540 e_pixmap_size_get(cw->ec->pixmap, &pw, &ph);
1541 cw->updates = eina_tiler_new(pw, ph);
1542 if (!cw->updates) 1552 if (!cw->updates)
1543 { 1553 {
1544 cw->ec->changes.visible = !cw->ec->hidden; 1554 cw->ec->changes.visible = !cw->ec->hidden;
@@ -1547,8 +1557,6 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw)
1547 return; 1557 return;
1548 } 1558 }
1549 } 1559 }
1550 if (cw->updates)
1551 eina_tiler_tile_size_set(cw->updates, 1, 1);
1552 if (cw->ec->new_client) 1560 if (cw->ec->new_client)
1553 { 1561 {
1554 /* ignore until client idler first run */ 1562 /* 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)
3285 Eina_Rectangle rect; 3293 Eina_Rectangle rect;
3286 API_ENTRY; 3294 API_ENTRY;
3287 3295
3288 if (cw->ec->input_only || (!cw->updates)) return; 3296 if (cw->ec->input_only) return;
3289 if (cw->nocomp) return; 3297 if (cw->nocomp) return;
3298 _e_comp_object_updates_init(cw);
3299 EINA_SAFETY_ON_NULL_RETURN(cw->updates);
3290 rect.x = x, rect.y = y; 3300 rect.x = x, rect.y = y;
3291 rect.w = w, rect.h = h; 3301 rect.w = w, rect.h = h;
3292 evas_object_smart_callback_call(obj, "damage", &rect); 3302 evas_object_smart_callback_call(obj, "damage", &rect);