On Fri, 18 Nov 2011, Enlightenment SVN wrote:
> Log: > fix inconsistency with propagating signals and messages. now messages > AND signals should propagate to children the SAME WAY - that means > children you added explicitly in the edje file and not form c code get > propagated to. does ChangeLog/NEWS need an entry ? Vincent > > > > Author: raster > Date: 2011-11-18 02:35:38 -0800 (Fri, 18 Nov 2011) > New Revision: 65384 > Trac: http://trac.enlightenment.org/e/changeset/65384 > > Modified: > trunk/edje/src/lib/edje_embryo.c trunk/edje/src/lib/edje_entry.c > trunk/edje/src/lib/edje_load.c trunk/edje/src/lib/edje_lua2.c > trunk/edje/src/lib/edje_message_queue.c trunk/edje/src/lib/edje_private.h > trunk/edje/src/lib/edje_program.c trunk/edje/src/lib/edje_util.c > > Modified: trunk/edje/src/lib/edje_embryo.c > =================================================================== > --- trunk/edje/src/lib/edje_embryo.c 2011-11-18 09:52:58 UTC (rev 65383) > +++ trunk/edje/src/lib/edje_embryo.c 2011-11-18 10:35:38 UTC (rev 65384) > @@ -2609,6 +2609,7 @@ > return 0; > } > edje_object_part_swallow(ed->obj, rp->part->name, new_obj); > + _edje_subobj_register(ed, new_obj); > > return 0; > } > > Modified: trunk/edje/src/lib/edje_entry.c > =================================================================== > --- trunk/edje/src/lib/edje_entry.c 2011-11-18 09:52:58 UTC (rev 65383) > +++ trunk/edje/src/lib/edje_entry.c 2011-11-18 10:35:38 UTC (rev 65384) > @@ -464,8 +464,6 @@ > Sel *sel; > > sel = en->sel->data; > - en->rp->edje->subobjs = eina_list_remove(en->rp->edje->subobjs, > sel->obj_bg); > - en->rp->edje->subobjs = eina_list_remove(en->rp->edje->subobjs, > sel->obj_fg); > if (sel->obj_bg) evas_object_del(sel->obj_bg); > if (sel->obj_fg) evas_object_del(sel->obj_fg); > free(sel); > @@ -497,8 +495,6 @@ > while (en->sel) > { > sel = en->sel->data; > - en->rp->edje->subobjs = eina_list_remove(en->rp->edje->subobjs, > sel->obj_bg); > - en->rp->edje->subobjs = eina_list_remove(en->rp->edje->subobjs, > sel->obj_fg); > if (sel->obj_bg) evas_object_del(sel->obj_bg); > if (sel->obj_fg) evas_object_del(sel->obj_fg); > free(sel); > @@ -520,7 +516,7 @@ > evas_object_pass_events_set(ob, EINA_TRUE); > evas_object_show(ob); > sel->obj_bg = ob; > - en->rp->edje->subobjs = > eina_list_append(en->rp->edje->subobjs, sel->obj_bg); > + _edje_subobj_register(en->rp->edje, sel->obj_bg); > > ob = edje_object_add(en->rp->edje->base.evas); > edje_object_file_set(ob, en->rp->edje->path, > en->rp->part->source2); > @@ -530,7 +526,7 @@ > evas_object_pass_events_set(ob, EINA_TRUE); > evas_object_show(ob); > sel->obj_fg = ob; > - en->rp->edje->subobjs = > eina_list_append(en->rp->edje->subobjs, sel->obj_fg); > + _edje_subobj_register(en->rp->edje, sel->obj_fg); > } > } > } > @@ -728,10 +724,6 @@ > while (an->sel) > { > sel = an->sel->data; > - en->rp->edje->subobjs = > - eina_list_remove(en->rp->edje->subobjs, > sel->obj_bg); > - en->rp->edje->subobjs = > - eina_list_remove(en->rp->edje->subobjs, > sel->obj_fg); > if (sel->obj_bg) evas_object_del(sel->obj_bg); > if (sel->obj_fg) evas_object_del(sel->obj_fg); > if (sel->obj) evas_object_del(sel->obj); > @@ -766,8 +758,6 @@ > while (an->sel) > { > sel = an->sel->data; > - en->rp->edje->subobjs = > eina_list_remove(en->rp->edje->subobjs, sel->obj_bg); > - en->rp->edje->subobjs = > eina_list_remove(en->rp->edje->subobjs, sel->obj_fg); > if (sel->obj_bg) evas_object_del(sel->obj_bg); > if (sel->obj_fg) evas_object_del(sel->obj_fg); > if (sel->obj) evas_object_del(sel->obj); > @@ -788,7 +778,7 @@ > evas_object_pass_events_set(ob, EINA_TRUE); > evas_object_show(ob); > sel->obj_bg = ob; > - en->rp->edje->subobjs = > eina_list_append(en->rp->edje->subobjs, sel->obj_bg); > + _edje_subobj_register(en->rp->edje, sel->obj_bg); > > ob = edje_object_add(en->rp->edje->base.evas); > edje_object_file_set(ob, en->rp->edje->path, > en->rp->part->source6); > @@ -798,7 +788,7 @@ > evas_object_pass_events_set(ob, EINA_TRUE); > evas_object_show(ob); > sel->obj_fg = ob; > - en->rp->edje->subobjs = > eina_list_append(en->rp->edje->subobjs, sel->obj_fg); > + _edje_subobj_register(en->rp->edje, sel->obj_fg); > > ob = > evas_object_rectangle_add(en->rp->edje->base.evas); > evas_object_color_set(ob, 0, 0, 0, 0); > @@ -878,8 +868,6 @@ > while (an->sel) > { > Sel *sel = an->sel->data; > - en->rp->edje->subobjs = eina_list_remove(en->rp->edje->subobjs, > sel->obj_bg); > - en->rp->edje->subobjs = eina_list_remove(en->rp->edje->subobjs, > sel->obj_fg); > if (sel->obj_bg) evas_object_del(sel->obj_bg); > if (sel->obj_fg) evas_object_del(sel->obj_fg); > if (sel->obj) evas_object_del(sel->obj); > @@ -2012,7 +2000,7 @@ > evas_object_stack_below(en->cursor_bg, rp->object); > evas_object_clip_set(en->cursor_bg, evas_object_clip_get(rp->object)); > evas_object_pass_events_set(en->cursor_bg, EINA_TRUE); > - rp->edje->subobjs = eina_list_append(rp->edje->subobjs, en->cursor_bg); > + _edje_subobj_register(en->rp->edje, en->cursor_bg); > > en->cursor_fg = edje_object_add(rp->edje->base.evas); > edje_object_file_set(en->cursor_fg, rp->edje->path, rp->part->source4); > @@ -2020,7 +2008,7 @@ > evas_object_stack_above(en->cursor_fg, rp->object); > evas_object_clip_set(en->cursor_fg, evas_object_clip_get(rp->object)); > evas_object_pass_events_set(en->cursor_fg, EINA_TRUE); > - rp->edje->subobjs = eina_list_append(rp->edje->subobjs, en->cursor_fg); > + _edje_subobj_register(en->rp->edje, en->cursor_fg); > > if (rp->part->entry_mode >= EDJE_ENTRY_EDIT_MODE_EDITABLE) > { > @@ -2086,8 +2074,6 @@ > #ifdef HAVE_ECORE_IMF > _preedit_clear(en); > #endif > - rp->edje->subobjs = eina_list_remove(rp->edje->subobjs, en->cursor_bg); > - rp->edje->subobjs = eina_list_remove(rp->edje->subobjs, en->cursor_fg); > evas_object_del(en->cursor_bg); > evas_object_del(en->cursor_fg); > > > Modified: trunk/edje/src/lib/edje_load.c > =================================================================== > --- trunk/edje/src/lib/edje_load.c 2011-11-18 09:52:58 UTC (rev 65383) > +++ trunk/edje/src/lib/edje_load.c 2011-11-18 10:35:38 UTC (rev 65384) > @@ -771,6 +771,8 @@ > pack_it = NULL; > } > } > + if (source) > + _edje_subobj_register(ed, child_obj); > } > } > > > Modified: trunk/edje/src/lib/edje_lua2.c > =================================================================== > --- trunk/edje/src/lib/edje_lua2.c 2011-11-18 09:52:58 UTC (rev 65383) > +++ trunk/edje/src/lib/edje_lua2.c 2011-11-18 10:35:38 UTC (rev 65384) > @@ -1410,6 +1410,7 @@ > { > _ELUA_PLANT_EVAS_OBJECT(Edje_Lua_Evas_Object, _elua_evas_edje_meta, > _elua_evas_obj_free) > elo->evas_obj = edje_object_add(evas_object_evas_get(ed->obj)); > + _edje_subobj_register(ed, elo->evas_obj); > _elua_polish_evas_object(ed, elo); > return 1; > } > > Modified: trunk/edje/src/lib/edje_message_queue.c > =================================================================== > --- trunk/edje/src/lib/edje_message_queue.c 2011-11-18 09:52:58 UTC (rev > 65383) > +++ trunk/edje/src/lib/edje_message_queue.c 2011-11-18 10:35:38 UTC (rev > 65384) > @@ -17,12 +17,19 @@ > edje_object_message_send(Evas_Object *obj, Edje_Message_Type type, int id, > void *msg) > { > Edje *ed; > - unsigned int i; > + Eina_List *l; > + Evas_Object *o; > > ed = _edje_fetch(obj); > if (!ed) return; > - > _edje_message_send(ed, EDJE_QUEUE_SCRIPT, type, id, msg); > + EINA_LIST_FOREACH(ed->subobjs, l, o) > + { > + edje_object_message_send(o, type, id, msg); > + } > +/* old manual part walking code to send messages to children - should all > + * be in subobjs if we care > + unsigned int i; > > for (i = 0; i < ed->table_parts_size; i++) > { > @@ -47,6 +54,7 @@ > } > } > } > + */ > } > > > @@ -208,10 +216,21 @@ > void > _edje_message_cb_set(Edje *ed, void (*func) (void *data, Evas_Object *obj, > Edje_Message_Type type, int id, void *msg), void *data) > { > - unsigned int i; > + Eina_List *l; > + Evas_Object *o; > > ed->message.func = func; > ed->message.data = data; > + EINA_LIST_FOREACH(ed->subobjs, l, o) > + { > + Edje *edj2 = _edje_fetch(o); > + if (!edj2) continue; > + _edje_message_cb_set(edj2, func, data); > + } > +/* old manual part walking code to send messages to children - should all > + * be in subobjs if we care > + unsigned int i; > + > for (i = 0; i < ed->table_parts_size; i++) > { > Edje_Real_Part *rp = ed->table_parts[i]; > @@ -234,6 +253,7 @@ > } > } > } > + */ > } > > Edje_Message * > > Modified: trunk/edje/src/lib/edje_private.h > =================================================================== > --- trunk/edje/src/lib/edje_private.h 2011-11-18 09:52:58 UTC (rev 65383) > +++ trunk/edje/src/lib/edje_private.h 2011-11-18 10:35:38 UTC (rev 65384) > @@ -1964,6 +1964,8 @@ > void _edje_lib_ref(void); > void _edje_lib_unref(void); > > +void _edje_subobj_register(Edje *ed, Evas_Object *ob); > + > void _edje_multisense_init(void); > void _edje_multisense_shutdown(void); > Eina_Bool _edje_multisense_internal_sound_sample_play(Edje *ed, const char > *sample_name, const double speed); > > Modified: trunk/edje/src/lib/edje_program.c > =================================================================== > --- trunk/edje/src/lib/edje_program.c 2011-11-18 09:52:58 UTC (rev 65383) > +++ trunk/edje/src/lib/edje_program.c 2011-11-18 10:35:38 UTC (rev 65384) > @@ -846,12 +846,9 @@ > > /* data should either be NULL or a malloc allocated data */ > void > -_edje_emit_full(Edje *ed, const char *sig, const char *src, void *data, > - void (*free_func)(void *)) > +_edje_emit_full(Edje *ed, const char *sig, const char *src, void *data, void > (*free_func)(void *)) > { > Edje_Message_Signal emsg; > - Eina_List *l; > - Evas_Object *obj; > const char *sep; > > if (ed->delete_me) return; > @@ -991,6 +988,9 @@ > { > emsg.data = NULL; > } > +/* new sends code */ > + edje_object_message_send(ed->obj, EDJE_MESSAGE_SIGNAL, 0, &emsg); > +/* old send code - use api now > _edje_message_send(ed, EDJE_QUEUE_SCRIPT, EDJE_MESSAGE_SIGNAL, 0, &emsg); > EINA_LIST_FOREACH(ed->subobjs, l, obj) > { > @@ -1001,7 +1001,7 @@ > if (ed2->delete_me) continue; > _edje_message_send(ed2, EDJE_QUEUE_SCRIPT, EDJE_MESSAGE_SIGNAL, 0, > &emsg); > } > - > + */ > if (emsg.data && (--(emsg.data->ref) == 0)) > { > if (emsg.data->free_func) > > Modified: trunk/edje/src/lib/edje_util.c > =================================================================== > --- trunk/edje/src/lib/edje_util.c 2011-11-18 09:52:58 UTC (rev 65383) > +++ trunk/edje/src/lib/edje_util.c 2011-11-18 10:35:38 UTC (rev 65384) > @@ -4297,5 +4297,21 @@ > return es->str; > } > > +static void > +_cb_subobj_del(void *data, __UNUSED__ Evas *e, Evas_Object *obj, __UNUSED__ > void *event_info) > +{ > + Edje *ed = data; > + ed->subobjs = eina_list_remove(ed->subobjs, obj); > + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL, > + _cb_subobj_del, ed); > +} > > +void > +_edje_subobj_register(Edje *ed, Evas_Object *ob) > +{ > + ed->subobjs = eina_list_append(ed->subobjs, ob); > + evas_object_event_callback_add(ob, EVAS_CALLBACK_DEL, > + _cb_subobj_del, ed); > +} > + > /* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/ > > > ------------------------------------------------------------------------------ > All the data continuously generated in your IT infrastructure > contains a definitive record of customers, application performance, > security threats, fraudulent activity, and more. Splunk takes this > data and makes sense of it. IT sense. And common sense. > http://p.sf.net/sfu/splunk-novd2d > _______________________________________________ > enlightenment-svn mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > > ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-novd2d _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
