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…
Reference in New Issue
Block a user