X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fapp.cpp;h=596391c1c1d7b77aaddab39b906617a37b8d82fe;hb=616ac2c0016f3936c1e8634c134807044e7bba68;hp=d371af1b6bc117795ecfdeca8251c8a32b9bc863;hpb=b7ce9433f275bd216751c120e8e80278f2492239;p=staging%2Fwindowmanager.git diff --git a/src/app.cpp b/src/app.cpp index d371af1..596391c 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -389,13 +389,16 @@ char const *App::activate_surface(char const *drawing_name) { auto layer_id = this->layers.get_layer_id(*surface_id); if (! layer_id) { - logdebug("Surface %d has no associated layer!", *surface_id); return "Surface is not on any layer!"; } - struct LayoutState &state = **this->layers.get_layout_state(*surface_id); + auto o_state = *this->layers.get_layout_state(*surface_id); - logdebug("state @ %p = { %d, %d, %d }", &state, state.main, state.sub, state.s); + if (! o_state) { + return "Could not find layer for surface"; + } + + struct LayoutState &state = *o_state; // disable layers that are above our current layer for (auto const &l : this->layers.mapping) { @@ -448,8 +451,9 @@ char const *App::activate_surface(char const *drawing_name) { if (state.sub == -1) { if (can_split) { if (state.main != *surface_id) { + std::string main = std::move(*this->lookup_name(state.main)); this->emit_syncdraw(drawing_name); - this->emit_syncdraw(this->lookup_name(state.main)->c_str()); + this->emit_syncdraw(main.c_str()); this->surface_set_layout_split(state.main, *surface_id); this->activate(*surface_id); @@ -457,7 +461,7 @@ char const *App::activate_surface(char const *drawing_name) { // Should wait for EndDraw event... this->emit_flushdraw(drawing_name); - this->emit_flushdraw(this->lookup_name(state.main)->c_str()); + this->emit_flushdraw(main.c_str()); } } else { this->emit_syncdraw(drawing_name); @@ -495,7 +499,13 @@ char const *App::deactivate_surface(char const *drawing_name) { return "Cannot deactivate main_surface"; } - struct LayoutState &state = **this->layers.get_layout_state(*surface_id); + auto o_state = *this->layers.get_layout_state(*surface_id); + + if (! o_state) { + return "Could not find layer for surface"; + } + + struct LayoutState &state = *o_state; if (state.main == -1) { return "No surface active"; @@ -506,11 +516,10 @@ char const *App::deactivate_surface(char const *drawing_name) { return nullptr; } - logdebug("state @ %p = { %d, %d, %d }", &state, state.main, state.sub, state.s); - if (state.main == *surface_id) { if (state.sub != -1) { - this->emit_syncdraw(this->lookup_name(state.sub)->c_str()); + std::string sub = std::move(*this->lookup_name(state.sub)); + this->emit_syncdraw(sub.c_str()); this->deactivate(*surface_id); this->surface_set_layout_full(state.sub); @@ -518,13 +527,14 @@ char const *App::deactivate_surface(char const *drawing_name) { state.sub = -1; state.s = LayoutState::Single; - this->emit_flushdraw(this->lookup_name(state.sub)->c_str()); + this->emit_flushdraw(sub.c_str()); } else { this->deactivate(*surface_id); state.main = -1; } }else if (state.sub == *surface_id) { - this->emit_syncdraw(this->lookup_name(state.main)->c_str()); + std::string main = std::move(*this->lookup_name(state.main)); + this->emit_syncdraw(main.c_str()); this->deactivate(*surface_id); this->deactivate(*surface_id); @@ -532,7 +542,7 @@ char const *App::deactivate_surface(char const *drawing_name) { state.sub = -1; state.s = LayoutState::Single; - this->emit_flushdraw(this->lookup_name(state.main)->c_str()); + this->emit_flushdraw(main.c_str()); } else { return "Surface is not active"; } @@ -589,7 +599,7 @@ void App::emit_syncdraw(char const *label) { } void App::emit_flushdraw(char const *label) { - this->api.send_event("syncdraw", label); + this->api.send_event("flushdraw", label); } void App::emit_visible(char const *label, bool is_visible) {