diff --git a/radio/src/gui/colorlcd/model/model_select.cpp b/radio/src/gui/colorlcd/model/model_select.cpp index 1a486915a..2cb2d6518 100644 --- a/radio/src/gui/colorlcd/model/model_select.cpp +++ b/radio/src/gui/colorlcd/model/model_select.cpp @@ -365,8 +365,15 @@ class ModelsPageBody : public Window memcpy(g_eeGeneral.currModelFilename, model->modelFilename, LEN_MODEL_FILENAME); - // Delete old main view layout + // Pause widget refresh + MainWindow::instance()->enableWidgetRefresh(false); + + // Delete old main view layout and top bar widgets: loadModel() can + // re-enter the UI refresh loop (throttle / switch warnings spin + // MainWindow::run()) while g_model is being reset, and a surviving + // widget would then read torn-down persistent data. LayoutFactory::deleteCustomScreens(); + LayoutFactory::deleteTopBarWidgets(); loadModel(g_eeGeneral.currModelFilename, true); modelslist.setCurrentModel(model); @@ -374,6 +381,9 @@ class ModelsPageBody : public Window // Load new main view layout LayoutFactory::loadCustomScreens(); + // Enable widget refresh + MainWindow::instance()->enableWidgetRefresh(true); + storageDirty(EE_GENERAL); storageCheck(true); }