X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fapp.cpp;h=82701b7de8b6c9ca4081b7bdac2f71a68e6667a3;hb=4675cf37125f57a5e55931156e1d9dc5605a6e81;hp=14bcdb26274e9088b9b387946f7e001d3475959a;hpb=4e1f6616b5ce24022f088943912e4b98e7764100;p=apps%2Fagl-service-windowmanager.git diff --git a/src/app.cpp b/src/app.cpp index 14bcdb2..82701b7 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Mentor Graphics Development (Deutschland) GmbH + * Copyright (c) 2017 TOYOTA MOTOR CORPORATION * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,12 +44,16 @@ namespace { using nlohmann::json; result file_to_json(char const *filename) { + json j; std::ifstream i(filename); if (i.fail()) { - return Err("Could not open config file"); + HMI_DEBUG("wm", "Could not open config file, so use default layer information"); + j = default_layers_json; } - json j; - i >> j; + else { + i >> j; + } + return Ok(j); } @@ -500,8 +504,7 @@ char const *App::api_deactivate_surface(char const *drawing_name) { return "No surface active"; } - // XXX: check against main_surface, main_surface_name is the configuration - // item. + // Check against main_surface, main_surface_name is the configuration item. if (*surface_id == this->layers.main_surface) { HMI_DEBUG("wm", "Refusing to deactivate main_surface %d", *surface_id); return nullptr; @@ -576,7 +579,6 @@ char const *App::api_enddraw(char const *drawing_name) { if (n && *n == drawing_name) { std::swap(this->pending_end_draw[i], this->pending_end_draw[iend - 1]); this->pending_end_draw.resize(iend - 1); - // XXX: Please tell the compositor to thaw the surface... this->activate(this->pending_end_draw[i]); this->layout_commit(); this->emit_flushdraw(drawing_name); @@ -684,6 +686,36 @@ result App::api_request_surface(char const *drawing_name) { return Err("Surface already present"); } +char const *App::api_request_surface(char const *drawing_name, + char const *ivi_id) { + ST(); + + auto lid = this->layers.get_layer_id(std::string(drawing_name)); + unsigned sid = std::stol(ivi_id); + + if (!lid) { + return "Drawing name does not match any role"; + } + + auto rname = this->lookup_id(drawing_name); + + if (rname) { + return "Surface already present"; + } + + // register pair drawing_name and ivi_id + this->id_alloc.register_name_id(drawing_name, sid); + this->layers.add_surface(sid, *lid); + + // this surface is already created + HMI_DEBUG("wm", "surface_id is %u, layer_id is %u", sid, *lid); + + this->controller->layers[*lid]->add_surface( + this->controller->surfaces[sid].get()); + + return nullptr; +} + void App::activate(int id) { auto ip = this->controller->sprops.find(id); if (ip != this->controller->sprops.end()) {