mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-07-26 14:58:12 +00:00
fix(ui): home pages — unconditional SHUTDOWN eviction when required page absent
Previous fix only evicted SHUTDOWN when cur_len == PAGE_ORDER_LEN (full). If the array was not yet full but had SHUTDOWN + 2 missing pages (TOOLS and QUICK_MSG), TOOLS would fill the last slot but QUICK_MSG would be left out. Remove the cur_len guard: evict SHUTDOWN whenever any required page is missing, regardless of array fullness. This frees one slot before the append loop so all missing required pages can be added in a single pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -305,21 +305,21 @@ class SettingsScreen : public UIScreen {
|
||||
#endif
|
||||
NodePrefs::HPB_SETTINGS, NodePrefs::HPB_TOOLS, NodePrefs::HPB_QUICK_MSG,
|
||||
};
|
||||
// If the array is full but a required page is missing, evict SHUTDOWN
|
||||
// (it is handled by buildVisibleOrder's fallback and need not be explicit).
|
||||
if (cur_len == NodePrefs::PAGE_ORDER_LEN) {
|
||||
bool any_missing = false;
|
||||
for (int ri = 0; ri < (int)(sizeof(REQUIRED)/sizeof(REQUIRED[0])); ri++) {
|
||||
if (!(present & (uint16_t)(1u << REQUIRED[ri]))) { any_missing = true; break; }
|
||||
}
|
||||
if (any_missing) {
|
||||
for (int i = 0; i < cur_len; i++) {
|
||||
if (p->page_order[i] == NodePrefs::HPB_SHUTDOWN + 1) {
|
||||
for (int j = i; j < cur_len - 1; j++) p->page_order[j] = p->page_order[j + 1];
|
||||
p->page_order[--cur_len] = 0;
|
||||
present &= ~(uint16_t)(1u << NodePrefs::HPB_SHUTDOWN);
|
||||
break;
|
||||
}
|
||||
// If any required page is missing, evict SHUTDOWN to make room — it is
|
||||
// handled by buildVisibleOrder's fallback and need not be in the explicit
|
||||
// list. This frees a slot regardless of whether the array is full or not,
|
||||
// so multiple missing pages (e.g. TOOLS + QUICK_MSG) can all be appended.
|
||||
bool any_missing = false;
|
||||
for (int ri = 0; ri < (int)(sizeof(REQUIRED)/sizeof(REQUIRED[0])); ri++) {
|
||||
if (!(present & (uint16_t)(1u << REQUIRED[ri]))) { any_missing = true; break; }
|
||||
}
|
||||
if (any_missing && (present & (uint16_t)(1u << NodePrefs::HPB_SHUTDOWN))) {
|
||||
for (int i = 0; i < cur_len; i++) {
|
||||
if (p->page_order[i] == NodePrefs::HPB_SHUTDOWN + 1) {
|
||||
for (int j = i; j < cur_len - 1; j++) p->page_order[j] = p->page_order[j + 1];
|
||||
p->page_order[--cur_len] = 0;
|
||||
present &= ~(uint16_t)(1u << NodePrefs::HPB_SHUTDOWN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user