Fix watch control and compositor API 39/91839/4 accepted/tizen/common/20161012.154249 accepted/tizen/ivi/20161012.065430 accepted/tizen/mobile/20161012.065415 accepted/tizen/tv/20161012.065419 accepted/tizen/wearable/20161012.065423 submit/tizen/20161012.022303
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 12 Oct 2016 00:36:37 +0000 (09:36 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Wed, 12 Oct 2016 02:03:53 +0000 (11:03 +0900)
- 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 <h.jhun@samsung.com>
watch-control/src/control.c
widget_toolkit/include/compositor.h
widget_toolkit/src/compositor.c

index d6d5479..a010917 100644 (file)
@@ -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);
index 59bb1d9..2e65fcb 100644 (file)
@@ -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);
index d5f89e0..df6b424 100644 (file)
@@ -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;