-void windowmanager_requestsurface(afb_req req) noexcept {
- std::lock_guard<std::mutex> guard(binding_m);
- #ifdef ST
- ST();
- #endif
- if (g_afb_instance == nullptr) {
- afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?");
- return;
- }
-
- try {
- const char* a_drawing_name = afb_req_value(req, "drawing_name");
- if(!a_drawing_name){
- afb_req_fail(req, "failed", "Need char const* argument drawing_name");
- return;
- }
-
- /* Create Security Context */
- bool isFirstReq = checkFirstReq(req);
- if(!isFirstReq){
- wmClientCtxt* ctxt = (wmClientCtxt*)afb_req_context_get(req);
- HMI_DEBUG("wm", "You're %s.", ctxt->name.c_str());
- if(ctxt->name != std::string(a_drawing_name)){
- afb_req_fail_f(req, "failed", "Dont request with other name: %s for now", a_drawing_name);
- HMI_DEBUG("wm", "Don't request with other name: %s for now", a_drawing_name);
- return;
- }
- }
-
- auto ret = g_afb_instance->app.api_request_surface(a_drawing_name);
-
- if(isFirstReq){
- wmClientCtxt* ctxt = new wmClientCtxt(a_drawing_name);
- HMI_DEBUG("wm", "create session for %s", ctxt->name.c_str());
- afb_req_session_set_LOA(req, 1);
- afb_req_context_set(req, ctxt, cbRemoveClientCtxt);
- }
- else{
- HMI_DEBUG("wm", "session already created for %s", a_drawing_name);
- }
-
- if (ret.is_err()) {
- afb_req_fail(req, "failed", ret.unwrap_err());
- return;
- }
-
- afb_req_success(req, json_object_new_int(ret.unwrap()), "success");
-
- } catch (std::exception &e) {
- afb_req_fail_f(req, "failed", "Uncaught exception while calling requestsurface: %s", e.what());
- return;
- }
-
-}
-
-void windowmanager_requestsurfacexdg(afb_req req) noexcept {
- std::lock_guard<std::mutex> guard(binding_m);
- #ifdef ST
- ST();
- #endif
- if (g_afb_instance == nullptr) {
- afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?");
- return;
- }
-
- try {
- json_object *jreq = afb_req_json(req);
-
- json_object *j_drawing_name = nullptr;
- if (! json_object_object_get_ex(jreq, "drawing_name", &j_drawing_name)) {
- afb_req_fail(req, "failed", "Need char const* argument drawing_name");
- return;
- }
- char const* a_drawing_name = json_object_get_string(j_drawing_name);
-
- json_object *j_ivi_id = nullptr;
- if (! json_object_object_get_ex(jreq, "ivi_id", &j_ivi_id)) {
- afb_req_fail(req, "failed", "Need char const* argument ivi_id");
- return;
- }
- char const* a_ivi_id = json_object_get_string(j_ivi_id);
-
- auto ret = g_afb_instance->app.api_request_surface(a_drawing_name, a_ivi_id);
- if (ret != nullptr) {
- afb_req_fail(req, "failed", ret);
- return;
- }
-
- afb_req_success(req, NULL, "success");
- } catch (std::exception &e) {
- afb_req_fail_f(req, "failed", "Uncaught exception while calling requestsurfacexdg: %s", e.what());
- return;
- }
-}