From a53b9b58ffeff532c440802c84fa6f2af629a440 Mon Sep 17 00:00:00 2001 From: rephorm Date: Fri, 16 Mar 2007 21:37:57 +0000 Subject: [PATCH] if you set a file on an edje object that already has swallows, they will now be tracked and re-swallowed SVN revision: 28774 --- legacy/edje/src/lib/edje_load.c | 45 ++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/legacy/edje/src/lib/edje_load.c b/legacy/edje/src/lib/edje_load.c index 4edf285a1c..bd135beba3 100644 --- a/legacy/edje/src/lib/edje_load.c +++ b/legacy/edje/src/lib/edje_load.c @@ -11,6 +11,8 @@ static Evas_Bool _edje_file_collection_hash_foreach(Evas_Hash *hash, const char static int _edje_collection_free_prog_cache_matches_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata); #endif +static Evas_List *_edje_swallows_collect(Edje *ed); + /************************** API Routines **************************/ /* FIXDOC: Verify/expand doc */ @@ -28,6 +30,7 @@ edje_object_file_set(Evas_Object *obj, const char *file, const char *part) { Edje *ed; int n; + Evas_List *old_swallows; ed = _edje_fetch(obj); if (!ed) return 0; @@ -36,7 +39,9 @@ edje_object_file_set(Evas_Object *obj, const char *file, const char *part) if (((ed->path) && (!strcmp(file, ed->path))) && (ed->part) && (!strcmp(part, ed->part))) return 1; - + + old_swallows = _edje_swallows_collect(ed); + _edje_file_del(ed); if (ed->path) evas_stringshare_del(ed->path); @@ -263,6 +268,25 @@ edje_object_file_set(Evas_Object *obj, const char *file, const char *part) if ((evas_object_clipees_get(ed->clipper)) && (evas_object_visible_get(obj))) evas_object_show(ed->clipper); + + /* reswallow any swallows that existed before setting the file */ + if (old_swallows) + { + while (old_swallows) + { + const char *name; + Evas_Object *swallow; + + name = old_swallows->data; + old_swallows = evas_list_remove_list(old_swallows, old_swallows); + + swallow = old_swallows->data; + old_swallows = evas_list_remove_list(old_swallows, old_swallows); + + edje_object_part_swallow(obj, name, swallow); + evas_stringshare_del(name); + } + } _edje_recalc(ed); _edje_thaw(ed); @@ -457,6 +481,25 @@ _edje_file_add(Edje *ed) } } +static Evas_List * +_edje_swallows_collect(Edje *ed) +{ + Evas_List *swallows = NULL; + Evas_List *l; + if (!ed->file || !ed->parts) return NULL; + + for (l = ed->parts; l; l = l->next) + { + Edje_Real_Part *rp; + + rp = l->data; + if (!rp->swallowed_object) continue; + swallows = evas_list_append(swallows, evas_stringshare_add(rp->part->name)); + swallows = evas_list_append(swallows, rp->swallowed_object); + } + return swallows; +} + void _edje_file_del(Edje *ed) {