diff --git a/apps/lang/english.lang b/apps/lang/english.lang index c41c819a7b..b0c7aed8f7 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -16497,6 +16497,20 @@ *: "Choose File" + + id: LANG_DISABLE_MAINMENU_SCROLLING + desc: Disable main menu scrolling + user: core + + *: "Disable main menu scrolling" + + + *: "Disable main menu scrolling" + + + *: "Disable main menu scrolling" + + id: LANG_REMAINING desc: Playing Time diff --git a/apps/lang/francais.lang b/apps/lang/francais.lang index 55b7ae9f63..ce907372b0 100644 --- a/apps/lang/francais.lang +++ b/apps/lang/francais.lang @@ -15080,3 +15080,17 @@ *: "Français" + + id: LANG_DISABLE_MAINMENU_SCROLLING + desc: Disable main menu scrolling + user: core + + *: "Disable main menu scrolling" + + + *: "Désactiver défilement dans le menu principal" + + + *: "Désactiver défilement dans le menu principal" + + diff --git a/apps/menus/display_menu.c b/apps/menus/display_menu.c index c5c5e6d908..2ce566a888 100644 --- a/apps/menus/display_menu.c +++ b/apps/menus/display_menu.c @@ -331,6 +331,7 @@ MENUITEM_SETTING(list_accel_start_delay, MENUITEM_SETTING(list_accel_wait, &global_settings.list_accel_wait, NULL); #endif /* HAVE_WHEEL_ACCELERATION */ MENUITEM_SETTING(offset_out_of_view, &global_settings.offset_out_of_view, NULL); +MENUITEM_SETTING(disable_mainmenu_scrolling, &global_settings.disable_mainmenu_scrolling, NULL); MENUITEM_SETTING(screen_scroll_step, &global_settings.screen_scroll_step, NULL); MENUITEM_SETTING(scroll_paginated, &global_settings.scroll_paginated, NULL); MENUITEM_SETTING(list_wraparound, &global_settings.list_wraparound, NULL); @@ -343,7 +344,9 @@ MAKE_MENU(scroll_settings_menu, ID2P(LANG_SCROLL_MENU), 0, Icon_NOICON, #ifdef HAVE_REMOTE_LCD &remote_scroll_sets, #endif - &offset_out_of_view, &screen_scroll_step, + &offset_out_of_view, + &disable_mainmenu_scrolling, + &screen_scroll_step, &scroll_paginated, &list_wraparound, &list_order, diff --git a/apps/settings.h b/apps/settings.h index 056f40df6a..1343538b0b 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -686,6 +686,7 @@ struct user_settings int screen_scroll_step; int show_path_in_browser; /* 0=off, 1=current directory, 2=full path */ bool offset_out_of_view; + bool disable_mainmenu_scrolling; unsigned char icon_file[MAX_FILENAME+1]; unsigned char viewers_icon_file[MAX_FILENAME+1]; unsigned char font_file[MAX_FILENAME+1]; /* last font */ diff --git a/apps/settings_list.c b/apps/settings_list.c index 98e8dec5a8..8ec434bd9b 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1319,6 +1319,8 @@ const struct settings_list settings[] = { #endif OFFON_SETTING(0, offset_out_of_view, LANG_SCREEN_SCROLL_VIEW, false, "Screen Scrolls Out Of View", NULL), + OFFON_SETTING(0, disable_mainmenu_scrolling, LANG_DISABLE_MAINMENU_SCROLLING, + false, "Disable main menu scrolling", NULL), INT_SETTING(F_PADTITLE, scroll_step, LANG_SCROLL_STEP, 6, "scroll step", UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL, lcd_scroll_step), INT_SETTING(F_PADTITLE, screen_scroll_step, LANG_SCREEN_SCROLL_STEP, 16, diff --git a/firmware/drivers/lcd-scroll.c b/firmware/drivers/lcd-scroll.c index 895cf98cba..8ab91ef642 100644 --- a/firmware/drivers/lcd-scroll.c +++ b/firmware/drivers/lcd-scroll.c @@ -24,6 +24,8 @@ /* This file is meant to be #included by scroll_engine.c (twice if a remote * is present) */ +#include "misc.h" +#include "settings.h" #ifndef LCDFN /* Not compiling for remote - define macros for main LCD. */ #define LCDFN(fn) lcd_ ## fn #define LCDM(ma) LCD_ ## ma @@ -195,8 +197,14 @@ static void LCDFN(scroll_worker)(void) s = &si->scroll[index]; /* check pause */ - if (TIME_BEFORE(current_tick, s->start_tick)) + if (TIME_BEFORE(current_tick, s->start_tick)) { continue; + } + + if (global_settings.disable_mainmenu_scrolling && get_current_activity() == ACTIVITY_MAINMENU) { + // No scrolling on the main menu if disabled (to not break themes with lockscreens) + continue; + } s->start_tick = current_tick;