diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c index b550f4e2cd..cf5bdaa4ad 100644 --- a/src/lib/elementary/elm_gengrid.c +++ b/src/lib/elementary/elm_gengrid.c @@ -1264,7 +1264,10 @@ _elm_gengrid_item_unrealize(Elm_Gen_Item *it, elm_wdg_item_track_cancel(EO_OBJ(it)); if (!calc) - efl_event_callback_legacy_call(WIDGET(it), ELM_GENGRID_EVENT_UNREALIZED, EO_OBJ(it)); + { + if (it->base->func.unrealized) it->base->func.unrealized(EO_OBJ(it)); + efl_event_callback_legacy_call(WIDGET(it), ELM_GENGRID_EVENT_UNREALIZED, EO_OBJ(it)); + } it->unrealize_cb(it); @@ -1973,6 +1976,7 @@ _item_place(Elm_Gen_Item *it, if (!was_realized) { _elm_gengrid_item_index_update(it); + if (it->base->func.realized) it->base->func.realized(EO_OBJ(it)); efl_event_callback_legacy_call (WIDGET(it), ELM_GENGRID_EVENT_REALIZED, EO_OBJ(it)); _flush_focus_on_realization(WIDGET(it), it); @@ -2179,6 +2183,7 @@ _group_item_place(Elm_Gengrid_Pan_Data *psd) if (!was_realized) { _elm_gengrid_item_index_update(it); + if (it->base->func.realized) it->base->func.realized(EO_OBJ(it)); efl_event_callback_legacy_call (WIDGET(it), ELM_GENGRID_EVENT_REALIZED, EO_OBJ(it)); _flush_focus_on_realization(WIDGET(it), it); diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c index d6125594fe..a00bef3480 100644 --- a/src/lib/elementary/elm_genlist.c +++ b/src/lib/elementary/elm_genlist.c @@ -716,7 +716,10 @@ _elm_genlist_item_unrealize(Elm_Gen_Item *it, elm_wdg_item_track_cancel(EO_OBJ(it)); if (!calc) - efl_event_callback_legacy_call(WIDGET(it), ELM_GENLIST_EVENT_UNREALIZED, EO_OBJ(it)); + { + if (it->base->func.unrealized) it->base->func.unrealized(EO_OBJ(it)); + efl_event_callback_legacy_call(WIDGET(it), ELM_GENLIST_EVENT_UNREALIZED, EO_OBJ(it)); + } _item_unrealize(it); @@ -2053,6 +2056,7 @@ _item_realize(Elm_Gen_Item *it, const int index, Eina_Bool calc) } + if (it->base->func.realized) it->base->func.realized(EO_OBJ(it)); efl_event_callback_legacy_call(WIDGET(it), ELM_GENLIST_EVENT_REALIZED, EO_OBJ(it)); } diff --git a/src/lib/elementary/elm_widget.h b/src/lib/elementary/elm_widget.h index 88e3ff6b39..233c526ddc 100644 --- a/src/lib/elementary/elm_widget.h +++ b/src/lib/elementary/elm_widget.h @@ -585,6 +585,11 @@ struct _Elm_Widget_Item_Data Eina_Hash *labels; Evas_Object *track_obj; + struct { + void (*realized) (Eo *obj); + void (*unrealized) (Eo *obj); + } func; + Eina_Bool disabled : 1; Eina_Bool on_deletion : 1; Eina_Bool on_translate : 1; diff --git a/src/lib/elementary/elm_widget_item_static_focus.c b/src/lib/elementary/elm_widget_item_static_focus.c index f040cbcf4c..cb8d10bcd0 100644 --- a/src/lib/elementary/elm_widget_item_static_focus.c +++ b/src/lib/elementary/elm_widget_item_static_focus.c @@ -27,43 +27,35 @@ _realized_set(Elm_Widget_Item_Static_Focus *f) } static void -_list_realized_cb(void *data, const Efl_Event *ev) +_list_realized_cb(Eo *obj) { - if (ev->info != data) return; + _realized_set(obj); - _realized_set(data); - - if (!elm_object_item_disabled_get(data) && - elm_genlist_item_type_get(data) != ELM_GENLIST_ITEM_GROUP) - efl_ui_focus_object_setup_order(data); + if (!elm_object_item_disabled_get(obj) && + elm_genlist_item_type_get(obj) != ELM_GENLIST_ITEM_GROUP) + efl_ui_focus_object_setup_order(obj); } static void -_grid_realized_cb(void *data, const Efl_Event *ev) +_grid_realized_cb(Eo *obj) { const Elm_Gen_Item_Class *itc; Eina_Bool is_group = EINA_FALSE; - if (ev->info != data) return; + _realized_set(obj); - _realized_set(data); - - itc = elm_gengrid_item_item_class_get(data); + itc = elm_gengrid_item_item_class_get(obj); is_group = (itc && itc->item_style && !strcmp(itc->item_style, "group_index")); - if (!elm_object_item_disabled_get(data) && !is_group) - { - efl_ui_focus_object_setup_order(data); - } + if (!elm_object_item_disabled_get(obj) && !is_group) + efl_ui_focus_object_setup_order(obj); } static void -_unrealized_cb(void *data, const Efl_Event *ev EINA_UNUSED) +_unrealized_cb(Eo *obj) { - Elm_Widget_Item_Static_Focus_Data *pd = efl_data_scope_get(data, MY_CLASS); - - if (ev->info != data) return; + Elm_Widget_Item_Static_Focus_Data *pd = efl_data_scope_get(obj, MY_CLASS); if (pd) /* if the obect is dead pd is NULL */ { @@ -145,15 +137,10 @@ _elm_widget_item_static_focus_efl_object_constructor(Eo *obj, Elm_Widget_Item_St Eo *ret = efl_constructor(efl_super(obj, MY_CLASS)); if (efl_isa(wpd->widget, ELM_GENLIST_CLASS)) - { - efl_event_callback_add(wpd->widget, ELM_GENLIST_EVENT_REALIZED, _list_realized_cb, obj); - efl_event_callback_add(wpd->widget, ELM_GENLIST_EVENT_UNREALIZED, _unrealized_cb, obj); - } + wpd->func.realized = _list_realized_cb; else - { - efl_event_callback_add(wpd->widget, ELM_GENGRID_EVENT_REALIZED, _grid_realized_cb, obj); - efl_event_callback_add(wpd->widget, ELM_GENGRID_EVENT_UNREALIZED, _unrealized_cb, obj); - } + wpd->func.realized = _grid_realized_cb; + wpd->func.unrealized = _unrealized_cb; return ret; } @@ -161,17 +148,8 @@ EOLIAN static void _elm_widget_item_static_focus_efl_object_destructor(Eo *obj, Elm_Widget_Item_Static_Focus_Data *pd EINA_UNUSED) { Elm_Widget_Item_Data *wpd = efl_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS); - if (efl_isa(wpd->widget, ELM_GENLIST_CLASS)) - { - efl_event_callback_del(wpd->widget, ELM_GENLIST_EVENT_REALIZED, _list_realized_cb, obj); - efl_event_callback_del(wpd->widget, ELM_GENLIST_EVENT_UNREALIZED, _unrealized_cb, obj); - } - else - { - efl_event_callback_del(wpd->widget, ELM_GENGRID_EVENT_REALIZED, _grid_realized_cb, obj); - efl_event_callback_del(wpd->widget, ELM_GENGRID_EVENT_UNREALIZED, _unrealized_cb, obj); - } - + wpd->func.realized = NULL; + wpd->func.unrealized = NULL; if (pd->adapter) efl_del(pd->adapter);