diff options
-rw-r--r-- | src/redraw_fixer.cpp | 68 |
1 files changed, 28 insertions, 40 deletions
diff --git a/src/redraw_fixer.cpp b/src/redraw_fixer.cpp index e6a84e3..c9b5112 100644 --- a/src/redraw_fixer.cpp +++ b/src/redraw_fixer.cpp @@ -21,21 +21,15 @@ struct App { App(); void commit(); - void surface_created(uint32_t surface_id); - void surface_removed(uint32_t surface_id); void surface_visibility(uint32_t surface_id, uint32_t v); void surface_destination_rectangle(uint32_t surface_id, uint32_t x, uint32_t y, uint32_t w, uint32_t h); void try_fix(uint32_t surface_id); }; -void controller_hooks::surface_created(uint32_t surface_id) { - this->app->surface_created(surface_id); -} +void controller_hooks::surface_created(uint32_t surface_id) {} -void controller_hooks::surface_removed(uint32_t surface_id) { - this->app->surface_removed(surface_id); -} +void controller_hooks::surface_removed(uint32_t surface_id) {} void controller_hooks::surface_visibility(uint32_t surface_id, uint32_t v) { this->app->surface_visibility(surface_id, v); @@ -47,51 +41,45 @@ void controller_hooks::surface_destination_rectangle(uint32_t surface_id, this->app->surface_destination_rectangle(surface_id, x, y, w, h); } -App::App() : chooks{this}, display{new wl::display}, controller{} { +App::App() : chooks{this}, display{new wl::display}, controller{}, outputs{} { // The same init, the WM does, at least we can reuse the wayland stuff - if (this->display->ok()) { - this->display->add_global_handler("wl_output", [this](wl_registry *r, - uint32_t name, - uint32_t v) { + if (!this->display->ok()) { + return; + } + + this->display->add_global_handler( + "wl_output", [this](wl_registry *r, uint32_t name, uint32_t v) { this->outputs.emplace_back(std::make_unique<wl::output>(r, name, v)); }); - this->display->add_global_handler( - "ivi_controller", [this](wl_registry *r, uint32_t name, uint32_t v) { - this->controller = - std::make_unique<struct genivi::controller>(r, name, v); - - // Init controller hooks - this->controller->chooks = &this->chooks; - - // XXX: This protocol needs the output, so lets just add our - // mapping - // here... - this->controller->add_proxy_to_id_mapping( - this->outputs.back()->proxy.get(), - wl_proxy_get_id(reinterpret_cast<struct wl_proxy *>( - this->outputs.back()->proxy.get()))); - }); - - for (int i : {1, 2, 3}) - this->display->roundtrip(); - } + this->display->add_global_handler( + "ivi_controller", [this](wl_registry *r, uint32_t name, uint32_t v) { + this->controller = + std::make_unique<struct genivi::controller>(r, name, v); + + // Init controller hooks + this->controller->chooks = &this->chooks; + + this->controller->add_proxy_to_id_mapping( + this->outputs.back()->proxy.get(), + wl_proxy_get_id(reinterpret_cast<struct wl_proxy *>( + this->outputs.back()->proxy.get()))); + }); + + for (int i : {1, 2, 3}) + this->display->roundtrip(); } void App::commit() { this->controller->commit_changes(); - this->display->dispatch(); // read: flush()++ + this->display->roundtrip(); // read: flush()++ } -void App::surface_created(uint32_t surface_id) { } - -void App::surface_removed(uint32_t surface_id) { } - void App::surface_visibility(uint32_t surface_id, uint32_t v) { fprintf(stderr, "surface %u visibility %u\n", surface_id, v); if (v == 1) { - this->try_fix(surface_id); + this->try_fix(surface_id); } } @@ -99,7 +87,7 @@ void App::surface_destination_rectangle(uint32_t surface_id, uint32_t x, uint32_t y, uint32_t w, uint32_t h) { fprintf(stderr, "surface %u dst %u %u %u %u\n", surface_id, x, y, w, h); - if (w != 1 && h != 1) { + if (w != 1 && h != 1 && this->controller->sprops[surface_id].visibility != 0) { this->try_fix(surface_id); } } |