diff --git a/src/lib/edje/Edje_Legacy.h b/src/lib/edje/Edje_Legacy.h index 2b0ba0afa9..eba6d13013 100644 --- a/src/lib/edje/Edje_Legacy.h +++ b/src/lib/edje/Edje_Legacy.h @@ -378,6 +378,30 @@ EAPI void edje_object_message_handler_set(Edje_Object *obj, Edje_Message_Handler */ EAPI void edje_object_message_send(Edje_Object *obj, Edje_Message_Type type, int id, void *msg); +/** + * @brief Processes an object's message queue. + * + * This function goes through the object message queue processing the pending + * messages for this specific Edje object. Normally they'd be processed only + * at idle time. Child objects will not be affected. + * + * @see edje_object_message_signal_recursive_process + */ +EAPI void edje_object_message_signal_process(Edje_Object *obj); + +/** + * @brief Processes an object's message queue recursively. + * + * This function goes through the object message queue processing the pending + * messages for this specific Edje object. Normally they'd be processed only + * at idle time. This will also propagate the processing to all child objects. + * + * @see edje_object_message_signal_process + * + * @since 1.20 + */ +EAPI void edje_object_message_signal_recursive_process(Edje_Object *obj); + /** * @} */ diff --git a/src/lib/edje/edje_legacy.c b/src/lib/edje/edje_legacy.c index c349adbefe..3c9e6d2992 100644 --- a/src/lib/edje/edje_legacy.c +++ b/src/lib/edje/edje_legacy.c @@ -47,3 +47,16 @@ edje_object_part_state_get(const Edje_Object *obj, const char * part, double *va efl_canvas_layout_internal_state_get(efl_part(obj, part), &str, val_ret); return str; } + +EAPI void +edje_object_message_signal_process(Edje_Object *obj) +{ + edje_obj_message_signal_process(obj, EINA_FALSE); +} + +/* since 1.20 */ +EAPI void +edje_object_message_signal_recursive_process(Edje_Object *obj) +{ + edje_obj_message_signal_process(obj, EINA_TRUE); +} diff --git a/src/lib/edje/edje_message_queue.c b/src/lib/edje/edje_message_queue.c index 31fed480dc..37e937d194 100644 --- a/src/lib/edje/edje_message_queue.c +++ b/src/lib/edje/edje_message_queue.c @@ -141,8 +141,8 @@ bad_type: return; } -EOLIAN void -_edje_object_message_signal_process(Eo *obj EINA_UNUSED, Edje *ed) +static void +_edje_object_message_signal_process_do(Eo *obj EINA_UNUSED, Edje *ed) { Eina_List *l, *ln, *tmpq = NULL; Edje *lookup_ed; @@ -227,6 +227,25 @@ end: tmp_msgq_restart = 1; } +EOLIAN void +_edje_object_message_signal_process(Eo *obj, Edje *ed, Eina_Bool recurse) +{ + Edje *sub_ed; + Eina_List *l; + Evas_Object *o; + + _edje_object_message_signal_process_do(obj, ed); + if (!recurse) return; + + EINA_LIST_FOREACH(ed->subobjs, l, o) + { + sub_ed = _edje_fetch(o); + if (!sub_ed) continue; + + _edje_object_message_signal_process(o, sub_ed, EINA_TRUE); + } +} + static Eina_Bool _edje_dummy_timer(void *data EINA_UNUSED) { diff --git a/src/lib/edje/edje_object.eo b/src/lib/edje/edje_object.eo index 9318103880..1c561f9c5d 100644 --- a/src/lib/edje/edje_object.eo +++ b/src/lib/edje/edje_object.eo @@ -586,9 +586,17 @@ class Edje.Object (Efl.Canvas.Group.Clipped, Efl.File, Efl.Container, Efl.Part, [[Processes an object's message queue. This function goes through the object message queue processing the - pending messages for this specific Edje object. Normally they'd - be processed only at idle time.]] + pending messages for this specific Edje object. Normally they'd + be processed only at idle time. + If $recurse is $true, this function will be called recursively + on all subobjects. + ]] + params { + recurse: bool @optional; [[Whether to process messages on children + objects.]] + } + legacy: null; } @property global_color_class @class { set {