#include <json-c/json.h>
#include "wm_client.hpp"
#include "util.hpp"
+#include <ilm/ilm_control.h>
#define INVALID_SURFACE_ID 0
}
}
-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
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
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<string> &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;
}
{
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