From: Hwankyu Jhun Date: Wed, 12 Oct 2016 00:36:37 +0000 (+0900) Subject: Fix watch control and compositor API X-Git-Tag: accepted/tizen/common/20161012.154249^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=96fa4ee76d8847df09d499c3e90d99f7530ef4b9;p=platform%2Fcore%2Fappfw%2Fwidget-viewer.git Fix watch control and compositor API - Reuse the compositor handler if it already exists - Unset the compositor handler while calling watch_manager_send_terminate() Change-Id: I9435362025ba687024a881a578ff0f4c3c156140 Signed-off-by: Hwankyu Jhun --- diff --git a/watch-control/src/control.c b/watch-control/src/control.c index d6d5479..a010917 100644 --- a/watch-control/src/control.c +++ b/watch-control/src/control.c @@ -136,6 +136,7 @@ static void __pepper_cb(const char *app_id, const char *event, Evas_Object *obj, API int watch_manager_send_terminate(Evas_Object *watch) { int pid = _compositor_get_pid(watch); + char appid[256] = {0,}; int r; if (pid < 1) { @@ -143,6 +144,10 @@ API int watch_manager_send_terminate(Evas_Object *watch) return -1; } + r = aul_app_get_appid_bypid(pid, appid, sizeof(appid)); + if (r == 0) + _compositor_unset_handler(appid); + r = aul_terminate_pid(pid); if (r < 0) { _E("failed to terminate pid:%d (%d)", pid, r); diff --git a/widget_toolkit/include/compositor.h b/widget_toolkit/include/compositor.h index 59bb1d9..2e65fcb 100644 --- a/widget_toolkit/include/compositor.h +++ b/widget_toolkit/include/compositor.h @@ -35,7 +35,7 @@ typedef void (*_compositor_handler_cb)(const char *app_id, const char *event, Ev const char *_compositor_init(Evas_Object *win); void _compositor_fini(); int _compositor_set_handler(const char *app_id, _compositor_handler_cb cb, void *data); -int _compositor_unser_handler(const char *app_id); +int _compositor_unset_handler(const char *app_id); const char *_compositor_get_title(Evas_Object *obj); const char *_compositor_get_app_id(Evas_Object *obj); int _compositor_get_pid(Evas_Object *obj); diff --git a/widget_toolkit/src/compositor.c b/widget_toolkit/src/compositor.c index d5f89e0..df6b424 100644 --- a/widget_toolkit/src/compositor.c +++ b/widget_toolkit/src/compositor.c @@ -109,7 +109,6 @@ static void __obj_deleted_cb(void *data, Evas_Object *obj, void *event_info) } app_id = pepper_efl_object_app_id_get((Evas_Object *)event_info); - if (app_id) { _D("get object:%s", app_id); handler = g_hash_table_lookup(__appid_tbl, app_id); @@ -134,6 +133,9 @@ static void __obj_deleted_cb(void *data, Evas_Object *obj, void *event_info) if (handler->cb) handler->cb(handler->app_id, "removed", removed, handler->data); + + if (app_id) + g_hash_table_remove(__appid_tbl, app_id); } static void __handler_free(gpointer val) @@ -220,11 +222,20 @@ API void _compositor_fini() API int _compositor_set_handler(const char *app_id, _compositor_handler_cb cb, void *data) { struct compositor_handler *handler; + if (!app_id || !cb) { _E("inavlid parameter"); return -1; } + handler = g_hash_table_lookup(__appid_tbl, app_id); + if (handler) { + _E("%s already exsits", app_id); + handler->cb = cb; + handler->data = data; + return 0; + } + handler = (struct compositor_handler *)g_malloc0(sizeof(struct compositor_handler)); if (!handler) { _E("out of memory"); @@ -236,7 +247,6 @@ API int _compositor_set_handler(const char *app_id, _compositor_handler_cb cb, v handler->data = data; handler->freeze = 0; - g_hash_table_remove(__appid_tbl, app_id); g_hash_table_insert(__appid_tbl, handler->app_id, handler); return 0;