- HMI_ERROR("wm", "Surface %d is not associated with any layer!", surface_id);
- return;
- }
-
- uint32_t layer_id = *o_layer_id;
-
- auto const &layer = this->layers.get_layer(layer_id);
- auto rect = this->layers.getAreaSize(area);
- HMI_SEQ_DEBUG(g_app_list.currentRequestNumber(), "%s : x:%d y:%d w:%d h:%d", area.c_str(),
- rect.x, rect.y, rect.w, rect.h);
- auto &s = this->controller->surfaces[surface_id];
-
- int x = rect.x;
- int y = rect.y;
- int w = rect.w;
- int h = rect.h;
-
- HMI_DEBUG("wm", "surface_set_layout for surface %u on layer %u", surface_id,
- layer_id);
-
- // set destination to the display rectangle
- s->set_source_rectangle(0, 0, w, h);
- this->layout_commit();
- s->set_destination_rectangle(x, y, w, h);
-
- // update area information
- this->area_info[surface_id].x = x;
- this->area_info[surface_id].y = y;
- this->area_info[surface_id].w = w;
- this->area_info[surface_id].h = h;
-
- HMI_DEBUG("wm", "Surface %u now on layer %u with rect { %d, %d, %d, %d }",
- surface_id, layer_id, x, y, w, h);
-}
-
-void WindowManager::layout_commit()
-{
- this->controller->commit_changes();
- this->display->flush();
-}
-
-void WindowManager::emit_activated(char const *label)
-{
- this->send_event(kListEventName[Event_Active], label);
-}
-
-void WindowManager::emit_deactivated(char const *label)
-{
- this->send_event(kListEventName[Event_Inactive], label);
-}
-
-void WindowManager::emit_syncdraw(char const *label, char const *area, int x, int y, int w, int h)
-{
- this->send_event(kListEventName[Event_SyncDraw], label, area, x, y, w, h);
-}
-
-void WindowManager::emit_syncdraw(const std::string &role, const std::string &area)
-{
- compositor::rect rect = this->layers.getAreaSize(area);
- this->send_event(kListEventName[Event_SyncDraw],
- role.c_str(), area.c_str(), rect.x, rect.y, rect.w, rect.h);
-}
-
-void WindowManager::emit_flushdraw(char const *label)
-{
- this->send_event(kListEventName[Event_FlushDraw], label);
-}
-
-void WindowManager::emit_visible(char const *label, bool is_visible)
-{
- this->send_event(is_visible ? kListEventName[Event_Visible] : kListEventName[Event_Invisible], label);
-}
-
-void WindowManager::emit_invisible(char const *label)
-{
- return emit_visible(label, false);
-}
-
-void WindowManager::emit_visible(char const *label) { return emit_visible(label, true); }
-
-void WindowManager::activate(int id)
-{
- auto ip = this->controller->sprops.find(id);
- if (ip != this->controller->sprops.end())
- {
- this->controller->surfaces[id]->set_visibility(1);
- char const *label =
- this->lookup_name(id).value_or("unknown-name").c_str();
-
- // FOR CES DEMO >>>
- if ((0 == strcmp(label, "radio")) ||
- (0 == strcmp(label, "music")) ||
- (0 == strcmp(label, "video")) ||
- (0 == strcmp(label, "map")))
- {
- for (auto i = surface_bg.begin(); i != surface_bg.end(); ++i)
- {
- if (id == *i)
- {
- // Remove id
- this->surface_bg.erase(i);
-
- // Remove from BG layer (999)
- HMI_DEBUG("wm", "Remove %s(%d) from BG layer", label, id);
- this->controller->layers[999]->remove_surface(id);
-
- // Add to FG layer (1001)
- HMI_DEBUG("wm", "Add %s(%d) to FG layer", label, id);
- this->controller->layers[1001]->add_surface(id);
-
- for (int j : this->surface_bg)
- {
- HMI_DEBUG("wm", "Stored id:%d", j);
- }
- break;
- }
- }
- }
- // <<< FOR CES DEMO
-
- this->layout_commit();
-
- // TODO: application requests by old role,
- // so convert role new to old for emitting event
- const char* old_role = this->rolenew2old[label].c_str();
-
- this->emit_visible(old_role);
- this->emit_activated(old_role);
- }
-}
-
-void WindowManager::deactivate(int id)
-{
- auto ip = this->controller->sprops.find(id);
- if (ip != this->controller->sprops.end())
- {
- char const *label =
- this->lookup_name(id).value_or("unknown-name").c_str();
-
- // FOR CES DEMO >>>
- if ((0 == strcmp(label, "radio")) ||
- (0 == strcmp(label, "music")) ||
- (0 == strcmp(label, "video")) ||
- (0 == strcmp(label, "map")))
- {
-
- // Store id
- this->surface_bg.push_back(id);
-
- // Remove from FG layer (1001)
- HMI_DEBUG("wm", "Remove %s(%d) from FG layer", label, id);
- this->controller->layers[1001]->remove_surface(id);
-
- // Add to BG layer (999)
- HMI_DEBUG("wm", "Add %s(%d) to BG layer", label, id);
- this->controller->layers[999]->add_surface(id);
-
- for (int j : surface_bg)
- {
- HMI_DEBUG("wm", "Stored id:%d", j);
- }
- }
- else
- {
- this->controller->surfaces[id]->set_visibility(0);
- }
- // <<< FOR CES DEMO
-
- this->layout_commit();
-
- // TODO: application requests by old role,
- // so convert role new to old for emitting event
- const char* old_role = this->rolenew2old[label].c_str();
-
- this->emit_deactivated(old_role);
- this->emit_invisible(old_role);
- }
-}
-
-WMError WindowManager::setRequest(const std::string& appid, const std::string &role, const std::string &area,
- Task task, unsigned* req_num)
-{
- if (!g_app_list.contains(appid))
- {
- return WMError::NOT_REGISTERED;
- }
-
- auto client = g_app_list.lookUpClient(appid);
-
- /*
- * Queueing Phase
- */
- unsigned current = g_app_list.currentRequestNumber();
- unsigned requested_num = g_app_list.getRequestNumber(appid);
- if (requested_num != 0)
- {
- HMI_SEQ_INFO(requested_num,
- "%s %s %s request is already queued", appid.c_str(), role.c_str(), area.c_str());
- return REQ_REJECTED;