summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>2009-10-26 08:26:10 +0000
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>2009-10-26 08:26:10 +0000
commitfb53b12ccaf74621a5b6a7cbf75b2552bc74817d (patch)
tree6268526ceba0361f5ce688f52ad8f5b1ab1da02a
parentef0b023956d39a6b93896f7173cf1da9a72919dd (diff)
downloadedje-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.c41
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;