From bc57e5d64b3cfe54bbea914636232eb701de3dc5 Mon Sep 17 00:00:00 2001 From: zgredex <112968378+zgredex@users.noreply.github.com> Date: Tue, 12 May 2026 23:37:56 +0200 Subject: [PATCH] fix: jump page on hold in font family and language selection (#1925) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Holding the navigation button in **Settings → Reader → Font family** now advances the selection by a full visible page instead of one item at a time. - Same fix applied to **Settings → Language**, which had the same one-item-only behavior. - Mirrors the pattern already used in font download (ceb3fed) and chapter selection screens. ## Test plan - [ ] Settings → Reader → Font family: tap moves by one item; hold jumps a page (wraps at ends) - [ ] Settings → Language: tap moves by one item; hold jumps a page (wraps at ends) --- .../settings/FontSelectionActivity.cpp | 21 +++++++++++++++---- .../settings/LanguageSelectActivity.cpp | 12 +++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/activities/settings/FontSelectionActivity.cpp b/src/activities/settings/FontSelectionActivity.cpp index 87b3f0f7..1e5e568c 100644 --- a/src/activities/settings/FontSelectionActivity.cpp +++ b/src/activities/settings/FontSelectionActivity.cpp @@ -60,13 +60,26 @@ void FontSelectionActivity::loop() { return; } - buttonNavigator_.onNextRelease([this] { - selectedIndex_ = ButtonNavigator::nextIndex(selectedIndex_, static_cast(fonts_.size())); + const int listSize = static_cast(fonts_.size()); + const int pageItems = UITheme::getNumberOfItemsPerPage(renderer, true, false, true, false); + + buttonNavigator_.onNextRelease([this, listSize] { + selectedIndex_ = ButtonNavigator::nextIndex(selectedIndex_, listSize); requestUpdate(); }); - buttonNavigator_.onPreviousRelease([this] { - selectedIndex_ = ButtonNavigator::previousIndex(selectedIndex_, static_cast(fonts_.size())); + buttonNavigator_.onPreviousRelease([this, listSize] { + selectedIndex_ = ButtonNavigator::previousIndex(selectedIndex_, listSize); + requestUpdate(); + }); + + buttonNavigator_.onNextContinuous([this, listSize, pageItems] { + selectedIndex_ = ButtonNavigator::nextPageIndex(selectedIndex_, listSize, pageItems); + requestUpdate(); + }); + + buttonNavigator_.onPreviousContinuous([this, listSize, pageItems] { + selectedIndex_ = ButtonNavigator::previousPageIndex(selectedIndex_, listSize, pageItems); requestUpdate(); }); } diff --git a/src/activities/settings/LanguageSelectActivity.cpp b/src/activities/settings/LanguageSelectActivity.cpp index ab5fd02c..231cba52 100644 --- a/src/activities/settings/LanguageSelectActivity.cpp +++ b/src/activities/settings/LanguageSelectActivity.cpp @@ -37,6 +37,8 @@ void LanguageSelectActivity::loop() { return; } + const int pageItems = UITheme::getNumberOfItemsPerPage(renderer, true, false, true, false); + // Handle navigation buttonNavigator.onNextRelease([this] { selectedIndex = ButtonNavigator::nextIndex(static_cast(selectedIndex), totalItems); @@ -47,6 +49,16 @@ void LanguageSelectActivity::loop() { selectedIndex = ButtonNavigator::previousIndex(static_cast(selectedIndex), totalItems); requestUpdate(); }); + + buttonNavigator.onNextContinuous([this, pageItems] { + selectedIndex = ButtonNavigator::nextPageIndex(static_cast(selectedIndex), totalItems, pageItems); + requestUpdate(); + }); + + buttonNavigator.onPreviousContinuous([this, pageItems] { + selectedIndex = ButtonNavigator::previousPageIndex(static_cast(selectedIndex), totalItems, pageItems); + requestUpdate(); + }); } void LanguageSelectActivity::handleSelection() {