aboutsummaryrefslogtreecommitdiffstats
path: root/src/applist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/applist.cpp')
-rw-r--r--src/applist.cpp82
1 files changed, 81 insertions, 1 deletions
diff --git a/src/applist.cpp b/src/applist.cpp
index a5ae9f0..b06dee8 100644
--- a/src/applist.cpp
+++ b/src/applist.cpp
@@ -65,7 +65,7 @@ AppList::~AppList() {}
* @attention This function should be called once for the app
* Caller should take care not to be called more than once.
*/
-void AppList::addClient(const std::string &appid, unsigned layer, unsigned surface, const std::string &role)
+void AppList::addClient(const string &appid, unsigned layer, unsigned surface, const string &role)
{
std::lock_guard<std::mutex> lock(this->mtx);
shared_ptr<WMClient> client = std::make_shared<WMClient>(appid, layer, surface, role);
@@ -172,6 +172,75 @@ string AppList::getAppID(unsigned surface, const string& role, bool* found) cons
return string("");
}
+WMError AppList::popFloatingSurface(unsigned pid, unsigned *surface)
+{
+ WMError ret = WMError::NO_ENTRY;
+
+ auto fwd_itr = std::remove_if(this->floating_surfaces.begin(), this->floating_surfaces.end(),
+ [pid, surface, &ret](FloatingSurface x) {
+ if(pid == x.pid){
+ *surface = x.surface_id;
+ ret = WMError::SUCCESS;
+ return true;
+ }
+ else{
+ return false;
+ }
+ });
+ if (fwd_itr != this->floating_surfaces.cend())
+ {
+ HMI_INFO("wm", "pop floating surface: %d", *surface);
+ }
+ this->floating_surfaces.erase(fwd_itr, this->floating_surfaces.end());
+ return ret;
+}
+
+// =================== Floating(Temporary) surface/client API ===================
+
+WMError AppList::popFloatingSurface(const string &appid, unsigned *surface)
+{
+ HMI_ERROR("wm", "This function is not implemented");
+ return WMError::SUCCESS;
+}
+
+void AppList::addFloatingClient(const string &appid, unsigned layer, const string &role)
+{
+}
+
+void AppList::addFloatingSurface(const string &appid, unsigned surface, unsigned pid)
+{
+ struct FloatingSurface fsurface{appid, surface, pid};
+ this->floating_surfaces.push_back(fsurface);
+ this->dumpFloatingSurfaces();
+}
+
+void AppList::removeFloatingSurface(unsigned surface)
+{
+ this->dumpFloatingSurfaces();
+ auto fwd_itr = std::remove_if(
+ this->floating_surfaces.begin(), this->floating_surfaces.end(),
+ [surface](FloatingSurface x) {
+ return x.surface_id == surface;
+ });
+ if(fwd_itr != this->floating_surfaces.cend()){
+ HMI_INFO("wm", "remove floating surface: %d", surface);
+ }
+ this->floating_surfaces.erase(fwd_itr, this->floating_surfaces.end());
+}
+
+WMError AppList::appendRole(const string &id, const string &role, unsigned surface)
+{
+ WMError wm_err = WMError::NO_ENTRY;
+ if (this->contains(id))
+ {
+ auto x = this->lookUpClient(id);
+ x->addSurface(role, surface);
+ wm_err = WMError::SUCCESS;
+ }
+ return wm_err;
+}
+
+
// =================== Request Date container API ===================
/**
@@ -523,4 +592,15 @@ void AppList::reqDump()
}
DUMP("======= req dump end =====");
}
+
+void AppList::dumpFloatingSurfaces()
+{
+ DUMP("======= floating surface dump =====");
+ for (const auto &x : this->floating_surfaces)
+ {
+ DUMP("surface : %d, pid : %d", x.surface_id, x.pid);
+ }
+ DUMP("======= floating surface dump end =====\n");
+}
+
} // namespace wm