From b11ba14af38f3777b92dc22923ecbc09385e30a8 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Fri, 15 May 2026 00:14:27 +0200 Subject: [PATCH] Fix lost font selector --- src/SettingsList.h | 6 ++- src/activities/settings/SettingInfo.h | 9 ++++ src/activities/settings/SettingsActivity.cpp | 25 ++++------- .../settings/SettingsSubmenuActivity.cpp | 41 ++++++++++--------- .../settings/SettingsSubmenuActivity.h | 1 + 5 files changed, 43 insertions(+), 39 deletions(-) diff --git a/src/SettingsList.h b/src/SettingsList.h index c9a5c147..576b3853 100644 --- a/src/SettingsList.h +++ b/src/SettingsList.h @@ -100,7 +100,8 @@ inline const std::vector list = { SettingInfo::DynamicEnum(StrId::STR_FONT_FAMILY, {StrId::STR_BOOKERLY, StrId::STR_NOTO_SANS}, fontFamilyDynamicGetter, fontFamilyDynamicSetter, "fontFamily", StrId::STR_CAT_READER) .withSubcategory(StrId::STR_MENU_READER_FONT) - .withSubmenu(StrId::STR_MENU_READER_FONT), + .withSubmenu(StrId::STR_MENU_READER_FONT) + .withSelectorActivity(), SettingInfo::Enum(StrId::STR_FONT_SIZE, &CrossPointSettings::fontSize, {StrId::STR_SMALL, StrId::STR_MEDIUM, StrId::STR_LARGE, StrId::STR_X_LARGE, StrId::STR_TINY}, "fontSize", StrId::STR_CAT_READER) @@ -116,7 +117,8 @@ inline const std::vector list = { SettingInfo::DynamicEnum(StrId::STR_TXT_FONT_FAMILY, {StrId::STR_BOOKERLY, StrId::STR_NOTO_SANS}, txtFontFamilyDynamicGetter, txtFontFamilyDynamicSetter, "txtFontFamily", StrId::STR_CAT_READER) - .withSubmenu(StrId::STR_MENU_TXT_FONT), + .withSubmenu(StrId::STR_MENU_TXT_FONT) + .withSelectorActivity(), SettingInfo::Enum(StrId::STR_TXT_FONT_SIZE, &CrossPointSettings::txtFontSize, {StrId::STR_SMALL, StrId::STR_MEDIUM, StrId::STR_LARGE, StrId::STR_X_LARGE, StrId::STR_TINY}, "txtFontSize", StrId::STR_CAT_READER) diff --git a/src/activities/settings/SettingInfo.h b/src/activities/settings/SettingInfo.h index 3ca8d3bd..5b61b6b2 100644 --- a/src/activities/settings/SettingInfo.h +++ b/src/activities/settings/SettingInfo.h @@ -221,9 +221,18 @@ struct SettingInfo { } bool isSeparator = false; + bool usesSelectorActivity = false; // Confirm opens a full-screen selector instead of inline cycling StrId subcategory = StrId::STR_NONE_OPT; // Triggers a separator row on first use and on change StrId submenu = StrId::STR_NONE_OPT; // Routes item into a submenu; hidden from main list + // Marks this entry as requiring a full-screen selector activity on Confirm + // (instead of inline value cycling). The SettingsActivity / SettingsSubmenuActivity + // intercept entries with this flag before toggleValue() is called. + SettingInfo& withSelectorActivity() { + usesSelectorActivity = true; + return *this; + } + // Inserts a separator row in the parent tab when this item's subcategory first appears or changes. SettingInfo& withSubcategory(StrId sub) { subcategory = sub; diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index 13e6850f..3c160da5 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -278,23 +278,14 @@ void SettingsActivity::toggleCurrentSetting() { const auto& setting = (*currentSettings)[selectedSetting]; if (setting.isSeparator) return; - if (setting.type == SettingType::ENUM && setting.nameId == StrId::STR_FONT_FAMILY) { - startActivityForResult( - std::make_unique(renderer, mappedInput, FontSelectionActivity::Target::EPUB), - [this](const ActivityResult&) { - SETTINGS.saveToFile(); - needsHalfRefresh = true; - }); - return; - } - - if (setting.type == SettingType::ENUM && setting.nameId == StrId::STR_TXT_FONT_FAMILY) { - startActivityForResult( - std::make_unique(renderer, mappedInput, FontSelectionActivity::Target::TXT), - [this](const ActivityResult&) { - SETTINGS.saveToFile(); - needsHalfRefresh = true; - }); + if (setting.usesSelectorActivity) { + const auto target = (setting.valueGetter == txtFontFamilyDynamicGetter) ? FontSelectionActivity::Target::TXT + : FontSelectionActivity::Target::EPUB; + startActivityForResult(std::make_unique(renderer, mappedInput, target), + [this](const ActivityResult&) { + SETTINGS.saveToFile(); + needsHalfRefresh = true; + }); return; } diff --git a/src/activities/settings/SettingsSubmenuActivity.cpp b/src/activities/settings/SettingsSubmenuActivity.cpp index 754bac00..8ce26963 100644 --- a/src/activities/settings/SettingsSubmenuActivity.cpp +++ b/src/activities/settings/SettingsSubmenuActivity.cpp @@ -8,6 +8,7 @@ #include "CrossPointSettings.h" #include "FontSelectionActivity.h" #include "MappedInputManager.h" +#include "SdCardFontGlobals.h" #include "SettingActionDispatch.h" #include "components/UITheme.h" #include "fontIds.h" @@ -23,26 +24,6 @@ void SettingsSubmenuActivity::onActionSelected(int index) { const auto& setting = menuItems[index]; if (setting.isSeparator) return; - if (setting.type == SettingType::ENUM && setting.nameId == StrId::STR_FONT_FAMILY) { - startActivityForResult( - std::make_unique(renderer, mappedInput, FontSelectionActivity::Target::EPUB), - [this](const ActivityResult&) { - SETTINGS.saveToFile(); - needsHalfRefresh = true; - }); - return; - } - - if (setting.type == SettingType::ENUM && setting.nameId == StrId::STR_TXT_FONT_FAMILY) { - startActivityForResult( - std::make_unique(renderer, mappedInput, FontSelectionActivity::Target::TXT), - [this](const ActivityResult&) { - SETTINGS.saveToFile(); - needsHalfRefresh = true; - }); - return; - } - if (setting.type == SettingType::ACTION) { MenuResult menuResult; if (setting.action != SettingAction::None) { @@ -69,6 +50,26 @@ std::string SettingsSubmenuActivity::getItemValueString(int index) const { return MenuListActivity::getItemValueString(index); } +void SettingsSubmenuActivity::toggleCurrentItem() { + if (selectedIndex < 0 || selectedIndex >= static_cast(menuItems.size())) return; + const auto& setting = menuItems[selectedIndex]; + if (setting.isSeparator) return; + + if (setting.usesSelectorActivity) { + const auto target = (setting.valueGetter == txtFontFamilyDynamicGetter) ? FontSelectionActivity::Target::TXT + : FontSelectionActivity::Target::EPUB; + startActivityForResult(std::make_unique(renderer, mappedInput, target), + [this](const ActivityResult&) { + SETTINGS.saveToFile(); + needsHalfRefresh = true; + requestUpdate(); + }); + return; + } + + MenuListActivity::toggleCurrentItem(); +} + void SettingsSubmenuActivity::onSettingToggled(int /*index*/) { SETTINGS.saveToFile(); } void SettingsSubmenuActivity::render(RenderLock&&) { diff --git a/src/activities/settings/SettingsSubmenuActivity.h b/src/activities/settings/SettingsSubmenuActivity.h index 91b0f4b6..741fb386 100644 --- a/src/activities/settings/SettingsSubmenuActivity.h +++ b/src/activities/settings/SettingsSubmenuActivity.h @@ -16,6 +16,7 @@ class SettingsSubmenuActivity final : public MenuListActivity { // MenuListActivity overrides void onEnter() override; + void toggleCurrentItem() override; void onActionSelected(int index) override; void onSettingToggled(int index) override; std::string getItemValueString(int index) const override;