From bc571771fcc242df0e93e3c3df55189d2d479579 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Mon, 27 Apr 2026 21:14:35 +0200 Subject: [PATCH] properly separate menus --- src/activities/MenuListActivity.cpp | 1 + src/activities/settings/SettingInfo.h | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/activities/MenuListActivity.cpp b/src/activities/MenuListActivity.cpp index d3b919b5..46222c19 100644 --- a/src/activities/MenuListActivity.cpp +++ b/src/activities/MenuListActivity.cpp @@ -19,6 +19,7 @@ void MenuListActivity::onEnter() { Activity::onEnter(); if (!submenusPrepared) { prepareSubmenus(); + SettingInfo::insertSubcategorySeparators(menuItems); submenusPrepared = true; } initMenuList(); diff --git a/src/activities/settings/SettingInfo.h b/src/activities/settings/SettingInfo.h index 489673ae..9dd105c2 100644 --- a/src/activities/settings/SettingInfo.h +++ b/src/activities/settings/SettingInfo.h @@ -97,6 +97,12 @@ struct SettingInfo { static void prepareSubmenus(std::vector& items, std::vector& submenuData); + // Walks `items` and inserts a SettingInfo::Separator before each item whose subcategory + // differs from the previous one — same rule used by SettingsActivity for the main tabs. + // Existing separator rows preserve their own nameId as the running subcategory so a + // manually placed Separator suppresses an immediate auto-insert for the same group. + static void insertSubcategorySeparators(std::vector& items); + SettingInfo& withObfuscated() { obfuscated = true; return *this; @@ -286,3 +292,23 @@ inline void SettingInfo::prepareSubmenus(std::vector& items, } } } + +inline void SettingInfo::insertSubcategorySeparators(std::vector& items) { + if (items.empty()) return; + std::vector out; + out.reserve(items.size() + 4); + StrId lastSub = StrId::STR_NONE_OPT; + for (auto& item : items) { + if (item.isSeparator) { + lastSub = item.nameId; + out.push_back(std::move(item)); + continue; + } + if (item.subcategory != StrId::STR_NONE_OPT && item.subcategory != lastSub) { + out.push_back(SettingInfo::Separator(item.subcategory)); + lastSub = item.subcategory; + } + out.push_back(std::move(item)); + } + items.swap(out); +}