X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwm_layer_control.cpp;h=28d409fa19a2abcaf708580964565b4bcffe5b78;hb=ceb1049ca57b0fd0ce41e9eca631557ffa46993a;hp=c76a0701095d712ae40a719d0f9545c27d58cd13;hpb=010ca3f3459a52e44deb5e70e94e9cd394814e3e;p=apps%2Fagl-service-windowmanager.git diff --git a/src/wm_layer_control.cpp b/src/wm_layer_control.cpp index c76a070..28d409f 100644 --- a/src/wm_layer_control.cpp +++ b/src/wm_layer_control.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2017 TOYOTA MOTOR CORPORATION + * Copyright (c) 2018 Konsulko Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,8 +22,8 @@ #include "request.hpp" #include "json_helper.hpp" -#define LC_AREA_PATH "/etc/areas.db" -#define LC_LAYER_SETTING_PATH "/etc/layers.json" +#define LC_AREA_FILE "areas.json" +#define LC_LAYER_SETTING_FILE "layers.json" #define LC_DEFAULT_AREA "fullscreen" #define BACK_GROUND_LAYER "BackGroundLayer" @@ -58,8 +59,8 @@ static void layerCallback_static(t_ilm_layer layer, LayerControl::LayerControl(const std::string& root) { - string area_path = root + LC_AREA_PATH; - string layer_path= root + LC_LAYER_SETTING_PATH; + string area_path(get_file_path(LC_AREA_FILE, root.c_str())); + string layer_path(get_file_path(LC_LAYER_SETTING_FILE, root.c_str())); // load layers.setting.json WMError ret = this->loadLayerSetting(layer_path); assert(ret == WMError::SUCCESS); @@ -393,10 +394,26 @@ WMError LayerControl::layoutChange(const WMAction& action) unsigned surface = action.client->surfaceID(); auto rect = this->getAreaSize(action.area); - HMI_DEBUG("Set layout %d, %d, %d, %d",rect.x, rect.y, rect.w, rect.h); - ilm_commitChanges(); + HMI_SEQ_INFO(action.req_num, "Set layout %d, %d, %d, %d",rect.x, rect.y, rect.w, rect.h); + + // Sometimes, ivi_wm_surface_size signal doesn't reach window manager, + // then, Window Manager set set source size = 0. + if(!action.client->isSourceSizeSet()) + { + ilmSurfaceProperties sp; + ilm_getPropertiesOfSurface(surface, &sp); + if((sp.origSourceHeight != sp.sourceHeight) || (sp.origSourceWidth != sp.sourceWidth)) + { + HMI_SEQ_NOTICE(action.req_num, "set source size w:%d h%d", sp.origSourceWidth, sp.origSourceHeight); + ilm_surfaceSetSourceRectangle(surface, 0, 0, sp.origSourceWidth, sp.origSourceHeight); + ilm_commitChanges(); + action.client->setSurfaceSizeCorrectly(); + } + } + ilm_surfaceSetDestinationRectangle(surface, rect.x, rect.y, rect.w, rect.h); ilm_commitChanges(); + action.client->setArea(action.area); for(auto &wm_layer: this->wm_layers) { // Store the state who is assigned to the area @@ -434,6 +451,48 @@ WMError LayerControl::visibilityChange(const WMAction& action) return ret; } +WMError LayerControl::updateAreaList(const ChangeAreaReq& req) +{ + // error check + for(const auto& elem : req.area_req) + { + if(this->area2size.find(elem.first) == this->area2size.end()) + { + HMI_ERROR("requested area %s is not registered in area list", elem.first.c_str()); + return WMError::NOT_REGISTERED; + } + } + // update list + for(const auto& elem : req.area_req) + { + this->area2size[elem.first] = elem.second; + } + if(req.save) + { + HMI_NOTICE("Not implemented"); + // TODO + } + return WMError::SUCCESS; +} + +WMError LayerControl::getUpdateAreaList(ChangeAreaReq *req) +{ + for(const auto& wm_layer : this->wm_layers) + { + // get area name and compare it with elem + for(const auto& area : req->area_req) + { + string app = wm_layer->attachedApp(area.first); + if(!app.empty()) + { + HMI_INFO("app %s changes area %s", app.c_str(), area.first.c_str()); + req->update_app2area[app] = area.first; + } + } + } + return WMError::SUCCESS; +} + void LayerControl::appTerminated(const shared_ptr client) { for(auto& l : this->wm_layers) @@ -625,4 +684,4 @@ bool LayerControl::moveForeGround(const shared_ptr client) return ret; } -} // namespace wm \ No newline at end of file +} // namespace wm