mmifw: implement mmi event listener add/remove api 25/264125/1
authorSung-Jin Park <sj76.park@samsung.com>
Tue, 13 Jul 2021 12:44:13 +0000 (21:44 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Mon, 13 Sep 2021 12:14:42 +0000 (21:14 +0900)
Change-Id: I3452bea12cdcfb8bc932048800f8ade37d90d276
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
src/mmifw.c
src/mmifw.h

index dbf8012..cc784fd 100644 (file)
@@ -36,6 +36,7 @@ int MMI_EVENT_ACTION;
 int MMI_EVENT_FEEDBACK;
 
 static int _mmi_init_count = 0;
+Eina_List *listener_list = NULL;
 
 MMIFW_API int
 mmi_init(void)
@@ -45,6 +46,18 @@ mmi_init(void)
 
        ecore_init();
 
+       Eina_List *l = NULL;
+       mmi_event_listener *listener = NULL;
+
+       if (listener_list)
+       {
+               EINA_LIST_FOREACH(listener_list, l, listener)
+                       ecore_event_handler_del(listener);
+
+               listener_list = eina_list_free(listener_list);
+               listener_list = NULL;
+       }
+
        MMI_EVENT_FOCUS = ecore_event_type_new();
        MMI_EVENT_STATE_CHANGE = ecore_event_type_new();
        MMI_EVENT_WAKE_UP = ecore_event_type_new();
@@ -80,6 +93,18 @@ mmi_shutdown(void)
        MMI_EVENT_ACTION = -1;
        MMI_EVENT_FEEDBACK = -1;
 
+       Eina_List *l = NULL;
+       mmi_event_listener *listener = NULL;
+
+       if (listener_list)
+       {
+               EINA_LIST_FOREACH(listener_list, l, listener)
+                       ecore_event_handler_del(listener);
+
+               listener_list = eina_list_free(listener_list);
+               listener_list = NULL;
+       }
+
        ecore_shutdown();
        return _mmi_init_count;
 }
@@ -122,10 +147,9 @@ mmi_event_add_listener(mmi_handle h, int ev_type, mmi_event_handler_cb func, con
        mmi_event_listener *listener;
 
        (void) h;
-       (void) ev_type;
-       (void) func;
-       (void) data;
 
+       listener = ecore_event_handler_add(ev_type, func, data);
+       listener_list = eina_list_append(listener_list, listener);
        return listener;
 }
 
@@ -180,19 +204,30 @@ mmi_request_send_set_state(mmi_handle h, mmi_state state)
        return res;
 }
 
-MMIFW_API void *
+MMIFW_API void
 mmi_event_remove_listener(mmi_handle h, mmi_event_listener *listener)
 {
        (void) h;
-       (void) listener;
 
-       return (void *)0;
+       if (listener_list)
+               listener_list = eina_list_remove(listener_list, listener);
+       if (listener)
+               ecore_event_handler_del(listener);
 }
 
 MMIFW_API void
 mmi_event_remove_all_listeners(mmi_handle h)
 {
+       Eina_List *l = NULL;
+       mmi_event_listener *listener = NULL;
+
        (void) h;
+
+       EINA_LIST_FOREACH(listener_list, l, listener)
+               ecore_event_handler_del(listener);
+
+       listener_list = eina_list_free(listener_list);
+       listener_list = NULL;
 }
 
 MMIFW_API void
index 429bf2c..88399ce 100644 (file)
@@ -86,7 +86,7 @@ MMIFW_API mmi_event_listener *mmi_event_add_listener(mmi_handle h, int ev_type,
 MMIFW_API mmi_result mmi_request_send_get_focus(mmi_handle h);
 MMIFW_API mmi_state mmi_state_get_current_state(mmi_handle h);
 MMIFW_API mmi_result mmi_request_send_set_state(mmi_handle h, mmi_state state);
-MMIFW_API void *mmi_event_remove_listener(mmi_handle h, mmi_event_listener *listener);
+MMIFW_API void mmi_event_remove_listener(mmi_handle h, mmi_event_listener *listener);
 MMIFW_API void mmi_event_remove_all_listeners(mmi_handle h);
 
 #ifdef __cplusplus