X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwm_client.cpp;h=500c60ee3f05aafb60d6445a782187009d67b9e8;hb=0b2c927e6606c0fbae889fea7085a9af12d15714;hp=a9ed54712fb2fa53948886c6b52ed9ccbfb90b90;hpb=847dde9621cef9b9a44eda95c63c0fe3f528468d;p=apps%2Fagl-service-windowmanager.git diff --git a/src/wm_client.cpp b/src/wm_client.cpp index a9ed547..500c60e 100644 --- a/src/wm_client.cpp +++ b/src/wm_client.cpp @@ -16,7 +16,8 @@ #include #include "wm_client.hpp" -#include "hmi-debug.h" +#include "util.hpp" +#include #define INVALID_SURFACE_ID 0 @@ -49,7 +50,7 @@ WMClient::WMClient(const string &appid, unsigned layer, unsigned surface, const #else afb_event ev = afb_daemon_make_event(x.c_str()); #endif - event2list[x] = ev; + evname2afb_event[x] = ev; } } @@ -57,7 +58,7 @@ WMClient::WMClient(const string &appid, const string &role) : id(appid), layer(0), role2surface(0), - event2list(0) + evname2afb_event(0) { role2surface[role] = INVALID_SURFACE_ID; for (auto x : kWMEvents) @@ -67,12 +68,27 @@ WMClient::WMClient(const string &appid, const string &role) #else afb_event ev = afb_daemon_make_event(x.c_str()); #endif - event2list[x] = ev; + evname2afb_event[x] = ev; } } -WMClient::~WMClient() +WMClient::WMClient(const string &appid, unsigned layer, const string &role) + : id(appid), + layer(layer), + main_role(role), + role2surface(0), + evname2afb_event(0) { + role2surface[role] = INVALID_SURFACE_ID; + for (auto x : kWMEvents) + { +#if GTEST_ENABLED + string ev = x; +#else + afb_event ev = afb_daemon_make_event(x.c_str()); +#endif + evname2afb_event[x] = ev; + } } string WMClient::appID() const @@ -101,25 +117,30 @@ std::string WMClient::role(unsigned surface) const return std::string(""); } +string WMClient::role() const +{ + return this->main_role; +} + unsigned WMClient::layerID() const { return this->layer; } -/** - * Set layerID the client belongs to - * - * This function set layerID the client belongs to. - * But this function may not used because the layer should be fixed at constructor. - * So this function will be used to change layer by some reasons. - * - * @param unsigned[in] layerID - * @return None - * @attention WMClient can't have multiple layer - */ -void WMClient::registerLayer(unsigned layer) +unsigned WMClient::surfaceID() const +{ + return this->surface; +} + +void WMClient::setRole(const string& role) +{ + this->role_list.clear(); + this->role_list.push_back(role); +} + +void WMClient::appendRole(const string& role) { - this->layer = layer; + this->role_list.push_back(role); } /** @@ -135,25 +156,42 @@ void WMClient::registerLayer(unsigned layer) * @param unsigned[in] surface * @return true */ -bool WMClient::addSurface(const string &role, unsigned surface) +/* bool WMClient::addSurface(const string &role, unsigned surface) { - HMI_DEBUG("wm", "Add role %s with surface %d", role.c_str(), surface); + HMI_DEBUG("Add role %s with surface %d", role.c_str(), surface); if (0 != this->role2surface.count(role)) { - HMI_NOTICE("wm", "override surfaceID %d with %d", this->role2surface[role], surface); + HMI_NOTICE("override surfaceID %d with %d", this->role2surface[role], surface); } this->role2surface[role] = surface; return true; +} */ + +bool WMClient::addSurface(unsigned surface) +{ + this->surface = surface; + ilmErrorTypes err = ilm_layerAddSurface(this->layer, surface); + + if(err == ILM_SUCCESS) + { + err = ilm_commitChanges(); + } + return (err == ILM_SUCCESS) ? true : false; } bool WMClient::removeSurfaceIfExist(unsigned surface) { bool ret = false; + if(surface == this->surface) + { + this->surface = INVALID_SURFACE_ID; + return true; + } for (auto &x : this->role2surface) { if (surface == x.second) { - HMI_INFO("wm", "Remove surface from client %s: role %s, surface: %d", + HMI_INFO("Remove surface from client %s: role %s, surface: %d", this->id.c_str(), x.first.c_str(), x.second); this->role2surface.erase(x.first); ret = true; @@ -174,17 +212,17 @@ bool WMClient::removeRole(const string &role) return ret; } -#ifndef GTEST_ENABLED +#if GTEST_ENABLED bool WMClient::subscribe(afb_req req, const string &evname) { if(evname != kKeyError){ - HMI_DEBUG("wm", "error is only enabeled for now"); + HMI_DEBUG("error is only enabeled for now"); return false; } - int ret = afb_req_subscribe(req, this->event2list[evname]); + int ret = afb_req_subscribe(req, this->evname2afb_event[evname]); if (ret) { - HMI_DEBUG("wm", "Failed to subscribe %s", evname.c_str()); + HMI_DEBUG("Failed to subscribe %s", evname.c_str()); return false; } return true; @@ -192,19 +230,19 @@ bool WMClient::subscribe(afb_req req, const string &evname) void WMClient::emitError(WM_CLIENT_ERROR_EVENT ev) { - if (!afb_event_is_valid(this->event2list[kKeyError])){ - HMI_ERROR("wm", "event err is not valid"); + if (!afb_event_is_valid(this->evname2afb_event[kKeyError])){ + HMI_ERROR("event err is not valid"); return; } json_object *j = json_object_new_object(); json_object_object_add(j, kKeyError, json_object_new_int(ev)); json_object_object_add(j, kKeyErrorDesc, json_object_new_string(kErrorDescription[ev].c_str())); - HMI_DEBUG("wm", "error: %d, description:%s", ev, kErrorDescription[ev].c_str()); + HMI_DEBUG("error: %d, description:%s", ev, kErrorDescription[ev].c_str()); - int ret = afb_event_push(this->event2list[kKeyError], j); + int ret = afb_event_push(this->evname2afb_event[kKeyError], j); if (ret != 0) { - HMI_DEBUG("wm", "afb_event_push failed: %m"); + HMI_DEBUG("afb_event_push failed: %m"); } } #endif