diff options
author | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-10-22 09:30:19 +0900 |
---|---|---|
committer | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-11-13 13:05:39 +0900 |
commit | 010ca3f3459a52e44deb5e70e94e9cd394814e3e (patch) | |
tree | 96b8cc678180df86c95f362049dc40e7ce09833b /src/wm_client.cpp | |
parent | c2110a3ec8fa74f2fc37e4909db547aa4a36c851 (diff) |
Attach application to ivi-layer not to surface
Window Manager expresses the application in ivi-layer.
So for, Window Manager tied the surface and role applied
by the application. This patch associates the application
with the ivi-layer, and the role and surface are the
attributes that makes up the application.
Bug-AGL: SPEC-1818, SPEC-1635
Change-Id: Ice1e398e1db037577b0721c16da6603ec5437561
Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
Diffstat (limited to 'src/wm_client.cpp')
-rw-r--r-- | src/wm_client.cpp | 111 |
1 files changed, 40 insertions, 71 deletions
diff --git a/src/wm_client.cpp b/src/wm_client.cpp index 2e12a69..7a93c7c 100644 --- a/src/wm_client.cpp +++ b/src/wm_client.cpp @@ -17,6 +17,7 @@ #include <json-c/json.h> #include "wm_client.hpp" #include "util.hpp" +#include <ilm/ilm_control.h> #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; + evname2list[x] = ev; } } @@ -57,7 +58,7 @@ WMClient::WMClient(const string &appid, const string &role) : id(appid), layer(0), role2surface(0), - event2list(0) + evname2list(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; + evname2list[x] = ev; } } -WMClient::~WMClient() +WMClient::WMClient(const string &appid, unsigned layer, const string &role) + : id(appid), + layer(layer), + main_role(role), + role2surface(0), + evname2list(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 + evname2list[x] = ev; + } } string WMClient::appID() const @@ -80,25 +96,9 @@ string WMClient::appID() const return this->id; } -unsigned WMClient::surfaceID(const string &role) const -{ - if (0 == this->role2surface.count(role)) - { - return INVALID_SURFACE_ID; - } - return this->role2surface.at(role); -} - -std::string WMClient::role(unsigned surface) const +string WMClient::role() 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 @@ -106,74 +106,43 @@ 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 { - this->layer = layer; + return this->surface; } /** - * 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)) - { - HMI_NOTICE("override surfaceID %d with %d", this->role2surface[role], surface); - } - this->role2surface[role] = surface; - return true; -} + this->surface = surface; + ilmErrorTypes err = ilm_layerAddSurface(this->layer, surface); -bool WMClient::removeSurfaceIfExist(unsigned surface) -{ - bool ret = false; - for (auto &x : this->role2surface) + if(err == ILM_SUCCESS) { - 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; - } + err = ilm_commitChanges(); } - return ret; + return (err == ILM_SUCCESS) ? WMError::SUCCESS : WMError::FAIL; } -bool WMClient::removeRole(const string &role) +bool WMClient::removeSurfaceIfExist(unsigned surface) { bool ret = false; - if (this->role2surface.count(role) != 0) + if(surface == this->surface) { - this->role2surface.erase(role); + this->surface = INVALID_SURFACE_ID; ret = true; } return ret; } + #if GTEST_ENABLED bool WMClient::subscribe(afb_req req, const string &evname) { @@ -181,7 +150,7 @@ bool WMClient::subscribe(afb_req req, const string &evname) 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->evname2list[evname]); if (ret) { HMI_DEBUG("Failed to subscribe %s", evname.c_str()); @@ -192,7 +161,7 @@ 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])){ + if (!afb_event_is_valid(this->evname2list[kKeyError])){ HMI_ERROR("event err is not valid"); return; } @@ -201,7 +170,7 @@ void WMClient::emitError(WM_CLIENT_ERROR_EVENT ev) json_object_object_add(j, kKeyErrorDesc, json_object_new_string(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->evname2list[kKeyError], j); if (ret != 0) { HMI_DEBUG("afb_event_push failed: %m"); |