From e066b091da80364a84905c3d8fc37ebc6d7e849d Mon Sep 17 00:00:00 2001 From: Marcus Fritzsch Date: Fri, 23 Jun 2017 09:25:26 +0200 Subject: [PATCH] wayland: task names, delete surfaces using pending_tasks * Use the pending task list to delete surfaces * Added task names for debug output, simple pointers to const char for dirty and cheap storage. Signed-off-by: Marcus Fritzsch --- src/wayland.cpp | 6 +++--- 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 { std::map> layers; std::map> screens; - std::vector> pending; + typedef std::pair> + name_task_pair; + std::vector pending; - void add_task(std::function &&f) { - this->pending.emplace_back(f); + void add_task(char const *name, + std::function &&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); -- 2.16.6