forked from enlightenment/efl
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. SVN revision: 65384
This commit is contained in:
parent
bd8e46c9b3
commit
4e97f85876
|
@ -2609,6 +2609,7 @@ _edje_embryo_fn_part_swallow(Embryo_Program *ep, Embryo_Cell *params)
|
|||
return 0;
|
||||
}
|
||||
edje_object_part_swallow(ed->obj, rp->part->name, new_obj);
|
||||
_edje_subobj_register(ed, new_obj);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -464,8 +464,6 @@ _sel_clear(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o __UNUSED__, Entry
|
|||
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 @@ _sel_update(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *en)
|
|||
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 @@ _sel_update(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *en)
|
|||
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 @@ _sel_update(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *en)
|
|||
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 @@ _anchors_update(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *en)
|
|||
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 @@ _anchors_update(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *en)
|
|||
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 @@ _anchors_update(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *en)
|
|||
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 @@ _anchors_update(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *en)
|
|||
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 @@ _anchors_clear(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o __UNUSED__, E
|
|||
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 @@ _edje_entry_real_part_init(Edje_Real_Part *rp)
|
|||
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 @@ _edje_entry_real_part_init(Edje_Real_Part *rp)
|
|||
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 @@ _edje_entry_real_part_shutdown(Edje_Real_Part *rp)
|
|||
#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);
|
||||
|
||||
|
|
|
@ -771,6 +771,8 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
|
|||
pack_it = NULL;
|
||||
}
|
||||
}
|
||||
if (source)
|
||||
_edje_subobj_register(ed, child_obj);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1410,6 +1410,7 @@ _elua_edje(lua_State *L) // Stack usage [-?, +?, ?]
|
|||
{
|
||||
_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;
|
||||
}
|
||||
|
|
|
@ -17,12 +17,19 @@ EAPI void
|
|||
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 @@ edje_object_message_send(Evas_Object *obj, Edje_Message_Type type, int id, void
|
|||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
@ -208,10 +216,21 @@ _edje_message_shutdown(void)
|
|||
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_cb_set(Edje *ed, void (*func) (void *data, Evas_Object *obj, Edje_
|
|||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
Edje_Message *
|
||||
|
|
|
@ -1964,6 +1964,8 @@ void _edje_object_orientation_inform(Evas_Object *obj);
|
|||
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);
|
||||
|
|
|
@ -846,12 +846,9 @@ _edje_emit(Edje *ed, const char *sig, const char *src)
|
|||
|
||||
/* 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 @@ _edje_emit_full(Edje *ed, const char *sig, const char *src, void *data,
|
|||
{
|
||||
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 @@ _edje_emit_full(Edje *ed, const char *sig, const char *src, void *data,
|
|||
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)
|
||||
|
|
|
@ -4297,5 +4297,21 @@ edje_string_id_get(const Edje_String *es)
|
|||
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 :*/
|
||||
|
|
Loading…
Reference in New Issue