account for race condition when creating initial comp object updates tiler
authorMike Blumenkrantz <zmike@osg.samsung.com>
Wed, 8 Jul 2015 16:36:36 +0000 (12:36 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Wed, 8 Jul 2015 16:36:36 +0000 (12:36 -0400)
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

index 26ce07b..ac14020 100644 (file)
@@ -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);