Delete ecore event handler in demo application 20/45820/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Tue, 11 Aug 2015 12:42:52 +0000 (21:42 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Tue, 11 Aug 2015 13:24:46 +0000 (22:24 +0900)
Change-Id: I1044045eda262feb17332504bd46717c07146717

ism/demos/include/isf_demo_efl.h
ism/demos/isf_demo_efl.cpp
ism/demos/isf_layout_efl.cpp

index 27f2914..6cdf912 100644 (file)
@@ -47,6 +47,9 @@ struct appdata {
     Evas_Object *naviframe;
     Evas_Object *menu_popup;
 
+    Ecore_Event_Handler *key_down_handler;
+    Ecore_Event_Handler *key_up_handler;
+
     int is_frameview;
 
     // Add more variables here
index ec3926e..19f3c55 100644 (file)
@@ -362,8 +362,8 @@ static int app_create (void *data)
     appcore_set_event_callback (APPCORE_EVENT_LANG_CHANGE,
                                 lang_changed, ad);
 
-    ecore_event_handler_add (ECORE_EVENT_KEY_DOWN, _keydown_event, ad);
-    ecore_event_handler_add (ECORE_EVENT_KEY_UP, _keyup_event, ad);
+    ad->key_down_handler = ecore_event_handler_add (ECORE_EVENT_KEY_DOWN, _keydown_event, ad);
+    ad->key_up_handler = ecore_event_handler_add (ECORE_EVENT_KEY_UP, _keyup_event, ad);
 
     appcore_measure_time ();
 
@@ -373,6 +373,17 @@ static int app_create (void *data)
 static int app_exit (void *data)
 {
     struct appdata *ad = (struct appdata *)data;
+
+    if (ad->key_down_handler) {
+        ecore_event_handler_del (ad->key_down_handler);
+        ad->key_down_handler = NULL;
+    }
+
+    if (ad->key_up_handler) {
+        ecore_event_handler_del (ad->key_up_handler);
+        ad->key_up_handler = NULL;
+    }
+
     if (ad->li != NULL) {
         evas_object_del (ad->li);
         ad->li = NULL;
index 7767b30..b262d16 100644 (file)
@@ -29,6 +29,8 @@
 #endif
 
 #ifndef WAYLAND
+static Ecore_Event_Handler *prop_handler = NULL;
+
 static void _back_key_cb (void *data, Evas_Object *obj, void *event_info)
 {
     ecore_x_test_fake_key_press ("XF86Back");
@@ -146,6 +148,7 @@ _prop_change_cb (void *data, int type, void *event)
 {
     Ecore_X_Event_Window_Property *ev;
     ev = (Ecore_X_Event_Window_Property *)event;
+    if (!ev) return ECORE_CALLBACK_PASS_ON;
 
     if (ev->atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE) {
         LOGD ("[ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE] ");
@@ -204,6 +207,15 @@ static Evas_Object *_create_ef_layout (Evas_Object *parent, const char *label, c
     return ef;
 }
 
+static void
+_layout_del_cb (void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+    if (prop_handler) {
+        ecore_event_handler_del (prop_handler);
+        prop_handler = NULL;
+    }
+}
+
 static Evas_Object * create_inner_layout (void *data)
 {
     struct appdata *ad = (struct appdata *)data;
@@ -302,9 +314,11 @@ static Evas_Object * create_inner_layout (void *data)
     elm_box_pack_end (bx, rotate_btn);
 
 #ifndef WAYLAND
-    ecore_event_handler_add (ECORE_X_EVENT_WINDOW_PROPERTY, _prop_change_cb, NULL);
+    prop_handler = ecore_event_handler_add (ECORE_X_EVENT_WINDOW_PROPERTY, _prop_change_cb, NULL);
 #endif
 
+    evas_object_event_callback_add (bx, EVAS_CALLBACK_DEL, _layout_del_cb, NULL);
+
     return bx;
 }