GUI: fix issue with gui update on view draw (#301)
This commit is contained in:
		@@ -93,14 +93,19 @@ void* view_get_model(View* view) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void view_commit_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);
 | 
					    furi_assert(view);
 | 
				
			||||||
    if(view->model_type == ViewModelTypeLocking) {
 | 
					    if(view->model_type == ViewModelTypeLocking) {
 | 
				
			||||||
        ViewModelLocking* model = (ViewModelLocking*)(view->model);
 | 
					        ViewModelLocking* model = (ViewModelLocking*)(view->model);
 | 
				
			||||||
        furi_check(osMutexRelease(model->mutex) == osOK);
 | 
					        furi_check(osMutexRelease(model->mutex) == osOK);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if(view->dispatcher) {
 | 
					 | 
				
			||||||
        view_dispatcher_update(view->dispatcher, view);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void view_draw(View* view, Canvas* canvas) {
 | 
					void view_draw(View* view, Canvas* canvas) {
 | 
				
			||||||
@@ -108,7 +113,7 @@ void view_draw(View* view, Canvas* canvas) {
 | 
				
			|||||||
    if(view->draw_callback) {
 | 
					    if(view->draw_callback) {
 | 
				
			||||||
        void* data = view_get_model(view);
 | 
					        void* data = view_get_model(view);
 | 
				
			||||||
        view->draw_callback(canvas, data);
 | 
					        view->draw_callback(canvas, data);
 | 
				
			||||||
        view_commit_model(view);
 | 
					        view_unlock_model(view);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,9 @@ struct View {
 | 
				
			|||||||
/* Set View dispatcher */
 | 
					/* Set View dispatcher */
 | 
				
			||||||
void view_set_dispatcher(View* view, ViewDispatcher* view_dispatcher);
 | 
					void view_set_dispatcher(View* view, ViewDispatcher* view_dispatcher);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Unlock model */
 | 
				
			||||||
 | 
					void view_unlock_model(View* view);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Draw Callback for View dispatcher */
 | 
					/* Draw Callback for View dispatcher */
 | 
				
			||||||
void view_draw(View* view, Canvas* canvas);
 | 
					void view_draw(View* view, Canvas* canvas);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user