From ca075ce21f9c267aa7186b96a6e4dc51d36c1206 Mon Sep 17 00:00:00 2001 From: Youngbok Shin Date: Sun, 22 Jan 2017 11:03:14 +0900 Subject: [PATCH] elementary conformant: clear internal pointer if holded object is deleted Summary: Set sd->scroller as NULL when the scroller object is deleted. It prevents error logs when elm_conform tries to delete resize callback function from deleted object. @fix Test Plan: N/A Reviewers: raster, cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4519 --- src/lib/elementary/elm_conform.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lib/elementary/elm_conform.c b/src/lib/elementary/elm_conform.c index ac1e6f4a53..0ca7c86a01 100644 --- a/src/lib/elementary/elm_conform.c +++ b/src/lib/elementary/elm_conform.c @@ -693,6 +693,15 @@ _on_content_resize(void *data, sd->show_region_job = ecore_job_add(_show_region_job, data); } +static void +_on_top_scroller_del(void *data, const Efl_Event *event) +{ + ELM_CONFORMANT_DATA_GET(data, sd); + + if (event->object == sd->scroller) + sd->scroller = NULL; +} + #endif #ifdef HAVE_ELEMENTARY_X @@ -721,13 +730,20 @@ _autoscroll_objects_update(void *data) if (top_scroller != sd->scroller) { if (sd->scroller) - evas_object_event_callback_del - (sd->scroller, EVAS_CALLBACK_RESIZE, _on_content_resize); + { + evas_object_event_callback_del_full + (sd->scroller, EVAS_CALLBACK_RESIZE, _on_content_resize, data); + efl_event_callback_del(sd->scroller, EFL_EVENT_DEL, _on_top_scroller_del, data); + } + sd->scroller = top_scroller; if (sd->scroller) - evas_object_event_callback_add - (sd->scroller, EVAS_CALLBACK_RESIZE, _on_content_resize, data); + { + evas_object_event_callback_add + (sd->scroller, EVAS_CALLBACK_RESIZE, _on_content_resize, data); + efl_event_callback_add(sd->scroller, EFL_EVENT_DEL, _on_top_scroller_del, data); + } } }