On the way to adding attach service surface
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Tue, 18 Sep 2018 07:18:19 +0000 (16:18 +0900)
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Tue, 18 Sep 2018 07:18:19 +0000 (16:18 +0900)
Change-Id: Ief7fe7ecbe2022b9b6b70e4f3df1c2e7a074075a
Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
src/main.cpp
src/window_manager.cpp
src/window_manager.hpp

index d5adfd5..5141def 100644 (file)
@@ -507,6 +507,46 @@ void windowmanager_set_render_order(afb_req req) noexcept
     }
 }
 
+void windowmanager_attach_app(afb_req req) noexcept
+{
+    std::lock_guard<std::mutex> 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)
+    {
+        json_object *jreq = afb_req_json(req);
+        json_object *j_dest, *j_id; // 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())
+            {
+                afb_req_fail(req, "failed", nullptr);
+            }
+            else
+            {
+                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);
+            }
+        }
+        free(appid);
+    }
+    else
+    {
+        afb_req_fail(req, "failed", nullptr);
+    }
+}
+
 void windowmanager_wm_subscribe(afb_req req) noexcept
 {
     std::lock_guard<std::mutex> guard(binding_m);
@@ -706,6 +746,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},
     {"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},
index 60470b4..0eeebcd 100644 (file)
@@ -514,6 +514,21 @@ bool WindowManager::api_client_set_render_order(char const* appid, const vector<
     return ret;
 }
 
+string api_client_attach_service_surface(const char* appid, const char* dest, const char* service_surface)
+{
+    string uuid = "", s_dest;
+    s_dest = dest;
+    // uuid = generate_uuid_randam());
+    auto client = g_app_list.lookUpClient(s_dest);
+    if(!client)
+    {
+        HMI_ERROR("Failed to look up destination [%s]", dest);
+        return uuid;
+    }
+    //string uuid = client->attachServiceSurface(appid);
+}
+
+
 result<json_object *> WindowManager::api_get_display_info()
 {
     Screen screen = this->lc->getScreenInfo();
index 96dbfe6..7bd0802 100644 (file)
@@ -178,6 +178,7 @@ class WindowManager
     void api_deactivate_surface(char const *appid, char const *role, const reply_func &reply);
     void api_enddraw(char const *appid, char const *role);
     bool api_client_set_render_order(const char *appid, const std::vector<std::string> &render_order);
+    std::string api_client_attach_service_surface(const char* appid, const char* dest, const char* service_surface);
     result<json_object *> api_get_display_info();
     result<json_object *> api_get_area_info(char const *role);
     void send_event(char const *evname, char const *label);