X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fmain.cpp;h=64836554732b36cb68ae3682fde41c6bf7802edb;hb=refs%2Fchanges%2F69%2F21169%2F1;hp=d0d79306060effc257037278c1ae24a6dfd0de63;hpb=c2110a3ec8fa74f2fc37e4909db547aa4a36c851;p=apps%2Fagl-service-windowmanager.git diff --git a/src/main.cpp b/src/main.cpp index d0d7930..6483655 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -56,7 +56,7 @@ int afb_instance::init() return this->wmgr.init(); } -int _binding_init() +static int _binding_init() { HMI_NOTICE("WinMan ver. %s", WINMAN_VERSION_STRING); @@ -78,7 +78,7 @@ error: return -1; } -int binding_init() noexcept +static int binding_init (afb_api_t api) noexcept { try { @@ -110,21 +110,20 @@ static void cbRemoveClientCtxt(void *data) delete ctxt; } -static void createSecurityContext(afb_req req, const char* appid, const char* role) +static void createSecurityContext(afb_req_t req, const char* appid, const char* role) { WMClientCtxt *ctxt = (WMClientCtxt *)afb_req_context_get(req); if (!ctxt) { // Create Security Context at first time - const char *new_role = g_afb_instance->wmgr.convertRoleOldToNew(role); - WMClientCtxt *ctxt = new WMClientCtxt(appid, new_role); + WMClientCtxt *ctxt = new WMClientCtxt(appid, role); HMI_DEBUG("create session for %s", ctxt->name.c_str()); afb_req_session_set_LOA(req, 1); afb_req_context_set(req, ctxt, cbRemoveClientCtxt); } } -void windowmanager_requestsurface(afb_req req) noexcept +void windowmanager_requestsurface(afb_req_t req) noexcept { std::lock_guard guard(binding_m); if (g_afb_instance == nullptr) @@ -170,7 +169,7 @@ void windowmanager_requestsurface(afb_req req) noexcept } } -void windowmanager_requestsurfacexdg(afb_req req) noexcept +void windowmanager_requestsurfacexdg(afb_req_t req) noexcept { std::lock_guard guard(binding_m); if (g_afb_instance == nullptr) @@ -223,7 +222,7 @@ void windowmanager_requestsurfacexdg(afb_req req) noexcept } } -void windowmanager_activatewindow(afb_req req) noexcept +void windowmanager_activatewindow(afb_req_t req) noexcept { std::lock_guard guard(binding_m); if (g_afb_instance == nullptr) @@ -273,7 +272,7 @@ void windowmanager_activatewindow(afb_req req) noexcept } } -void windowmanager_deactivatewindow(afb_req req) noexcept +void windowmanager_deactivatewindow(afb_req_t req) noexcept { std::lock_guard guard(binding_m); if (g_afb_instance == nullptr) @@ -316,7 +315,7 @@ void windowmanager_deactivatewindow(afb_req req) noexcept } } -void windowmanager_enddraw(afb_req req) noexcept +void windowmanager_enddraw(afb_req_t req) noexcept { std::lock_guard guard(binding_m); if (g_afb_instance == nullptr) @@ -350,7 +349,7 @@ void windowmanager_enddraw(afb_req req) noexcept } } -void windowmanager_getdisplayinfo_thunk(afb_req req) noexcept +void windowmanager_getdisplayinfo_thunk(afb_req_t req) noexcept { std::lock_guard guard(binding_m); if (g_afb_instance == nullptr) @@ -377,7 +376,7 @@ void windowmanager_getdisplayinfo_thunk(afb_req req) noexcept } } -void windowmanager_getareainfo_thunk(afb_req req) noexcept +void windowmanager_getareainfo_thunk(afb_req_t req) noexcept { std::lock_guard guard(binding_m); if (g_afb_instance == nullptr) @@ -414,7 +413,74 @@ void windowmanager_getareainfo_thunk(afb_req req) noexcept } } -void windowmanager_wm_subscribe(afb_req req) noexcept +void windowmanager_get_area_list(afb_req_t req) noexcept +{ + std::lock_guard guard(binding_m); + json_object* ret = g_afb_instance->wmgr.api_get_area_list(); + afb_req_success(req, ret, nullptr); +} + +void windowmanager_change_area_size(afb_req_t req) noexcept +{ + std::lock_guard guard(binding_m); + if (g_afb_instance == nullptr) + { + afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); + return; + } + + char* appid = afb_req_get_application_id(req); + if(appid) + { + ChangeAreaReq change_req; + change_req.appname = appid; + change_req.save = false; + json_object *jreq = afb_req_json(req); + json_object *jsave, *jareas; + HMI_INFO("json_check, %s", json_object_get_string(jreq)); + if(json_object_object_get_ex(jreq, "save", &jsave)) + { + change_req.save = json_object_get_boolean(jsave); + } + if (json_object_object_get_ex(jreq, "areas", &jareas)) + { + int size = json_object_array_length(jareas); + for(int i = 0; i < size; i++) + { + json_object* elem = json_object_array_get_idx(jareas, i); + struct rect rect; + std::string name = jh::getStringFromJson(elem, "name"); + json_object* jrect; + if(json_object_object_get_ex(elem, "rect", &jrect)) + { + rect.x = jh::getIntFromJson(jrect, "x"); + rect.y = jh::getIntFromJson(jrect, "y"); + rect.w = jh::getIntFromJson(jrect, "w"); + rect.h = jh::getIntFromJson(jrect, "h"); + } + else + { + HMI_ERROR("bad request @area name :%s", name.c_str()); + afb_req_fail(req, "failed", "bad request"); + return; + } + change_req.area_req[name] = rect; + } + if(change_req.area_req.size() != 0) + { + g_afb_instance->wmgr.api_change_area_size(change_req); + } + afb_req_success(req, nullptr, nullptr); + } + free(appid); + } + else + { + afb_req_fail(req, "failed", nullptr); + } +} + +void windowmanager_wm_subscribe(afb_req_t req) noexcept { std::lock_guard guard(binding_m); if (g_afb_instance == nullptr) @@ -432,10 +498,10 @@ void windowmanager_wm_subscribe(afb_req req) noexcept afb_req_fail(req, "failed", "Need char const* argument event"); return; } - int event_id = json_object_get_int(j); - int ret = g_afb_instance->wmgr.api_subscribe(req, event_id); + wm::WindowManager::EventType event_id = (wm::WindowManager::EventType)json_object_get_int(j); + bool ret = g_afb_instance->wmgr.api_subscribe(req, event_id); - if (ret) + if (!ret) { afb_req_fail(req, "failed", "Error: afb_req_subscribe()"); return; @@ -449,7 +515,7 @@ void windowmanager_wm_subscribe(afb_req req) noexcept } } -void windowmanager_ping(afb_req req) noexcept +void windowmanager_ping(afb_req_t req) noexcept { std::lock_guard guard(binding_m); @@ -464,7 +530,7 @@ void windowmanager_ping(afb_req req) noexcept } } -void windowmanager_debug_terminate(afb_req req) noexcept +void windowmanager_debug_terminate(afb_req_t req) noexcept { std::lock_guard guard(binding_m); if (g_afb_instance == nullptr) @@ -491,18 +557,32 @@ void windowmanager_debug_terminate(afb_req req) noexcept } } -const struct afb_verb_v2 windowmanager_verbs[] = { - {"requestSurface", windowmanager_requestsurface, nullptr, nullptr, AFB_SESSION_NONE}, - {"requestSurfaceXDG", windowmanager_requestsurfacexdg, nullptr, nullptr, AFB_SESSION_NONE}, - {"activateWindow", windowmanager_activatewindow, nullptr, nullptr, AFB_SESSION_NONE}, - {"deactivateWindow", windowmanager_deactivatewindow, nullptr, nullptr, AFB_SESSION_NONE}, - {"endDraw", windowmanager_enddraw, nullptr, nullptr, AFB_SESSION_NONE}, - {"getDisplayInfo", windowmanager_getdisplayinfo_thunk, nullptr, nullptr, AFB_SESSION_NONE}, - {"getAreaInfo", windowmanager_getareainfo_thunk, nullptr, nullptr, AFB_SESSION_NONE}, - {"wm_subscribe", windowmanager_wm_subscribe, nullptr, nullptr, AFB_SESSION_NONE}, - {"ping", windowmanager_ping, nullptr, nullptr, AFB_SESSION_NONE}, - {"debug_terminate", windowmanager_debug_terminate, nullptr, nullptr, AFB_SESSION_NONE}, - {}}; - -extern "C" const struct afb_binding_v2 afbBindingV2 = { - "windowmanager", nullptr, nullptr, windowmanager_verbs, nullptr, binding_init, nullptr, 0}; +const afb_verb_t windowmanager_verbs[] = { + { .verb = "requestSurface", .callback = windowmanager_requestsurface }, + { .verb = "requestSurfaceXDG", .callback = windowmanager_requestsurfacexdg }, + { .verb = "activateWindow", .callback = windowmanager_activatewindow }, + { .verb = "deactivateWindow", .callback = windowmanager_deactivatewindow }, + { .verb = "endDraw", .callback = windowmanager_enddraw }, + { .verb = "getDisplayInfo", .callback = windowmanager_getdisplayinfo_thunk }, + { .verb = "getAreaInfo", .callback = windowmanager_getareainfo_thunk }, + { .verb = "changeAreaSize", .callback = windowmanager_change_area_size }, + { .verb = "getAreaList", .callback = windowmanager_get_area_list }, + { .verb = "wm_subscribe", .callback = windowmanager_wm_subscribe }, + { .verb = "ping", .callback = windowmanager_ping }, + { .verb = "debug_terminate", .callback = windowmanager_debug_terminate }, + {} }; + +extern "C" const afb_binding_t afbBindingExport = { + .api = "windowmanager", + .specification = "windowmanager", + .info = "windowmanager", + .verbs = windowmanager_verbs, + .preinit = nullptr, + .init = binding_init, + .onevent = nullptr, + .userdata = nullptr, + .provide_class = nullptr, + .require_class = nullptr, + .require_api = nullptr, + .noconcurrency = 0 +};