X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fmain.cpp;h=4954abfefd274a37e1820d28c473efa6b5a59b98;hb=973a7123c0bced7c7e7d9dc6dc5e990a0e2838ac;hp=0197c3c14e08ad6784d74c6b295bd1bf50a5390a;hpb=869c528ee82fc8c2e2877d67521e26c3a2ca47ca;p=apps%2Fagl-service-windowmanager.git diff --git a/src/main.cpp b/src/main.cpp index 0197c3c..4954abf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,7 +23,7 @@ #include "result.hpp" #include "json_helper.hpp" #include "util.hpp" -#include "wayland.hpp" +#include "wayland_ivi_wm.hpp" extern "C" { #include @@ -209,7 +209,8 @@ void windowmanager_requestsurface(afb_req req) noexcept { } } - auto ret = g_afb_instance->app.api_request_surface(a_drawing_name); + auto ret = g_afb_instance->app.api_request_surface( + afb_req_get_application_id(req), a_drawing_name); if(isFirstReq){ wmClientCtxt* ctxt = new wmClientCtxt(a_drawing_name); @@ -262,7 +263,8 @@ void windowmanager_requestsurfacexdg(afb_req req) noexcept { } 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); + auto ret = g_afb_instance->app.api_request_surface( + afb_req_get_application_id(req), a_drawing_name, a_ivi_id); if (ret != nullptr) { afb_req_fail(req, "failed", ret); return; @@ -298,15 +300,20 @@ void windowmanager_activatesurface(afb_req req) noexcept { return; } - auto ret = g_afb_instance->app.api_activate_surface(a_drawing_name, a_drawing_area); - if (ret != nullptr) { - afb_req_fail(req, "failed", ret); - return; - } + g_afb_instance->app.api_activate_surface( + afb_req_get_application_id(req), + a_drawing_name, a_drawing_area, + [&req](const char* errmsg){ + if (errmsg != nullptr) { + HMI_ERROR("wm", errmsg); + afb_req_fail(req, "failed", errmsg); + return; + } + afb_req_success(req, NULL, "success"); + }); - afb_req_success(req, NULL, "success"); } catch (std::exception &e) { - afb_req_fail_f(req, "failed", "Uncaught exception while calling activatesurface: %s", e.what()); + HMI_WARNING("wm", "failed", "Uncaught exception while calling activatesurface: %s", e.what()); return; } @@ -329,15 +336,19 @@ void windowmanager_deactivatesurface(afb_req req) noexcept { return; } - auto ret = g_afb_instance->app.api_deactivate_surface(a_drawing_name); - if (ret != nullptr) { - afb_req_fail(req, "failed", ret); - return; - } + g_afb_instance->app.api_deactivate_surface( + afb_req_get_application_id(req), a_drawing_name, + [&req](const char* errmsg){ + if (errmsg != nullptr) { + HMI_ERROR("wm", errmsg); + afb_req_fail(req, "failed", errmsg); + return; + } + afb_req_success(req, NULL, "success"); + }); - afb_req_success(req, NULL, "success"); } catch (std::exception &e) { - afb_req_fail_f(req, "failed", "Uncaught exception while calling deactivatesurface: %s", e.what()); + HMI_WARNING("wm", "Uncaught exception while calling deactivatesurface: %s", e.what()); return; } } @@ -358,16 +369,72 @@ void windowmanager_enddraw(afb_req req) noexcept { afb_req_fail(req, "failed", "Need char const* argument drawing_name"); return; } + afb_req_success(req, NULL, "success"); - auto ret = g_afb_instance->app.api_enddraw(a_drawing_name); - if (ret != nullptr) { - afb_req_fail(req, "failed", ret); + g_afb_instance->app.api_enddraw( + afb_req_get_application_id(req), a_drawing_name); + + } catch (std::exception &e) { + HMI_WARNING("wm", "failed", "Uncaught exception while calling enddraw: %s", e.what()); return; } - afb_req_success(req, NULL, "success"); +} + +void windowmanager_getdisplayinfo_thunk(afb_req req) noexcept { + std::lock_guard 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 { + auto ret = g_afb_instance->app.api_get_display_info(); + if (ret.is_err()) { + afb_req_fail(req, "failed", ret.unwrap_err()); + return; + } + + afb_req_success(req, ret.unwrap(), "success"); + } catch (std::exception &e) { + afb_req_fail_f(req, "failed", "Uncaught exception while calling getdisplayinfo: %s", e.what()); + return; + } + +} + +void windowmanager_getareainfo_thunk(afb_req req) noexcept { + std::lock_guard 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); + + auto ret = g_afb_instance->app.api_get_area_info(a_drawing_name); + if (ret.is_err()) { + afb_req_fail(req, "failed", ret.unwrap_err()); + return; + } + + afb_req_success(req, ret.unwrap(), "success"); } catch (std::exception &e) { - afb_req_fail_f(req, "failed", "Uncaught exception while calling enddraw: %s", e.what()); + afb_req_fail_f(req, "failed", "Uncaught exception while calling getareainfo: %s", e.what()); return; } @@ -559,9 +626,11 @@ 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 }, - { "activatesurface", windowmanager_activatesurface, nullptr, nullptr, AFB_SESSION_NONE }, - { "deactivatesurface", windowmanager_deactivatesurface, nullptr, nullptr, AFB_SESSION_NONE }, - { "enddraw", windowmanager_enddraw, nullptr, nullptr, AFB_SESSION_NONE }, + { "activatesurface", windowmanager_activatesurface, nullptr, nullptr, AFB_SESSION_LOA_1 }, + { "deactivatesurface", windowmanager_deactivatesurface, nullptr, nullptr, AFB_SESSION_LOA_1 }, + { "enddraw", windowmanager_enddraw, nullptr, nullptr, AFB_SESSION_LOA_1 }, + { "getdisplayinfo", windowmanager_getdisplayinfo_thunk, nullptr, nullptr, AFB_SESSION_NONE }, + { "getareainfo", windowmanager_getareainfo_thunk, nullptr, nullptr, AFB_SESSION_LOA_1 }, { "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 },