From 34dbb2ea868f35c484dd6fcf600ea2c502343a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=82=E3=81=8F?= Date: Mon, 11 Jan 2021 15:20:29 +0300 Subject: [PATCH] GUI: fix issue with gui update on view draw (#301) --- applications/gui/view.c | 13 +++++++++---- applications/gui/view_i.h | 3 +++ 2 files changed, 12 insertions(+), 4 deletions(-) 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);