Hi everyone, I couldn't get this to work, and by looking at the code it did not seem to be implemented, so here's a patch that allows sending signals to a box's items. It's quite useful when you populate a box in edje through items{} and can't access the evas_object directly or just want to do it in Edje. This does not change the current behavior to get messages from the item itself.
It's used that way : emit => (signal = "boxname:idx:signal", source = "whatever") where idx is an integer (starting at 0 of course). The code is quite raw and may need a little reviewing/cleaning, but it seems to work as far as I've tested. Regards Hugo Camboulive
diff --git a/src/lib/edje_program.c b/src/lib/edje_program.c index 4004ad3..72cbf08 100644 --- a/src/lib/edje_program.c +++ b/src/lib/edje_program.c @@ -1035,8 +1035,8 @@ _edje_emit(Edje *ed, const char *sig, const char *src) for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *rp = ed->table_parts[i]; - if ((rp->part->type == EDJE_PART_TYPE_GROUP || rp->part->type == EDJE_PART_TYPE_EXTERNAL) && - (rp->swallowed_object) && + if ((((rp->part->type == EDJE_PART_TYPE_GROUP || rp->part->type == EDJE_PART_TYPE_EXTERNAL) && (rp->swallowed_object)) + || rp->part->type == EDJE_PART_TYPE_BOX) && (rp->part) && (rp->part->name) && (strcmp(rp->part->name, part) == 0)) { @@ -1054,6 +1054,33 @@ _edje_emit(Edje *ed, const char *sig, const char *src) _edje_external_signal_emit(rp->swallowed_object, newsig, src); return; } + else if (rp->part->type == EDJE_PART_TYPE_BOX) + { + const char *newsep = strchr(newsig, ':'); + if (newsep) + { + size_t newlength = strlen(newsig) + 1; + char *newpart = alloca(newlength); + char *newnewsig; + int newpartid; + Evas_Object *child; + Eina_List *l; + + memcpy(newpart, newsig, newlength); + newnewsig = newpart + (newsep - newsig); + *newnewsig = '\0'; + newnewsig++; + newpartid = atoi(newpart); + if (!rp->object) + return; + l = evas_object_box_children_get(rp->object); + child = eina_list_nth(l, newpartid); + if (child) + _edje_emit(_edje_fetch(child), newnewsig, newpart); + eina_list_free(l); + return; /* return only if we found a colon */ + } + } } } }
------------------------------------------------------------------------------
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel