diff options
author | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-03-19 17:06:05 +0900 |
---|---|---|
committer | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-03-19 19:37:37 +0900 |
commit | c83642c69ede418f4c4d89daa0dae4b8698e0765 (patch) | |
tree | ae79ff05e6e4e49cfc5037090c214fdcab8dcd1e /src/app.cpp | |
parent | 5d05965a888976ee4b8cf65e25c01bbff8769b3c (diff) |
Change reply timing
Some events were emitted in a function before it replies.
This patch changes
* The function checks parameter then reply error if it is incorrect.
* After checking parameters, the function continues to process.
The exeption is the syncronous functions such as requestSurface.
Change-Id: I168eba3e2b70d53615a4221bcbbba6bc6096c1db
Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
Diffstat (limited to 'src/app.cpp')
-rw-r--r-- | src/app.cpp | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/src/app.cpp b/src/app.cpp index 1a82eef..937da6a 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -333,31 +333,38 @@ void App::layout_commit() { this->display->flush(); } -char const *App::api_activate_surface(char const *drawing_name, char const *drawing_area) { +void App::api_activate_surface(char const *drawing_name, char const *drawing_area, const reply_func &reply) { ST(); auto const &surface_id = this->lookup_id(drawing_name); if (!surface_id) { - return "Surface does not exist"; + reply("Surface does not exist"); + return; } if (!this->controller->surface_exists(*surface_id)) { - return "Surface does not exist in controller!"; + reply("Surface does not exist in controller!"); + return; } auto layer_id = this->layers.get_layer_id(*surface_id); if (!layer_id) { - return "Surface is not on any layer!"; + reply("Surface is not on any layer!"); + return; } auto o_state = *this->layers.get_layout_state(*surface_id); if (o_state == nullptr) { - return "Could not find layer for surface"; + reply("Could not find layer for surface"); + return; } + HMI_DEBUG("wm", "surface %d is detected", *surface_id); + reply(nullptr); + struct LayoutState &state = *o_state; // disable layers that are above our current layer @@ -477,40 +484,47 @@ char const *App::api_activate_surface(char const *drawing_name, char const *draw } } } - - // no error - return nullptr; } -char const *App::api_deactivate_surface(char const *drawing_name) { +void App::api_deactivate_surface(char const *drawing_name, const reply_func &reply) { ST(); auto const &surface_id = this->lookup_id(drawing_name); if (!surface_id) { - return "Surface does not exist"; - } + reply ("Surface does not exist"); + return; + } if (*surface_id == this->layers.main_surface) { - return "Cannot deactivate main_surface"; + reply("Cannot deactivate main_surface"); + return; } auto o_state = *this->layers.get_layout_state(*surface_id); if (o_state == nullptr) { - return "Could not find layer for surface"; + reply("Could not find layer for surface"); + return; } struct LayoutState &state = *o_state; if (state.main == -1) { - return "No surface active"; + reply("No surface active"); + return; } // Check against main_surface, main_surface_name is the configuration item. if (*surface_id == this->layers.main_surface) { HMI_DEBUG("wm", "Refusing to deactivate main_surface %d", *surface_id); - return nullptr; + reply(nullptr); + return; } + if((state.main == *surface_id) && (state.sub == *surface_id)){ + reply("Surface is not active"); + return; + } + reply(nullptr); if (state.main == *surface_id) { if (state.sub != -1) { @@ -552,11 +566,7 @@ char const *App::api_deactivate_surface(char const *drawing_name) { area_rect.x, area_rect.y, area_rect.w, area_rect.h); this->enqueue_flushdraw(state.main); }); - } else { - return "Surface is not active"; } - - return nullptr; } void App::enqueue_flushdraw(int surface_id) { @@ -579,7 +589,7 @@ void App::check_flushdraw(int surface_id) { } } -char const *App::api_enddraw(char const *drawing_name) { +void App::api_enddraw(char const *drawing_name) { for (unsigned i = 0, iend = this->pending_end_draw.size(); i < iend; i++) { auto n = this->lookup_name(this->pending_end_draw[i]); if (n && *n == drawing_name) { @@ -587,10 +597,8 @@ char const *App::api_enddraw(char const *drawing_name) { this->pending_end_draw.resize(iend - 1); this->activate(this->pending_end_draw[i]); this->emit_flushdraw(drawing_name); - return nullptr; } } - return "No EndDraw pending for surface"; } void App::api_ping() { this->dispatch_pending_events(); } @@ -663,7 +671,7 @@ void App::surface_removed(uint32_t surface_id) { } else { auto drawing_name = this->lookup_name(surface_id); if (drawing_name) { - this->api_deactivate_surface(drawing_name->c_str()); + this->api_deactivate_surface(drawing_name->c_str(), [](const char*){}); } } @@ -904,7 +912,7 @@ void App::deactivate(int id) { void App::deactivate_main_surface() { this->layers.main_surface = -1; - this->api_deactivate_surface(this->layers.main_surface_name.c_str()); + this->api_deactivate_surface(this->layers.main_surface_name.c_str(), [](const char*){}); } bool App::can_split(struct LayoutState const &state, int new_id) { |