From 74ce8dd7be215d99add29990fb2b56885c831547 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Mon, 29 Feb 2016 12:11:56 -0600 Subject: [PATCH] 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 2f2eb06db..60c0a8184 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