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__)

-- 


Reply via email to