app: debug_layers returns a representation of layers.json configuration
[staging/windowmanager.git] / src / app.cpp
index f925e3d..729c0a0 100644 (file)
@@ -69,6 +69,7 @@ result<json> file_to_json(char const *filename) {
    return Ok(j);
 }
 
+// Will throw if parsing fails
 struct result<layouts_type> load_layout(char const *filename) {
    DB("loading layout from " << filename);
 
@@ -87,7 +88,7 @@ struct result<layouts_type> load_layout(char const *filename) {
 }
 
 struct result<layer_map>
-   load_layer_ids(char const *filename) {
+   load_layer_map(char const *filename) {
    DB("loading IDs from " << filename);
 
    auto j = file_to_json(filename);
@@ -113,27 +114,34 @@ App::App(wl::display *d)
      display{d},
      controller{},
      outputs(),
+     config(),
      layouts(),
      layers() {
    assert(g_app == nullptr);
    g_app = this;
 
-   {
-      auto l = load_layer_ids("../ids.json");
-      if (l.is_ok()) {
-         this->layers = l.unwrap();
-      } else {
-         logerror("%s", l.err().value());
+   try {
+      {
+         auto l = load_layer_map(
+                 this->config.get_string("layers.json").value().c_str());
+         if (l.is_ok()) {
+            this->layers = l.unwrap();
+         } else {
+            logerror("%s", l.err().value());
+         }
       }
-   }
 
-   {
-      auto l = load_layout("../layout.json");
-      if (l.is_ok()) {
-         this->layouts = l.unwrap();
-      } else {
-         logerror("%s", l.err().value());
+      {
+         auto l = load_layout(
+                 this->config.get_string("layout.json").value().c_str());
+         if (l.is_ok()) {
+            this->layouts = l.unwrap();
+         } else {
+            logerror("%s", l.err().value());
+         }
       }
+   } catch (std::exception &e) {
+      logerror("Loading of configuration failed: %s", e.what());
    }
 }
 
@@ -323,7 +331,7 @@ binding_api::result_type binding_api::register_surface(uint32_t appid,
 
 binding_api::result_type binding_api::debug_layers() {
    logdebug("%s", __func__);
-   return Ok(to_json(this->app->controller->lprops));
+   return Ok(json_tokener_parse(this->app->layers.to_json().dump().c_str()));
 }
 
 binding_api::result_type binding_api::debug_surfaces() {