From 2981c653a8c6a9c938b1f0987094e4370048c7e1 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 19 Feb 2013 09:54:57 +0000 Subject: [PATCH] store e objects in comp win, delay deletion of e object comp wins until after animation SVN revision: 84098 --- src/bin/e_comp.c | 9 +++++---- src/bin/e_comp.h | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index dbfebfc29..d1871f6af 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -1522,8 +1522,8 @@ _e_comp_done_defer(E_Comp_Win *cw) cw->force = 1; if (cw->delete_me) { - if (cw->real_obj && (cw->pop || cw->menu)) - e_object_unref(evas_object_data_get(cw->obj, "eobj")); + if (cw->real_obj && cw->eobj) + e_object_unref(cw->eobj); _e_comp_win_del(cw); } else cw->force = 0; @@ -1953,6 +1953,7 @@ _e_comp_win_dummy_add(E_Comp *c, Evas_Object *obj, E_Object *eobj, Eina_Bool nol default: CRI("UNHANDLED"); } + cw->eobj = eobj; } else { @@ -2448,8 +2449,8 @@ _e_comp_win_hide(E_Comp_Win *cw) cw->c->animating++; } cw->animating = 1; - if (cw->real_obj && (cw->pop || cw->menu)) - e_object_ref(evas_object_data_get(cw->obj, "eobj")); + if (cw->real_obj && cw->eobj) + e_object_ref(cw->eobj); _e_comp_win_render_queue(cw); cw->pending_count++; diff --git a/src/bin/e_comp.h b/src/bin/e_comp.h index c246f2786..78e7de9d7 100644 --- a/src/bin/e_comp.h +++ b/src/bin/e_comp.h @@ -124,6 +124,7 @@ struct _E_Comp_Win int depth; // window depth Evas_Object *obj; // composite object Evas_Object *shobj; // shadow object + E_Object *eobj; // internal e object Eina_List *obj_mirror; // extra mirror objects Ecore_X_Image *xim; // x image - software fallback E_Comp_Render_Update *up; // update handler