discomfitor pushed a commit to branch enlightenment-0.20.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=74ce8dd7be215d99add29990fb2b56885c831547

commit 74ce8dd7be215d99add29990fb2b56885c831547
Author: Derek Foreman <der...@osg.samsung.com>
Date:   Mon Feb 29 12:11:56 2016 -0600

    Take an extra reference on wayland clients
    
    We need to make sure wayland clients aren't deleted while the scene
    graph has their data pointers, so we take an extra reference when creating
    them.
    
    We drop that reference by clearing the client's image data and putting it
    in the render post_updates list.
---
 src/bin/e_comp_wl.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c
index 2f2eb06..60c0a81 100644
--- a/src/bin/e_comp_wl.c
+++ b/src/bin/e_comp_wl.c
@@ -137,6 +137,18 @@ _e_comp_wl_evas_cb_hide(void *data, Evas *evas 
EINA_UNUSED, Evas_Object *obj EIN
 
    EINA_LIST_FOREACH(ec->e.state.video_child, l, tmp)
      evas_object_hide(tmp->frame);
+
+   if (!e_object_is_del(E_OBJECT(ec))) return;
+
+   e_comp_object_dirty(ec->frame);
+   e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h);
+   if (!e_comp_object_render(ec->frame)) return;
+   if (!ec->on_post_updates)
+     {
+        ec->on_post_updates = EINA_TRUE;
+        e_comp->post_updates = eina_list_append(e_comp->post_updates, ec);
+     }
+   else e_object_unref(E_OBJECT(ec));
 }
 
 static void
@@ -1533,6 +1545,8 @@ _e_comp_wl_compositor_cb_surface_create(struct wl_client 
*client, struct wl_reso
 #endif
    /* emit surface create signal */
    wl_signal_emit(&e_comp_wl->signals.surface.create, res);
+
+   e_object_ref(E_OBJECT(ec));
 }
 
 static void

-- 


Reply via email to