diff --git a/applications/gui/view.c b/applications/gui/view.c index aa506e74..7aaffe76 100644 --- a/applications/gui/view.c +++ b/applications/gui/view.c @@ -93,14 +93,19 @@ void* view_get_model(View* view) { } void view_commit_model(View* view) { + furi_assert(view); + view_unlock_model(view); + if(view->dispatcher) { + view_dispatcher_update(view->dispatcher, view); + } +} + +void view_unlock_model(View* view) { furi_assert(view); if(view->model_type == ViewModelTypeLocking) { ViewModelLocking* model = (ViewModelLocking*)(view->model); furi_check(osMutexRelease(model->mutex) == osOK); } - if(view->dispatcher) { - view_dispatcher_update(view->dispatcher, view); - } } void view_draw(View* view, Canvas* canvas) { @@ -108,7 +113,7 @@ void view_draw(View* view, Canvas* canvas) { if(view->draw_callback) { void* data = view_get_model(view); view->draw_callback(canvas, data); - view_commit_model(view); + view_unlock_model(view); } } diff --git a/applications/gui/view_i.h b/applications/gui/view_i.h index 34b0bbb3..243fd9e8 100644 --- a/applications/gui/view_i.h +++ b/applications/gui/view_i.h @@ -23,6 +23,9 @@ struct View { /* Set View dispatcher */ void view_set_dispatcher(View* view, ViewDispatcher* view_dispatcher); +/* Unlock model */ +void view_unlock_model(View* view); + /* Draw Callback for View dispatcher */ void view_draw(View* view, Canvas* canvas);