diff options
-rw-r--r-- | src/wayland.cpp | 6 | ||||
-rw-r--r-- | src/wayland.hpp | 13 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/wayland.cpp b/src/wayland.cpp index 5b526ec..b63d961 100644 --- a/src/wayland.cpp +++ b/src/wayland.cpp @@ -500,11 +500,11 @@ void controller::surface_configuration(uint32_t id, int32_t width, bool center = s->size.w != width && s->size.h != height; s->size = size{uint32_t(width), uint32_t(height)}; if (center) - add_task([id, width, height](struct controller *c) { auto const s = c->surfaces.find(id); if (s != c->surfaces.end()) s->second->set_destination_rectangle( 800 / 2 - width / 2, 600 / 2 - height / 2, width, height); + add_task("fullscreen surface", [id, width, height](struct controller *c) { }); } @@ -538,9 +538,9 @@ void controller::surface_destroyed(uint32_t id) { void controller::surface_content(uint32_t id, int32_t content_state) { logdebug("genivi::surface %s @ %p s %i", __func__, this->proxy, content_state); - if (content_state == IVI_CONTROLLER_SURFACE_CONTENT_STATE_CONTENT_REMOVED) { - this->surfaces.erase(id); + add_task("remove surface", + [id](struct controller *c) { c->surfaces.erase(id); }); } } diff --git a/src/wayland.hpp b/src/wayland.hpp index c3d4c2f..20e88c5 100644 --- a/src/wayland.hpp +++ b/src/wayland.hpp @@ -276,15 +276,20 @@ struct controller : public wayland_proxy<struct ivi_controller> { std::map<uint32_t, std::unique_ptr<struct layer>> layers; std::map<uint32_t, std::unique_ptr<struct screen>> screens; - std::vector<std::function<void(struct controller *)>> pending; + typedef std::pair<char const *, std::function<void(struct controller *)>> + name_task_pair; + std::vector<name_task_pair> pending; - void add_task(std::function<void(struct controller *)> &&f) { - this->pending.emplace_back(f); + void add_task(char const *name, + std::function<void(struct controller *)> &&f) { + this->pending.emplace_back(std::make_pair(name, f)); } + void execute_pending() { if (!this->pending.empty()) { for (auto &t : this->pending) { - t(this); + logdebug("executing task '%s'", t.first); + t.second(this); } this->pending.clear(); ivi_controller_commit_changes(this->proxy); |