X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwm_client.cpp;h=84f9842603839be48390f9d0d7a0ec2466f4ceab;hb=b7957f3fc1e5f5ce0525d62c67da64457ef1d9e0;hp=724554941bae36d46d47dff5be28a0ee5911e916;hpb=e5295c77d4c436212265edeca7f9a4818a5133e6;p=apps%2Fagl-service-windowmanager.git diff --git a/src/wm_client.cpp b/src/wm_client.cpp index 7245549..84f9842 100644 --- a/src/wm_client.cpp +++ b/src/wm_client.cpp @@ -17,6 +17,7 @@ #include #include "wm_client.hpp" #include "util.hpp" +#include #define INVALID_SURFACE_ID 0 @@ -71,12 +72,14 @@ WMClient::WMClient(const string &appid, const string &role) } } -WMClient::WMClient(const string &appid, unsigned layer, - const string& layer_name, unsigned surface, const string &role) - : id(appid), layer(layer), wm_layer_name(layer_name), - role2surface(0) +WMClient::WMClient(const string &appid, unsigned layer, const string &role) + : id(appid), + layer(layer), + main_role(role), + role2surface(0), + evname2afb_event(0) { - role2surface[role] = surface; + role2surface[role] = INVALID_SURFACE_ID; for (auto x : kWMEvents) { #if GTEST_ENABLED @@ -93,25 +96,9 @@ string WMClient::appID() const return this->id; } -unsigned WMClient::surfaceID(const string &role) const +string WMClient::role() const { - if (0 == this->role2surface.count(role)) - { - return INVALID_SURFACE_ID; - } - return this->role2surface.at(role); -} - -std::string WMClient::role(unsigned surface) const -{ - for(const auto& x : this->role2surface) - { - if(x.second == surface) - { - return x.first; - } - } - return std::string(""); + return this->main_role; } unsigned WMClient::layerID() const @@ -124,70 +111,79 @@ unsigned WMClient::surfaceID() const return this->surface; } -const string& WMClient::getWMLayerName() -{ - return this->wm_layer_name; -} - -void WMClient::setRole(const string& role) -{ - this->role_list.clear(); - this->role_list.push_back(role); -} - -void WMClient::appendRole(const string& role) -{ - this->role_list.push_back(role); -} - /** - * Add the pair of role and surface to the client + * Add surface to the client * - * This function set the pair of role and surface to the client. - * This function is used for the client which has multi surfaces. - * If the model and relationship for role and surface(layer) - * is changed, this function will be changed - * Current Window Manager doesn't use this function. + * This function add main surface to the client(ivi_layer). * * @param string[in] role - * @param unsigned[in] surface - * @return true + * @return WMError */ -bool WMClient::addSurface(const string &role, unsigned surface) +WMError WMClient::addSurface(unsigned surface) { - HMI_DEBUG("Add role %s with surface %d", role.c_str(), surface); - if (0 != this->role2surface.count(role)) + this->surface = surface; + ilmErrorTypes err = ilm_layerAddSurface(this->layer, surface); + + if(err == ILM_SUCCESS) { - HMI_NOTICE("override surfaceID %d with %d", this->role2surface[role], surface); + err = ilm_commitChanges(); } - this->role2surface[role] = surface; - return true; + return (err == ILM_SUCCESS) ? WMError::SUCCESS : WMError::FAIL; } bool WMClient::removeSurfaceIfExist(unsigned surface) { bool ret = false; - for (auto &x : this->role2surface) + if(surface == this->surface) { - if (surface == x.second) - { - 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; - break; - } + this->surface = INVALID_SURFACE_ID; + ret = true; } return ret; } -bool WMClient::removeRole(const string &role) +WMError WMClient::setRenderOrder(const vector &order) { - bool ret = false; - if (this->role2surface.count(role) != 0) + WMError ret = WMError::SUCCESS; + this->surface_render_order.clear(); + for(const auto& x : order) { - this->role2surface.erase(role); - ret = true; + unsigned s; // surface + if(x == this->role()) + { + s = this->surfaceID(); + } + else if(this->service2surfaces.count(x) != 0) + { + s = this->service2surfaces[x]; + } + else + { + ret = WMError::NOT_REGISTERED; + break; + } + this->surface_render_order.push_back(s); + } + if(ret == WMError::SUCCESS) + { + int count = 0; + t_ilm_layer* id_array = new t_ilm_surface[this->surface_render_order.size()]; + if(id_array == nullptr) + { + HMI_WARNING("short memory"); + ret = WMError::FAIL; + } + else + { + for(const auto& i : this->surface_render_order) + { + id_array[count] = i; + ++count; + } + ilm_layerSetRenderOrder(this->layerID(), + id_array, this->surface_render_order.size()); + delete id_array; + } } return ret; } @@ -231,10 +227,7 @@ void WMClient::dumpInfo() { DUMP("APPID : %s", id.c_str()); DUMP(" LAYER : %d", layer); - for (const auto &x : this->role2surface) - { - DUMP(" ROLE : %s , SURFACE : %d", x.first.c_str(), x.second); - } + DUMP(" ROLE : %s , SURFACE : %d", main_role.c_str(), surface); } } // namespace wm \ No newline at end of file