From 2477dfaf59413a608194840756c9280d241ce76e Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 10 Oct 2019 13:49:45 -0400 Subject: [PATCH] edje: selectively inhibit content,changed events when changing swallowed parts ref T8321 Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D10508 --- src/lib/edje/edje_private.h | 1 + src/lib/edje/edje_smart.c | 8 ++++++++ src/lib/edje/edje_util.c | 3 ++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h index 6893dd36df..b752d09dd2 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -1803,6 +1803,7 @@ struct _Edje Eina_Bool canvas_animator : 1; Eina_Bool has_state_clip : 1; Eina_Bool has_recalc_event_cb : 1; + Eina_Bool has_content_change_event_cb : 1; }; struct _Edje_Calc_Params_Map diff --git a/src/lib/edje/edje_smart.c b/src/lib/edje/edje_smart.c index ff023f8cb7..f8d42d9069 100644 --- a/src/lib/edje/edje_smart.c +++ b/src/lib/edje/edje_smart.c @@ -608,6 +608,10 @@ _efl_canvas_layout_efl_object_event_callback_priority_add(Eo *obj, Edje *pd, con { pd->has_recalc_event_cb = EINA_TRUE; } + else if (desc == EFL_CONTENT_EVENT_CONTENT_CHANGED) + { + pd->has_content_change_event_cb = EINA_TRUE; + } return efl_event_callback_priority_add(efl_super(obj, MY_CLASS), desc, priority, func, user_data); } @@ -621,6 +625,10 @@ _efl_canvas_layout_efl_object_event_callback_array_priority_add(Eo *obj, Edje *p { pd->has_recalc_event_cb = EINA_TRUE; } + else if (array[i].desc == EFL_CONTENT_EVENT_CONTENT_CHANGED) + { + pd->has_content_change_event_cb = EINA_TRUE; + } } return efl_event_callback_array_priority_add(efl_super(obj, MY_CLASS), array, priority, user_data); } diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c index 450015f8d6..38de6f3c3f 100644 --- a/src/lib/edje/edje_util.c +++ b/src/lib/edje/edje_util.c @@ -3088,7 +3088,8 @@ _edje_efl_content_content_set(Edje *ed, const char *part, Efl_Gfx_Entity *obj_sw eud->u.swallow.child = obj_swallow; } } - efl_event_callback_call(ed->obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, obj_swallow); + if (ed->has_content_change_event_cb) + efl_event_callback_call(ed->obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, obj_swallow); return EINA_TRUE; }