API int watch_manager_send_terminate(Evas_Object *watch)
{
int pid = _compositor_get_pid(watch);
+ char appid[256] = {0,};
int r;
if (pid < 1) {
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);
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);
}
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);
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)
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");
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;