#include <json-c/json.h>
+#include <algorithm>
#include <bits/signum.h>
#include <csignal>
#include <fstream>
-#include <algorithm>
#include <json.hpp>
namespace wm {
layers(),
pending(),
name_mapping(),
- id_alloc{}
-{
+ id_alloc{} {
assert(g_app == nullptr);
g_app = this;
}
uint32_t layer_id = o_layer_id.value();
- logdebug("surface_set_layout for surface %u on layer %u", surface_id, layer_id);
+ logdebug("surface_set_layout for surface %u on layer %u", surface_id,
+ layer_id);
auto const &layer = this->layers.get_layer(layer_id);
auto rect = layer.value().rect;
// configure surface to wxh dimensions
s->set_configuration(w, h);
+ // set source reactangle, even if we should not need to set it.
+ s->set_source_rectangle(0, 0, w, h);
// set destination to the display rectangle
s->set_destination_rectangle(x, y, w, h);
- // XXX: visibility should be determined independently of our
- // layer + geometry setup.
- s->set_visibility(surface_id == (unsigned)this->layers.main_surface ? 1 : 0);
+ // XXX: The main_surface will be visible regardless
+ s->set_visibility(
+ surface_id == static_cast<unsigned>(this->layers.main_surface) ? 1 : 0);
this->controller->layers[layer_id]->add_surface(s.get());
logdebug("Surface %u now on layer %u with rect { %d, %d, %d, %d }",
void App::surface_removed(uint32_t surface_id) {
logdebug("surface_id is %u", surface_id);
+
+ this->add_task("remove surface ID",
+ [surface_id, this] { this->id_alloc.remove_id(surface_id); });
}
result<int> App::request_surface(char const *drawing_name) {
return Err<int>("Drawing name does not match any role");
}
- auto rname = this->id_alloc[drawing_name];
- if (! rname) {
+ auto rname = this->id_alloc.lookup(drawing_name);
+ if (!rname) {
// name does not exist yet, allocate surface id...
- // XXX: how to allocate surface IDs?
- // * allocate by running a counter for each layer?
- // * allocate IDs globally, i.e. do not have layers contain
- // ID ranges (only define the surfaces on the layer by
- // role?)
- auto id = int(this->id_alloc(drawing_name));
+ auto id = int(this->id_alloc.generate_id(drawing_name));
this->layers.add_surface(id, lid.value());
- // XXX: setup the main_surface id if we registered HomeScreen
// XXX: you should fix this!
if (!this->layers.main_surface_name.empty() &&
- this->layers.main_surface_name == drawing_name) {
+ this->layers.main_surface_name == drawing_name) {
this->layers.main_surface = id;
this->activate_surface(id);
logdebug("Set main_surface id to %u", id);
return Err<int>("Surface already present");
}
-char const* App::activate_surface(char const *drawing_name) {
- auto osid = this->id_alloc[drawing_name];
+char const *App::activate_surface(char const *drawing_name) {
+ auto osid = this->id_alloc.lookup(drawing_name);
if (osid) {
- logdebug("ativate surface with name %s and id %u", drawing_name, osid.value());
+ logdebug("ativate surface with name %s and id %u", drawing_name,
+ osid.value());
this->activate_surface(osid.value());
return nullptr;
}
char const *drawing_name) {
auto r = this->app->request_surface(drawing_name);
if (r.is_err()) {
- return Err<json_object*>(r.unwrap_err());
+ return Err<json_object *>(r.unwrap_err());
}
return Ok(json_object_new_int(r.unwrap()));
}
char const *drawing_name) {
logdebug("%s drawing_name %s", __func__, drawing_name);
auto r = this->app->activate_surface(drawing_name);
- if (r) {
+ if (r != nullptr) {
return Err<json_object *>(r);
}
return Ok(json_object_new_object());
binding_api::result_type binding_api::demo_activate_surface(
uint32_t surfaceid) {
char const *e = this->app->activate_surface(surfaceid);
- if (e) {
+ if (e != nullptr) {
return Err<json_object *>(e);
}
return Ok(json_object_new_object());