Rollback gui update visibility check, fixes gui thread lockup. (#340)
This commit is contained in:
		
							parent
							
								
									23f66c2cdd
								
							
						
					
					
						commit
						48191ea20a
					
				| @ -14,21 +14,9 @@ ViewPort* gui_view_port_find_enabled(ViewPortArray_t array) { | ||||
|     return NULL; | ||||
| } | ||||
| 
 | ||||
| void gui_update(Gui* gui, ViewPort* view_port) { | ||||
| void gui_update(Gui* gui) { | ||||
|     furi_assert(gui); | ||||
|     if(view_port) { | ||||
|         // Visibility check
 | ||||
|         gui_lock(gui); | ||||
|         for(size_t i = 0; i < GuiLayerMAX; i++) { | ||||
|             if(gui_view_port_find_enabled(gui->layers[i]) == view_port) { | ||||
|                 osThreadFlagsSet(gui->thread, GUI_THREAD_FLAG_DRAW); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         gui_unlock(gui); | ||||
|     } else { | ||||
|         osThreadFlagsSet(gui->thread, GUI_THREAD_FLAG_DRAW); | ||||
|     } | ||||
|     osThreadFlagsSet(gui->thread, GUI_THREAD_FLAG_DRAW); | ||||
| } | ||||
| 
 | ||||
| void gui_input_events_callback(const void* value, void* ctx) { | ||||
| @ -206,7 +194,7 @@ void gui_add_view_port(Gui* gui, ViewPort* view_port, GuiLayer layer) { | ||||
|     view_port_gui_set(view_port, gui); | ||||
|     gui_unlock(gui); | ||||
| 
 | ||||
|     gui_update(gui, NULL); | ||||
|     gui_update(gui); | ||||
| } | ||||
| 
 | ||||
| void gui_remove_view_port(Gui* gui, ViewPort* view_port) { | ||||
| @ -297,10 +285,8 @@ Gui* gui_alloc() { | ||||
|     Gui* gui = furi_alloc(sizeof(Gui)); | ||||
|     // Thread ID
 | ||||
|     gui->thread = osThreadGetId(); | ||||
|     gui->mutex_attr.name = "mtx_gui"; | ||||
|     gui->mutex_attr.attr_bits |= osMutexRecursive; | ||||
|     // Allocate mutex
 | ||||
|     gui->mutex = osMutexNew(&gui->mutex_attr); | ||||
|     gui->mutex = osMutexNew(NULL); | ||||
|     furi_check(gui->mutex); | ||||
|     // Layers
 | ||||
|     for(size_t i = 0; i < GuiLayerMAX; i++) { | ||||
|  | ||||
| @ -34,7 +34,6 @@ ARRAY_DEF(ViewPortArray, ViewPort*, M_PTR_OPLIST); | ||||
| struct Gui { | ||||
|     // Thread and lock
 | ||||
|     osThreadId_t thread; | ||||
|     osMutexAttr_t mutex_attr; | ||||
|     osMutexId_t mutex; | ||||
|     // Layers and Canvas
 | ||||
|     ViewPortArray_t layers[GuiLayerMAX]; | ||||
| @ -51,12 +50,9 @@ struct Gui { | ||||
| ViewPort* gui_view_port_find_enabled(ViewPortArray_t array); | ||||
| 
 | ||||
| /* Update GUI, request redraw
 | ||||
|  * Real redraw event will be issued only if view_port is currently visible | ||||
|  * Setting view_port to NULL forces redraw, but must be avoided | ||||
|  * @param gui, Gui instance | ||||
|  * @param view_port, ViewPort instance or NULL | ||||
|  */ | ||||
| void gui_update(Gui* gui, ViewPort* view_port); | ||||
| void gui_update(Gui* gui); | ||||
| 
 | ||||
| void gui_input_events_callback(const void* value, void* ctx); | ||||
| 
 | ||||
|  | ||||
| @ -43,7 +43,7 @@ void view_port_enabled_set(ViewPort* view_port, bool enabled) { | ||||
|     furi_assert(view_port); | ||||
|     if(view_port->is_enabled != enabled) { | ||||
|         view_port->is_enabled = enabled; | ||||
|         if(view_port->gui) gui_update(view_port->gui, NULL); | ||||
|         if(view_port->gui) gui_update(view_port->gui); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -69,7 +69,7 @@ void view_port_input_callback_set( | ||||
| 
 | ||||
| void view_port_update(ViewPort* view_port) { | ||||
|     furi_assert(view_port); | ||||
|     if(view_port->gui && view_port->is_enabled) gui_update(view_port->gui, view_port); | ||||
|     if(view_port->gui && view_port->is_enabled) gui_update(view_port->gui); | ||||
| } | ||||
| 
 | ||||
| void view_port_gui_set(ViewPort* view_port, Gui* gui) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 あく
						あく