rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=6b3fa587f1c3a4c30e51ccf20265ddd57e6606de
commit 6b3fa587f1c3a4c30e51ccf20265ddd57e6606de Author: Vitalii Vorobiov <vi.vorob...@samsung.com> Date: Mon Mar 28 21:17:23 2016 +0300 demo: fix callback-leaks _eo_pointer_error() Obj (0x400002827000f6cf) is an invalid ref and so on, because callbacks weren't being deleted/removed from ap.win and they tried to work, while actual object they are working on is dead. @fix --- src/bin/ui/live_view/elementary/live_bg.c | 3 +++ src/bin/ui/live_view/elementary/live_bubble.c | 1 + src/bin/ui/live_view/elementary/live_button.c | 1 + src/bin/ui/live_view/elementary/live_calendar.c | 1 + src/bin/ui/live_view/elementary/live_check.c | 1 + src/bin/ui/live_view/elementary/live_clock.c | 1 + src/bin/ui/live_view/elementary/live_colorselector.c | 1 + src/bin/ui/live_view/elementary/live_ctxpopup.c | 1 + src/bin/ui/live_view/elementary/live_custom_layout.c | 1 + src/bin/ui/live_view/elementary/live_datetime.c | 1 + src/bin/ui/live_view/elementary/live_elementary_widgets.h | 14 ++++++++++++++ src/bin/ui/live_view/elementary/live_entry.c | 1 + src/bin/ui/live_view/elementary/live_frame.c | 12 ++++++++++++ src/bin/ui/live_view/elementary/live_gengrid.c | 12 ++++++++++++ src/bin/ui/live_view/elementary/live_genlist.c | 11 +++++++++++ src/bin/ui/live_view/elementary/live_label.c | 1 + src/bin/ui/live_view/elementary/live_layout.c | 1 + src/bin/ui/live_view/elementary/live_list.c | 12 ++++++++++++ src/bin/ui/live_view/elementary/live_multibuttonentry.c | 13 +++++++++++++ src/bin/ui/live_view/elementary/live_notify.c | 15 +++++++++++++++ src/bin/ui/live_view/elementary/live_panel.c | 1 + src/bin/ui/live_view/elementary/live_panes.c | 1 + src/bin/ui/live_view/elementary/live_popup.c | 12 ++++++++++++ src/bin/ui/live_view/elementary/live_progressbar.c | 1 + src/bin/ui/live_view/elementary/live_radio.c | 12 ++++++++++++ src/bin/ui/live_view/elementary/live_scroller.c | 13 +++++++++++++ src/bin/ui/live_view/elementary/live_segment_control.c | 12 ++++++++++++ src/bin/ui/live_view/elementary/live_separator.c | 1 + src/bin/ui/live_view/elementary/live_slider.c | 1 + src/bin/ui/live_view/elementary/live_spinner.c | 1 + src/bin/ui/live_view/elementary/live_toolbar.c | 1 + src/bin/ui/live_view/elementary/live_widget_common.c | 11 +++++++++++ 32 files changed, 171 insertions(+) diff --git a/src/bin/ui/live_view/elementary/live_bg.c b/src/bin/ui/live_view/elementary/live_bg.c index ac1aa8a..ce0ea37 100644 --- a/src/bin/ui/live_view/elementary/live_bg.c +++ b/src/bin/ui/live_view/elementary/live_bg.c @@ -19,6 +19,8 @@ #include "live_elementary_widgets.h" + + Evas_Object * widget_bg_create(Evas_Object *parent, const Group *group) { @@ -31,6 +33,7 @@ widget_bg_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_bubble.c b/src/bin/ui/live_view/elementary/live_bubble.c index dd8c0ee..39a9d35 100644 --- a/src/bin/ui/live_view/elementary/live_bubble.c +++ b/src/bin/ui/live_view/elementary/live_bubble.c @@ -53,6 +53,7 @@ widget_bubble_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_button.c b/src/bin/ui/live_view/elementary/live_button.c index 26393d4..eea6a73 100644 --- a/src/bin/ui/live_view/elementary/live_button.c +++ b/src/bin/ui/live_view/elementary/live_button.c @@ -31,6 +31,7 @@ widget_button_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_calendar.c b/src/bin/ui/live_view/elementary/live_calendar.c index 8f79b04..3a73c63 100644 --- a/src/bin/ui/live_view/elementary/live_calendar.c +++ b/src/bin/ui/live_view/elementary/live_calendar.c @@ -40,6 +40,7 @@ widget_calendar_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_check.c b/src/bin/ui/live_view/elementary/live_check.c index 603693a..f5a84ef 100644 --- a/src/bin/ui/live_view/elementary/live_check.c +++ b/src/bin/ui/live_view/elementary/live_check.c @@ -31,6 +31,7 @@ widget_check_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_clock.c b/src/bin/ui/live_view/elementary/live_clock.c index acb9d6c..2fc8e16 100644 --- a/src/bin/ui/live_view/elementary/live_clock.c +++ b/src/bin/ui/live_view/elementary/live_clock.c @@ -58,6 +58,7 @@ widget_clock_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_colorselector.c b/src/bin/ui/live_view/elementary/live_colorselector.c index eca771d..aa96b9d 100644 --- a/src/bin/ui/live_view/elementary/live_colorselector.c +++ b/src/bin/ui/live_view/elementary/live_colorselector.c @@ -48,6 +48,7 @@ widget_colorselector_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, style_name); diff --git a/src/bin/ui/live_view/elementary/live_ctxpopup.c b/src/bin/ui/live_view/elementary/live_ctxpopup.c index 533e970..3f998c2 100644 --- a/src/bin/ui/live_view/elementary/live_ctxpopup.c +++ b/src/bin/ui/live_view/elementary/live_ctxpopup.c @@ -215,6 +215,7 @@ widget_ctxpopup_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, list); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, list); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, list); + evas_object_event_callback_add(list, EVAS_CALLBACK_DEL, demo_object_del, NULL); return list; } diff --git a/src/bin/ui/live_view/elementary/live_custom_layout.c b/src/bin/ui/live_view/elementary/live_custom_layout.c index e722dd7..6f14402 100644 --- a/src/bin/ui/live_view/elementary/live_custom_layout.c +++ b/src/bin/ui/live_view/elementary/live_custom_layout.c @@ -38,6 +38,7 @@ layout_custom_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, obj); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, obj); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, obj); + evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, demo_object_del, NULL); return obj; } diff --git a/src/bin/ui/live_view/elementary/live_datetime.c b/src/bin/ui/live_view/elementary/live_datetime.c index f142dd4..158a8d5 100644 --- a/src/bin/ui/live_view/elementary/live_datetime.c +++ b/src/bin/ui/live_view/elementary/live_datetime.c @@ -31,6 +31,7 @@ widget_datetime_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); return object; diff --git a/src/bin/ui/live_view/elementary/live_elementary_widgets.h b/src/bin/ui/live_view/elementary/live_elementary_widgets.h index 6437d55..818afc8 100644 --- a/src/bin/ui/live_view/elementary/live_elementary_widgets.h +++ b/src/bin/ui/live_view/elementary/live_elementary_widgets.h @@ -45,6 +45,20 @@ Evas_Object * object_generate(Demo_Part *part, Evas_Object *object); /** + * Common object deletion handler which delete and remove all callbacks + * (related to setting swallow and text) attached to window. + * + * Most of fields are unused. No data or event is required at all. + * + * @ingroup Live_Elementary_Widgets + */ +void +demo_object_del(void *data, + Evas *evas, + Evas_Object *object, + void *event_info); + +/** * Common Swallow callback that is used in most of simple widgets. * * @param data data from callback register. diff --git a/src/bin/ui/live_view/elementary/live_entry.c b/src/bin/ui/live_view/elementary/live_entry.c index 4e20e7d..8cb805f 100644 --- a/src/bin/ui/live_view/elementary/live_entry.c +++ b/src/bin/ui/live_view/elementary/live_entry.c @@ -130,6 +130,7 @@ widget_entry_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); return object; } diff --git a/src/bin/ui/live_view/elementary/live_frame.c b/src/bin/ui/live_view/elementary/live_frame.c index 01ac974..b559956 100644 --- a/src/bin/ui/live_view/elementary/live_frame.c +++ b/src/bin/ui/live_view/elementary/live_frame.c @@ -102,6 +102,17 @@ _frame_send_signal(void *data, elm_layout_signal_emit(frame_obj, sig->sig_name, sig->source_name); } +void +_demo_frame_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_frame_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, _on_frame_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _frame_send_signal, object); +} + Evas_Object * widget_frame_create(Evas_Object *parent, const Group *group) { @@ -124,6 +135,7 @@ widget_frame_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_frame_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, _on_frame_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _frame_send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, _demo_frame_del, NULL); return object; } diff --git a/src/bin/ui/live_view/elementary/live_gengrid.c b/src/bin/ui/live_view/elementary/live_gengrid.c index f87b6c5..b09f489 100644 --- a/src/bin/ui/live_view/elementary/live_gengrid.c +++ b/src/bin/ui/live_view/elementary/live_gengrid.c @@ -199,6 +199,17 @@ _create_gengrid(Evas_Object *obj, Eina_Bool item_style, const char *style) } /*********** GEN GRID CREATING FUNCTIONS ****END*********/ +void +_demo_gengrid_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_gengrid_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, _on_gengrid_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _gengrid_send_signal, object); +} + Evas_Object * widget_gengrid_create(Evas_Object *parent, const Group *group) { @@ -217,6 +228,7 @@ widget_gengrid_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_gengrid_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, _on_gengrid_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _gengrid_send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, _demo_gengrid_del, NULL); evas_object_data_set(object, SWALLOW_LIST, swallow_list); evas_object_data_set(object, TEXT_LIST, text_list); diff --git a/src/bin/ui/live_view/elementary/live_genlist.c b/src/bin/ui/live_view/elementary/live_genlist.c index a946070..3425567 100644 --- a/src/bin/ui/live_view/elementary/live_genlist.c +++ b/src/bin/ui/live_view/elementary/live_genlist.c @@ -289,6 +289,16 @@ _create_genlist(Evas_Object *obj, const char *class, const char *style) } /*********** GEN LIST CREATING FUNCTIONS ****END*********/ +void +_demo_genlist_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_genlist_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, _on_genlist_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _genlist_send_signal, object); +} Evas_Object * widget_genlist_create(Evas_Object *parent, const Group *group) @@ -307,6 +317,7 @@ widget_genlist_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_genlist_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, _on_genlist_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _genlist_send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, _demo_genlist_del, NULL); evas_object_data_set(object, SWALLOW_LIST, swallow_list); evas_object_data_set(object, TEXT_LIST, text_list); diff --git a/src/bin/ui/live_view/elementary/live_label.c b/src/bin/ui/live_view/elementary/live_label.c index 249d75c..61fb305 100644 --- a/src/bin/ui/live_view/elementary/live_label.c +++ b/src/bin/ui/live_view/elementary/live_label.c @@ -35,6 +35,7 @@ widget_label_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_layout.c b/src/bin/ui/live_view/elementary/live_layout.c index f8e5183..7315273 100644 --- a/src/bin/ui/live_view/elementary/live_layout.c +++ b/src/bin/ui/live_view/elementary/live_layout.c @@ -33,6 +33,7 @@ widget_layout_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); return object; } diff --git a/src/bin/ui/live_view/elementary/live_list.c b/src/bin/ui/live_view/elementary/live_list.c index f01d09f..df0c255 100644 --- a/src/bin/ui/live_view/elementary/live_list.c +++ b/src/bin/ui/live_view/elementary/live_list.c @@ -99,6 +99,17 @@ _list_send_signal(void *data, } } +void +_demo_list_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_list_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, _on_list_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _list_send_signal, object); +} + Evas_Object * widget_list_create(Evas_Object *parent, const Group *group) { @@ -124,6 +135,7 @@ widget_list_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_list_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, _on_list_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _list_send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, _demo_list_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_multibuttonentry.c b/src/bin/ui/live_view/elementary/live_multibuttonentry.c index b63ad62..7c29c88 100644 --- a/src/bin/ui/live_view/elementary/live_multibuttonentry.c +++ b/src/bin/ui/live_view/elementary/live_multibuttonentry.c @@ -101,6 +101,17 @@ _multibutton_send_signal(void *data, } } +void +_demo_multibutton_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_multibutton_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, _on_multibutton_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _multibutton_send_signal, object); +} + Evas_Object * widget_multibuttonentry_create(Evas_Object *parent, const Group *group) { @@ -130,12 +141,14 @@ widget_multibuttonentry_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_multibutton_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, _on_multibutton_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _multibutton_send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, _demo_multibutton_del, NULL); } else /** on all other cases we need to apply changes to whole object */ { evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); } /** closed button is group used for showing collapsed multibuttonentry only */ diff --git a/src/bin/ui/live_view/elementary/live_notify.c b/src/bin/ui/live_view/elementary/live_notify.c index ae8e4c2..9ae1a7e 100644 --- a/src/bin/ui/live_view/elementary/live_notify.c +++ b/src/bin/ui/live_view/elementary/live_notify.c @@ -147,6 +147,19 @@ _on_click(void *data, evas_object_show(notify); } +void +_demo_noti_del(void *data, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + Evas_Object *bx = (Evas_Object *)data; + + evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_notify_swallow_check, bx); + evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); + evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _notify_send_signal, object); +} + Evas_Object * widget_notify_create(Evas_Object *parent, const Group *group) { @@ -178,6 +191,8 @@ widget_notify_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_notify_swallow_check, bx); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, noti); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _notify_send_signal, noti); + evas_object_event_callback_add(noti, EVAS_CALLBACK_DEL, _demo_noti_del, bx); + elm_object_style_set(noti, group->style); return object; } diff --git a/src/bin/ui/live_view/elementary/live_panel.c b/src/bin/ui/live_view/elementary/live_panel.c index 9cbbd79..078aa20 100644 --- a/src/bin/ui/live_view/elementary/live_panel.c +++ b/src/bin/ui/live_view/elementary/live_panel.c @@ -52,6 +52,7 @@ widget_panel_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_panes.c b/src/bin/ui/live_view/elementary/live_panes.c index 39b0ae0..30d5e1c 100644 --- a/src/bin/ui/live_view/elementary/live_panes.c +++ b/src/bin/ui/live_view/elementary/live_panes.c @@ -67,6 +67,7 @@ widget_panes_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_popup.c b/src/bin/ui/live_view/elementary/live_popup.c index 4ff8cfb..a4b0c42 100644 --- a/src/bin/ui/live_view/elementary/live_popup.c +++ b/src/bin/ui/live_view/elementary/live_popup.c @@ -104,6 +104,17 @@ _on_popup_swallow_check(void *data, eina_stringshare_del(title_swallow); } +void +_demo_popup_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_popup_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); +} + Evas_Object * widget_popup_create(Evas_Object *parent, const Group *group) { @@ -130,6 +141,7 @@ widget_popup_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_popup_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, _demo_popup_del, NULL); elm_object_style_set(object, style_name); eina_stringshare_del(style_name); diff --git a/src/bin/ui/live_view/elementary/live_progressbar.c b/src/bin/ui/live_view/elementary/live_progressbar.c index b82d766..1d5ce3b 100644 --- a/src/bin/ui/live_view/elementary/live_progressbar.c +++ b/src/bin/ui/live_view/elementary/live_progressbar.c @@ -34,6 +34,7 @@ widget_progressbar_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_radio.c b/src/bin/ui/live_view/elementary/live_radio.c index 16b645f..271e61d 100644 --- a/src/bin/ui/live_view/elementary/live_radio.c +++ b/src/bin/ui/live_view/elementary/live_radio.c @@ -99,6 +99,17 @@ _radio_send_signal(void *data, elm_layout_signal_emit(radio_obj, sig->sig_name, sig->source_name); } +void +_demo_radio_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_radio_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, _on_radio_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _radio_send_signal, object); +} + Evas_Object * widget_radio_create(Evas_Object *parent, const Group *group) { @@ -129,6 +140,7 @@ widget_radio_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_radio_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, _on_radio_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _radio_send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, _demo_radio_del, NULL); return object; } diff --git a/src/bin/ui/live_view/elementary/live_scroller.c b/src/bin/ui/live_view/elementary/live_scroller.c index d737090..c89d89e 100644 --- a/src/bin/ui/live_view/elementary/live_scroller.c +++ b/src/bin/ui/live_view/elementary/live_scroller.c @@ -85,6 +85,17 @@ _on_scroller_swallow_check(void *data, } } +void +_demo_scroller_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_scroller_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); +} + Evas_Object * widget_scroller_create(Evas_Object *parent, const Group *group) { @@ -102,11 +113,13 @@ widget_scroller_create(Evas_Object *parent, const Group *group) elm_entry_scrollable_set(object, true); if (strcmp(group->class, "entry_single") == 0) elm_entry_single_line_set(object, true); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); } else { object = elm_scroller_add(parent); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_scroller_swallow_check, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, _demo_scroller_del, NULL); } elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_segment_control.c b/src/bin/ui/live_view/elementary/live_segment_control.c index a19ae65..dcf8c01 100644 --- a/src/bin/ui/live_view/elementary/live_segment_control.c +++ b/src/bin/ui/live_view/elementary/live_segment_control.c @@ -103,6 +103,17 @@ _sc_send_signal(void *data, } } +void +_demo_sc_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_sc_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, _on_sc_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _sc_send_signal, object); +} + Evas_Object * widget_segment_control_create(Evas_Object *parent, const Group *group) { @@ -118,6 +129,7 @@ widget_segment_control_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, _on_sc_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, _on_sc_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, _sc_send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, _demo_sc_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_separator.c b/src/bin/ui/live_view/elementary/live_separator.c index 272333b..b5d4c26 100644 --- a/src/bin/ui/live_view/elementary/live_separator.c +++ b/src/bin/ui/live_view/elementary/live_separator.c @@ -57,6 +57,7 @@ widget_separator_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); return object; } diff --git a/src/bin/ui/live_view/elementary/live_slider.c b/src/bin/ui/live_view/elementary/live_slider.c index b978da3..249c22c 100644 --- a/src/bin/ui/live_view/elementary/live_slider.c +++ b/src/bin/ui/live_view/elementary/live_slider.c @@ -52,6 +52,7 @@ widget_slider_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, style_name); diff --git a/src/bin/ui/live_view/elementary/live_spinner.c b/src/bin/ui/live_view/elementary/live_spinner.c index 54afe84..9144d2d 100644 --- a/src/bin/ui/live_view/elementary/live_spinner.c +++ b/src/bin/ui/live_view/elementary/live_spinner.c @@ -36,6 +36,7 @@ widget_spinner_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); elm_object_style_set(object, group->style); diff --git a/src/bin/ui/live_view/elementary/live_toolbar.c b/src/bin/ui/live_view/elementary/live_toolbar.c index 5c03707..25abc5c 100644 --- a/src/bin/ui/live_view/elementary/live_toolbar.c +++ b/src/bin/ui/live_view/elementary/live_toolbar.c @@ -83,6 +83,7 @@ widget_toolbar_create(Evas_Object *parent, const Group *group) evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); evas_object_smart_callback_add(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); + evas_object_event_callback_add(object, EVAS_CALLBACK_DEL, demo_object_del, NULL); return object; } diff --git a/src/bin/ui/live_view/elementary/live_widget_common.c b/src/bin/ui/live_view/elementary/live_widget_common.c index d6f168e..1484e69 100644 --- a/src/bin/ui/live_view/elementary/live_widget_common.c +++ b/src/bin/ui/live_view/elementary/live_widget_common.c @@ -101,6 +101,17 @@ object_generate(Demo_Part *part, Evas_Object *object) } void +demo_object_del(void *data __UNUSED__, + Evas *evas __UNUSED__, + Evas_Object *object, + void *event_info __UNUSED__) +{ + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SWALLOW_SET, on_swallow_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_TEXT_SET, on_text_check, object); + evas_object_smart_callback_del_full(ap.win, SIGNAL_DEMO_SIGNAL_SEND, send_signal, object); +} + +void on_swallow_check(void *data, Evas_Object *obj __UNUSED__, void *ei __UNUSED__) --