From 8218fb0e2030c49ed92acd7431f57ef41d367ab7 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 14 Oct 2019 09:29:30 -0400 Subject: [PATCH] eo: block "invalidate" event emission when there are no subscribers Summary: this should be handled like the rest of eo internal events ref T8321 Depends on D10353 Reviewers: bu5hm4n, cedric Reviewed By: bu5hm4n, cedric Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8321 Differential Revision: https://phab.enlightenment.org/D10354 --- src/lib/eo/eo_base_class.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c index 782a57f52e..67deec898a 100644 --- a/src/lib/eo/eo_base_class.c +++ b/src/lib/eo/eo_base_class.c @@ -61,6 +61,7 @@ struct _Efl_Object_Data unsigned short event_cb_efl_event_callback_del_count; unsigned short event_cb_efl_event_del_count; unsigned short event_cb_efl_event_noref_count; + unsigned short event_cb_efl_event_invalidate_count; Eina_Bool callback_stopped : 1; Eina_Bool need_cleaning : 1; Eina_Bool allow_parent_unref : 1; // Allows unref to zero even with a parent @@ -1228,6 +1229,8 @@ _special_event_count_inc(Eo *obj_id, Efl_Object_Data *pd, const Efl_Callback_Arr CB_COUNT_INC(pd->event_cb_efl_event_noref_count); } + else if (it->desc == EFL_EVENT_INVALIDATE) + CB_COUNT_INC(pd->event_cb_efl_event_invalidate_count); else if (it->desc == EFL_EVENT_DESTRUCT) pd->has_destroyed_event_cb = EINA_TRUE; else if (it->desc == EFL_EVENT_OWNERSHIP_SHARED || it->desc == EFL_EVENT_OWNERSHIP_UNIQUE) @@ -1247,6 +1250,8 @@ _special_event_count_dec(Eo *obj_id, Efl_Object_Data *pd, const Efl_Callback_Arr CB_COUNT_DEC(pd->event_cb_efl_event_callback_del_count); else if (it->desc == EFL_EVENT_DEL) CB_COUNT_DEC(pd->event_cb_efl_event_del_count); + else if (it->desc == EFL_EVENT_INVALIDATE) + CB_COUNT_DEC(pd->event_cb_efl_event_invalidate_count); else if (it->desc == EFL_EVENT_NOREF) { CB_COUNT_DEC(pd->event_cb_efl_event_noref_count); @@ -1685,6 +1690,8 @@ _event_callback_call(Eo *obj_id, Efl_Object_Data *pd, (pd->event_cb_efl_event_callback_del_count == 0)) return EINA_FALSE; else if ((desc == EFL_EVENT_DEL) && (pd->event_cb_efl_event_del_count == 0)) return EINA_FALSE; + else if ((desc == EFL_EVENT_INVALIDATE) && + (pd->event_cb_efl_event_invalidate_count == 0)) return EINA_FALSE; else if ((desc == EFL_EVENT_NOREF) && (pd->event_cb_efl_event_noref_count == 0)) return EINA_FALSE;