aboutsummaryrefslogtreecommitdiffstats
path: root/src/wm_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wm_client.cpp')
-rw-r--r--src/wm_client.cpp104
1 files changed, 92 insertions, 12 deletions
diff --git a/src/wm_client.cpp b/src/wm_client.cpp
index 7a93c7c..f2ad7be 100644
--- a/src/wm_client.cpp
+++ b/src/wm_client.cpp
@@ -18,6 +18,8 @@
#include "wm_client.hpp"
#include "util.hpp"
#include <ilm/ilm_control.h>
+#include <uuid/uuid.h>
+
#define INVALID_SURFACE_ID 0
@@ -50,7 +52,7 @@ WMClient::WMClient(const string &appid, unsigned layer, unsigned surface, const
#else
afb_event ev = afb_daemon_make_event(x.c_str());
#endif
- evname2list[x] = ev;
+ evname2afb_event[x] = ev;
}
}
@@ -58,7 +60,7 @@ WMClient::WMClient(const string &appid, const string &role)
: id(appid),
layer(0),
role2surface(0),
- evname2list(0)
+ evname2afb_event(0)
{
role2surface[role] = INVALID_SURFACE_ID;
for (auto x : kWMEvents)
@@ -68,7 +70,7 @@ WMClient::WMClient(const string &appid, const string &role)
#else
afb_event ev = afb_daemon_make_event(x.c_str());
#endif
- evname2list[x] = ev;
+ evname2afb_event[x] = ev;
}
}
@@ -77,7 +79,7 @@ WMClient::WMClient(const string &appid, unsigned layer, const string &role)
layer(layer),
main_role(role),
role2surface(0),
- evname2list(0)
+ evname2afb_event(0)
{
role2surface[role] = INVALID_SURFACE_ID;
for (auto x : kWMEvents)
@@ -87,7 +89,7 @@ WMClient::WMClient(const string &appid, unsigned layer, const string &role)
#else
afb_event ev = afb_daemon_make_event(x.c_str());
#endif
- evname2list[x] = ev;
+ evname2afb_event[x] = ev;
}
}
@@ -139,9 +141,90 @@ bool WMClient::removeSurfaceIfExist(unsigned surface)
this->surface = INVALID_SURFACE_ID;
ret = true;
}
+ else
+ {
+ for(auto &x : this->service2surfaces)
+ {
+ if(x.second = surface)
+ {
+ ret = true;
+ string key = x.first;
+ this->service2surfaces.erase(key);
+ this->service2supplier.erase(key);
+ }
+ }
+ }
return ret;
}
+WMError WMClient::setRenderOrder(const vector<string> &order)
+{
+ WMError ret = WMError::SUCCESS;
+ this->surface_render_order.clear();
+ for(const auto& x : order)
+ {
+ 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;
+}
+
+string WMClient::attachTmpServiceSurface(const string& supplier, const string& service_surface)
+{
+ string uuid;
+ uuid_t u;
+ char out[37]; // uuid is 36 characters
+ uuid_generate_random(u);
+ uuid_unparse(u, out);
+ uuid = out;
+ this->service2supplier.emplace(service_surface, supplier);
+ return uuid;
+}
+
+WMError WMClient::attachServiceSurface(const string& service_surface, unsigned surface)
+{
+ WMError ret = WMError::NOT_REGISTERED;
+ if(this->service2supplier.count(service_surface) != 0)
+ {
+ this->service2surfaces.emplace(service_surface, surface);
+ ret = WMError::SUCCESS;
+ }
+ return ret;
+}
#if GTEST_ENABLED
bool WMClient::subscribe(afb_req req, const string &evname)
@@ -150,7 +233,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->evname2list[evname]);
+ int ret = afb_req_subscribe(req, this->evname2afb_event[evname]);
if (ret)
{
HMI_DEBUG("Failed to subscribe %s", evname.c_str());
@@ -161,7 +244,7 @@ bool WMClient::subscribe(afb_req req, const string &evname)
void WMClient::emitError(WM_CLIENT_ERROR_EVENT ev)
{
- if (!afb_event_is_valid(this->evname2list[kKeyError])){
+ if (!afb_event_is_valid(this->evname2afb_event[kKeyError])){
HMI_ERROR("event err is not valid");
return;
}
@@ -170,7 +253,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->evname2list[kKeyError], j);
+ int ret = afb_event_push(this->evname2afb_event[kKeyError], j);
if (ret != 0)
{
HMI_DEBUG("afb_event_push failed: %m");
@@ -182,10 +265,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