hook client object unref callback to cleanup comp object internals

ensure cleanup occurs before client object is freed
This commit is contained in:
Mike Blumenkrantz 2017-06-16 14:59:42 -04:00
parent 4933569bc1
commit 9f5a07d788
1 changed files with 11 additions and 5 deletions

View File

@ -2340,9 +2340,7 @@ _e_comp_smart_hide(Evas_Object *obj)
{
INTERNAL_ENTRY;
cw->visible = 0;
cw->deleted = e_object_is_del(E_OBJECT(cw->ec));
if (cw->deleted)
_e_comp_object_layers_remove(cw);
cw->deleted |= cw->ec->delete_requested || e_object_is_del(E_OBJECT(cw->ec));
evas_object_hide(cw->clip);
if (cw->input_obj) evas_object_hide(cw->input_obj);
evas_object_hide(cw->effect_obj);
@ -2417,6 +2415,15 @@ _e_comp_smart_show(Evas_Object *obj)
}
}
static void
_e_comp_object_client_del(void *d, void *obj EINA_UNUSED)
{
E_Comp_Object *cw = d;
cw->deleted = 1;
e_comp_object_render_update_del(cw->smart_obj);
_e_comp_object_layers_remove(cw);
}
static void
_e_comp_smart_del(Evas_Object *obj)
{
@ -2425,8 +2432,6 @@ _e_comp_smart_del(Evas_Object *obj)
INTERNAL_ENTRY;
if (!cw->deleted)
e_comp_object_render_update_del(cw->smart_obj);
E_FREE_FUNC(cw->updates, eina_tiler_free);
E_FREE_FUNC(cw->pending_updates, eina_tiler_free);
free(cw->ns);
@ -2983,6 +2988,7 @@ e_comp_object_client_add(E_Client *ec)
cw->ec = ec;
ec->frame = o;
evas_object_data_set(o, "comp_object", (void*)1);
e_object_delfn_add(E_OBJECT(ec), _e_comp_object_client_del, cw);
_e_comp_object_event_add(o);