[FL-960] View dispatcher: lock gui when the view tree changes (#369)
* View dispatcher: lock gui when the view tree changes * View dispatcher: include gui interface * View dispatcher: lock gui also when view added (view_dispatcher_add_view fn)
This commit is contained in:
parent
7afdd14a4c
commit
651c5b35ca
@ -1,4 +1,5 @@
|
||||
#include "view_dispatcher_i.h"
|
||||
#include "gui_i.h"
|
||||
|
||||
ViewDispatcher* view_dispatcher_alloc() {
|
||||
ViewDispatcher* view_dispatcher = furi_alloc(sizeof(ViewDispatcher));
|
||||
@ -38,19 +39,40 @@ void view_dispatcher_add_view(ViewDispatcher* view_dispatcher, uint32_t view_id,
|
||||
furi_assert(view);
|
||||
// Check if view id is not used and resgister view
|
||||
furi_check(ViewDict_get(view_dispatcher->views, view_id) == NULL);
|
||||
|
||||
// Lock gui
|
||||
if(view_dispatcher->gui) {
|
||||
gui_lock(view_dispatcher->gui);
|
||||
}
|
||||
|
||||
ViewDict_set_at(view_dispatcher->views, view_id, view);
|
||||
view_set_dispatcher(view, view_dispatcher);
|
||||
|
||||
// Unlock gui
|
||||
if(view_dispatcher->gui) {
|
||||
gui_unlock(view_dispatcher->gui);
|
||||
}
|
||||
}
|
||||
|
||||
void view_dispatcher_remove_view(ViewDispatcher* view_dispatcher, uint32_t view_id) {
|
||||
furi_assert(view_dispatcher);
|
||||
|
||||
// Lock gui
|
||||
if(view_dispatcher->gui) {
|
||||
gui_lock(view_dispatcher->gui);
|
||||
}
|
||||
|
||||
// Disable the view if it is active
|
||||
if(view_dispatcher->current_view == *ViewDict_get(view_dispatcher->views, view_id)) {
|
||||
view_dispatcher_set_current_view(view_dispatcher, NULL);
|
||||
}
|
||||
// Remove view
|
||||
ViewDict_erase(view_dispatcher->views, view_id);
|
||||
|
||||
// Unlock gui
|
||||
if(view_dispatcher->gui) {
|
||||
gui_unlock(view_dispatcher->gui);
|
||||
}
|
||||
}
|
||||
|
||||
void view_dispatcher_switch_to_view(ViewDispatcher* view_dispatcher, uint32_t view_id) {
|
||||
|
Loading…
Reference in New Issue
Block a user