X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fapp.cpp;h=685f572134213436dd9331abe4e02a53e01df858;hb=93c2a361b2144d82ec70208225c45afd8f355bd3;hp=e14984e4a7382422a0ac41d4885265b10005176e;hpb=9b094f7e17736529e8fd1d25515112f9a1a2daac;p=staging%2Fwindowmanager.git diff --git a/src/app.cpp b/src/app.cpp index e14984e..685f572 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -213,8 +213,7 @@ int App::dispatch_events() { this->display->flush(); // execute pending tasks, that is layout changes etc. - this->controller->execute_pending(); - this->display->roundtrip(); + this->execute_pending(); return 0; } @@ -320,6 +319,22 @@ void App::surface_set_layout(uint32_t surface_id) { surface_id, layer_id, x, y, w, h); } +void App::add_task(char const *name, std::function &&f) { + this->pending.emplace_back(std::make_pair(name, f)); +} + +void App::execute_pending() { + if (!this->pending.empty()) { + for (auto &t : this->pending) { + logdebug("executing task '%s'", t.first); + t.second(); + } + this->pending.clear(); + this->controller->commit_changes(); + this->display->flush(); + } +} + // _ _ _____ _ // _ __ _ __ _____ _(_) ___ __| | | ____|_ _____ _ __ | |_ ___ // | '_ \| '__/ _ \ \/ / |/ _ \/ _` | | _| \ \ / / _ \ '_ \| __/ __| @@ -331,10 +346,8 @@ void App::surface_created(uint32_t surface_id) { // We need to execute the surface setup after its creation. // XXX: perhaps move the late-tasks functionality to App? - this->controller->add_task("surface_set_layout", - [surface_id, this](struct genivi::controller *) { - this->surface_set_layout(surface_id); - }); + this->add_task("surface_set_layout", + [surface_id, this] { this->surface_set_layout(surface_id); }); } void App::surface_removed(uint32_t surface_id) { @@ -401,4 +414,8 @@ void controller_hooks::surface_removed(uint32_t surface_id) { this->app->surface_removed(surface_id); } +void controller_hooks::add_task(char const *name, std::function &&f) { + this->app->add_task(name, std::move(f)); +} + } // namespace wm