diff options
author | raster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33> | 2009-10-26 08:26:10 +0000 |
---|---|---|
committer | raster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33> | 2009-10-26 08:26:10 +0000 |
commit | fb53b12ccaf74621a5b6a7cbf75b2552bc74817d (patch) | |
tree | 6268526ceba0361f5ce688f52ad8f5b1ab1da02a | |
parent | ef0b023956d39a6b93896f7173cf1da9a72919dd (diff) | |
download | edje-fb53b12ccaf74621a5b6a7cbf75b2552bc74817d.tar.gz edje-fb53b12ccaf74621a5b6a7cbf75b2552bc74817d.tar.bz2 edje-fb53b12ccaf74621a5b6a7cbf75b2552bc74817d.zip |
provide fast-path for re-swallow
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/edje@43292 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33
-rw-r--r-- | src/lib/edje_util.c | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/src/lib/edje_util.c b/src/lib/edje_util.c index 1c3c68f..000abdc 100644 --- a/src/lib/edje_util.c +++ b/src/lib/edje_util.c @@ -3879,20 +3879,33 @@ _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow) { if (rp->swallowed_object) { - evas_object_smart_member_del(rp->swallowed_object); - evas_object_event_callback_del_full(rp->swallowed_object, - EVAS_CALLBACK_FREE, - _edje_object_part_swallow_free_cb, - rp->edje->obj); - evas_object_event_callback_del_full(rp->swallowed_object, - EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _edje_object_part_swallow_changed_hints_cb, - rp->edje->obj); - evas_object_clip_unset(rp->swallowed_object); - evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part"); - if (rp->part->mouse_events) - _edje_callbacks_del(rp->swallowed_object); - rp->swallowed_object = NULL; + if (rp->swallowed_object != obj_swallow) + { + evas_object_smart_member_del(rp->swallowed_object); + evas_object_event_callback_del_full(rp->swallowed_object, + EVAS_CALLBACK_FREE, + _edje_object_part_swallow_free_cb, + rp->edje->obj); + evas_object_event_callback_del_full(rp->swallowed_object, + EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _edje_object_part_swallow_changed_hints_cb, + rp->edje->obj); + evas_object_clip_unset(rp->swallowed_object); + evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part"); + if (rp->part->mouse_events) + _edje_callbacks_del(rp->swallowed_object); + rp->swallowed_object = NULL; + } + else + { +#ifdef EDJE_CALC_CACHE + rp->invalidate = 1; +#endif + _edje_real_part_swallow_hints_update(rp); + rp->edje->dirty = 1; + _edje_recalc(rp->edje); + return; + } } #ifdef EDJE_CALC_CACHE rp->invalidate = 1; |