Add "request_surface_id" option
[apps/agl-service-windowmanager-2017.git] / src / main.cpp
index 5141def..c45f39f 100644 (file)
@@ -520,31 +520,35 @@ void windowmanager_attach_app(afb_req req) noexcept
     if(appid)
     {
         json_object *jreq = afb_req_json(req);
-        json_object *j_dest, *j_id; // Do not free this. binder frees jreq, then free j_ro
+        json_object *j_dest, *j_id, *j_req_sid; // Do not free this. binder frees jreq, then free j_ro
         if (json_object_object_get_ex(jreq, "destination", &j_dest) &&
             json_object_object_get_ex(jreq, "service_surface", &j_id))
         {
             const char* dest_app = json_object_get_string(j_dest);
             const char* service = json_object_get_string(j_id);
-
-            std::string uuid = g_afb_instance->wmgr.api_client_attach_service_surface(appid, dest_app, service);
-            if (uuid.empty())
+            bool req_sid = false;
+            if(json_object_object_get_ex(jreq, "request_surface_id", &j_req_sid))
             {
-                afb_req_fail(req, "failed", nullptr);
+                req_sid = json_object_get_boolean(j_req_sid);
             }
-            else
+
+            auto ret = g_afb_instance->wmgr.api_client_attach_service_surface(appid, dest_app, service, req_sid);
+            if (ret.is_err())
             {
-                json_object *resp = json_object_new_object();
-                json_object_object_add(resp, "uuid", json_object_new_string(uuid.c_str()));
-                afb_req_success(req, resp, nullptr);
+                afb_req_fail(req, "failed", ret.unwrap_err());
+                return;
             }
+
+            afb_req_success(req, ret.unwrap(), "success");
+        }
+        else
+        {
+            afb_req_fail(req, "failed", nullptr);
         }
         free(appid);
+        return;
     }
-    else
-    {
-        afb_req_fail(req, "failed", nullptr);
-    }
+    afb_req_fail(req, "failed", nullptr);
 }
 
 void windowmanager_wm_subscribe(afb_req req) noexcept
@@ -746,7 +750,7 @@ const struct afb_verb_v2 windowmanager_verbs[] = {
     {"getDisplayInfo", windowmanager_getdisplayinfo_thunk, nullptr, nullptr, AFB_SESSION_NONE},
     {"getAreaInfo", windowmanager_getareainfo_thunk, nullptr, nullptr, AFB_SESSION_NONE},
     {"setRenderOrder", windowmanager_set_render_order, nullptr, nullptr, AFB_SESSION_NONE},
-    {"attachApp", windowmanager_attach_app, nullptr, nullptr, AFB_SESSION_NONE},
+    {"attachSurfaceToApp", windowmanager_attach_app, nullptr, nullptr, AFB_SESSION_NONE},
     {"wm_subscribe", windowmanager_wm_subscribe, nullptr, nullptr, AFB_SESSION_NONE},
     {"list_drawing_names", windowmanager_list_drawing_names, nullptr, nullptr, AFB_SESSION_NONE},
     {"ping", windowmanager_ping, nullptr, nullptr, AFB_SESSION_NONE},