discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=9bdb805f481ba42933b46f752fb72c239de5870d

commit 9bdb805f481ba42933b46f752fb72c239de5870d
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Wed Jul 8 12:36:36 2015 -0400

    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 26ce07b..ac14020 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);

-- 


Reply via email to