From 9bdb805f481ba42933b46f752fb72c239de5870d Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 8 Jul 2015 12:36:36 -0400 Subject: [PATCH] account for race condition when creating initial comp object updates tiler under wayland, some surfaces (eg. cursors) would attempt to show prior to having acquired their actual size. these show attempts should be rejected until the size has been set to ensure that rendering can proceed as expected fix T2557 --- src/bin/e_comp_object.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index 26ce07b02..ac1402010 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -1401,6 +1401,24 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw) } return; } + 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); + if (!cw->updates) + { + cw->ec->changes.visible = !cw->ec->hidden; + cw->ec->visible = 1; + EC_CHANGED(cw->ec); + return; + } + } + if (cw->updates) + eina_tiler_tile_size_set(cw->updates, 1, 1); if (cw->ec->new_client) { /* ignore until client idler first run */ @@ -1491,17 +1509,6 @@ _e_comp_intercept_show(void *data, Evas_Object *obj EINA_UNUSED) #endif cw->redirected = 1; evas_object_color_set(cw->clip, ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity); - - if ((!cw->ec->input_only) && (!cw->ec->ignored)) - { - int w, h; - - w = cw->ec->client.w, h = cw->ec->client.h; - if ((!w) || (!h)) - e_pixmap_size_get(cw->ec->pixmap, &w, &h); - cw->updates = eina_tiler_new(w, h); - eina_tiler_tile_size_set(cw->updates, 1, 1); - } } _e_comp_intercept_show_helper(cw);