diff --git a/legacy/elementary/src/lib/elm_gengrid.c b/legacy/elementary/src/lib/elm_gengrid.c index f4fcb06837..913dc5050d 100644 --- a/legacy/elementary/src/lib/elm_gengrid.c +++ b/legacy/elementary/src/lib/elm_gengrid.c @@ -548,6 +548,9 @@ _elm_gengrid_item_unrealize(Elm_Gen_Item *it, it->realized = EINA_FALSE; it->want_unrealize = EINA_FALSE; + + elm_widget_item_track_cancel(it); + evas_event_thaw(evas_object_evas_get(WIDGET(it))); evas_event_thaw_eval(evas_object_evas_get(WIDGET(it))); } diff --git a/legacy/elementary/src/lib/elm_genlist.c b/legacy/elementary/src/lib/elm_genlist.c index 99da9915e7..5c1a7560b7 100644 --- a/legacy/elementary/src/lib/elm_genlist.c +++ b/legacy/elementary/src/lib/elm_genlist.c @@ -347,6 +347,9 @@ _elm_genlist_item_unrealize(Elm_Gen_Item *it, it->realized = EINA_FALSE; it->want_unrealize = EINA_FALSE; + + elm_widget_item_track_cancel(it); + evas_event_thaw(evas_object_evas_get(WIDGET(it))); evas_event_thaw_eval(evas_object_evas_get(WIDGET(it))); } diff --git a/legacy/elementary/src/lib/elm_widget.c b/legacy/elementary/src/lib/elm_widget.c index 4705412354..9cd945cb1e 100644 --- a/legacy/elementary/src/lib/elm_widget.c +++ b/legacy/elementary/src/lib/elm_widget.c @@ -5266,6 +5266,19 @@ _elm_widget_item_domain_part_text_translatable_set(Elm_Widget_Item *item, item->on_translate = EINA_FALSE; } +EAPI void +_elm_widget_item_track_cancel(Elm_Widget_Item *item) +{ + ELM_WIDGET_ITEM_CHECK_OR_RETURN(item); + + if (!item->track_obj) return; + + while (evas_object_ref_get(item->track_obj) > 0) + evas_object_unref(item->track_obj); + + evas_object_del(item->track_obj); +} + EAPI Evas_Object * elm_widget_item_track(Elm_Widget_Item *item) { diff --git a/legacy/elementary/src/lib/elm_widget.h b/legacy/elementary/src/lib/elm_widget.h index 6b65601136..fb85c2a488 100644 --- a/legacy/elementary/src/lib/elm_widget.h +++ b/legacy/elementary/src/lib/elm_widget.h @@ -776,6 +776,7 @@ EAPI void _elm_widget_item_domain_part_text_translatable_set(Elm_Wid EAPI Evas_Object *elm_widget_item_track(Elm_Widget_Item *item); EAPI void elm_widget_item_untrack(Elm_Widget_Item *item); EAPI int elm_widget_item_track_get(const Elm_Widget_Item *item); +EAPI void _elm_widget_item_track_cancel(Elm_Widget_Item *item); /** * Function to operate on a given widget's scrollabe children when necessary. @@ -999,9 +1000,16 @@ EAPI void elm_widget_tree_dot_dump(const Evas_Object *top, FILE *out #define elm_widget_item_del_pre_hook_set(item, func) \ _elm_widget_item_del_pre_hook_set((Elm_Widget_Item *)item, (Elm_Widget_Del_Pre_Cb)func) +/** + * Convenience function to query track_cancel. + * @see _elm_widget_item_del_pre_hook_set() + */ +#define elm_widget_item_track_cancel(item) \ + _elm_widget_item_track_cancel((Elm_Widget_Item *)item) + /** * Convenience function to query translate hook. - * @see _elm_widget_item_translate() + * @see _elm_widget_item_track_cancel() */ #define elm_widget_item_translate(item) \ _elm_widget_item_translate((Elm_Widget_Item *)item)