From: Sung-Jin Park Date: Tue, 13 Jul 2021 12:44:13 +0000 (+0900) Subject: mmifw: implement mmi event listener add/remove api X-Git-Tag: submit/tizen/20210914.042010~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F25%2F264125%2F1;p=platform%2Fcore%2Fuifw%2Fmmi-framework.git mmifw: implement mmi event listener add/remove api Change-Id: I3452bea12cdcfb8bc932048800f8ade37d90d276 Signed-off-by: Sung-Jin Park --- diff --git a/src/mmifw.c b/src/mmifw.c index dbf8012..cc784fd 100644 --- a/src/mmifw.c +++ b/src/mmifw.c @@ -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 diff --git a/src/mmifw.h b/src/mmifw.h index 429bf2c..88399ce 100644 --- a/src/mmifw.h +++ b/src/mmifw.h @@ -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