shortcuts.c don't call settings_apply_skins() unless needed

Add F_NEEDAPPLY if F_THEMESETTING requires a call to settings_apply_skins()

Change-Id: Ied1bf7b2c4fb2e07bf1f54076e647bdc0844037a
This commit is contained in:
William Wilgus 2025-03-02 16:09:17 -05:00
parent 81c65536ec
commit 914fcab06a
4 changed files with 21 additions and 20 deletions

View file

@ -1385,6 +1385,7 @@ static char *debug_get_flags(uint32_t flags)
SETTINGFLAGS(F_RECSETTING);
SETTINGFLAGS(F_EQSETTING);
SETTINGFLAGS(F_SOUNDSETTING);
SETTINGFLAGS(F_NEEDAPPLY);
SETTINGFLAGS(F_CHOICE_SETTING);
SETTINGFLAGS(F_CHOICETALKS);
SETTINGFLAGS(F_TABLE_SETTING);

View file

@ -213,7 +213,7 @@
{load_from_cfg, write_to_cfg, is_change, set_default}}}}
#define VIEWPORT_SETTING(var,name) \
TEXT_SETTING(F_THEMESETTING,var,name,"-", NULL, NULL)
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY,var,name,"-", NULL, NULL)
/* some sets of values which are used more than once, to save memory */
static const char off[] = "off";
@ -1080,12 +1080,12 @@ const struct settings_list settings[] = {
ID2P(LANG_INVERT_CURSOR_POINTER),
ID2P(LANG_INVERT_CURSOR_BAR)),
#endif
CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, statusbar,
CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR|F_NEEDAPPLY, statusbar,
LANG_STATUS_BAR, STATUSBAR_TOP, "statusbar","off,top,bottom",
NULL, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
ID2P(LANG_STATUSBAR_BOTTOM)),
#ifdef HAVE_REMOTE_LCD
CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, remote_statusbar,
CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR|F_NEEDAPPLY, remote_statusbar,
LANG_REMOTE_STATUSBAR, STATUSBAR_TOP, "remote statusbar","off,top,bottom",
NULL, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
ID2P(LANG_STATUSBAR_BOTTOM)),
@ -1969,35 +1969,35 @@ const struct settings_list settings[] = {
#if CONFIG_TUNER
TEXT_SETTING(0, fmr_file, "fmr", "-",
FMPRESET_PATH "/", ".fmr"),
TEXT_SETTING(F_THEMESETTING,fms_file, "fms",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY,fms_file, "fms",
DEFAULT_FMS_NAME, SBS_DIR "/", ".fms"),
#ifdef HAVE_REMOTE_LCD
TEXT_SETTING(F_THEMESETTING,rfms_file, "rfms",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY,rfms_file, "rfms",
DEFAULT_FMS_NAME, SBS_DIR "/", ".rfms"),
#endif
#endif /* CONFIG_TUNER */
TEXT_SETTING(F_THEMESETTING, font_file, "font",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY, font_file, "font",
DEFAULT_FONTNAME, FONT_DIR "/", ".fnt"),
INT_SETTING(0, glyphs_to_cache, LANG_GLYPHS, DEFAULT_GLYPHS,
"glyphs", UNIT_INT, MIN_GLYPHS, MAX_GLYPHS, 10,
NULL, NULL, NULL),
#ifdef HAVE_REMOTE_LCD
TEXT_SETTING(F_THEMESETTING, remote_font_file, "remote font",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY, remote_font_file, "remote font",
DEFAULT_REMOTE_FONTNAME, FONT_DIR "/", ".fnt"),
#endif
TEXT_SETTING(F_THEMESETTING,wps_file, "wps",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY,wps_file, "wps",
DEFAULT_WPSNAME, WPS_DIR "/", ".wps"),
TEXT_SETTING(F_THEMESETTING,sbs_file, "sbs",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY,sbs_file, "sbs",
DEFAULT_SBSNAME, SBS_DIR "/", ".sbs"),
#ifdef HAVE_REMOTE_LCD
TEXT_SETTING(F_THEMESETTING,rwps_file,"rwps",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY,rwps_file,"rwps",
DEFAULT_WPSNAME, WPS_DIR "/", ".rwps"),
TEXT_SETTING(F_THEMESETTING,rsbs_file, "rsbs",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY,rsbs_file, "rsbs",
DEFAULT_SBSNAME, SBS_DIR "/", ".rsbs"),
#endif
TEXT_SETTING(0,lang_file,"lang","",LANG_DIR "/",".lng"),
#if LCD_DEPTH > 1
TEXT_SETTING(F_THEMESETTING,backdrop_file,"backdrop",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY,backdrop_file,"backdrop",
DEFAULT_BACKDROP, NULL, NULL),
#endif
TEXT_SETTING(0,kbd_file,"kbd","-",ROCKBOX_DIR "/",".kbd"),
@ -2061,20 +2061,20 @@ const struct settings_list settings[] = {
#endif /* HAVE_RTC_ALARM */
/* Customizable icons */
TEXT_SETTING(F_THEMESETTING, icon_file, "iconset", DEFAULT_ICONSET,
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY, icon_file, "iconset", DEFAULT_ICONSET,
ICON_DIR "/", ".bmp"),
TEXT_SETTING(F_THEMESETTING, viewers_icon_file, "viewers iconset",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY, viewers_icon_file, "viewers iconset",
DEFAULT_VIEWERS_ICONSET,
ICON_DIR "/", ".bmp"),
#ifdef HAVE_REMOTE_LCD
TEXT_SETTING(F_THEMESETTING, remote_icon_file, "remote iconset", "-",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY, remote_icon_file, "remote iconset", "-",
ICON_DIR "/", ".bmp"),
TEXT_SETTING(F_THEMESETTING, remote_viewers_icon_file,
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY, remote_viewers_icon_file,
"remote viewers iconset", "-",
ICON_DIR "/", ".bmp"),
#endif /* HAVE_REMOTE_LCD */
#ifdef HAVE_LCD_COLOR
TEXT_SETTING(F_THEMESETTING, colors_file, "filetype colours", "-",
TEXT_SETTING(F_THEMESETTING|F_NEEDAPPLY, colors_file, "filetype colours", "-",
THEME_DIR "/", ".colours"),
#endif
#ifdef HAVE_BUTTON_LIGHT

View file

@ -158,7 +158,7 @@ struct custom_setting {
#define F_RECSETTING 0x1000000
#define F_EQSETTING 0x2000000
#define F_SOUNDSETTING 0x4000000
/*#define _AVAILABLE_ 0x8000000*/
#define F_NEEDAPPLY 0x8000000 /*F_THEMESETTING needs apply to effect setting change*/
#define F_CB_ON_SELECT_ONLY 0x10000000 /* option_callback only called if selected */
#define F_CB_ONLY_IF_CHANGED 0x20000000 /* option_callback only called if setting changed */

View file

@ -697,9 +697,9 @@ static enum themable_icons shortcut_menu_get_icon(int selected_item, void * data
static void apply_new_setting(const struct settings_list *setting)
{
settings_apply(false);
if (setting->flags & F_THEMESETTING)
if ((setting->flags & (F_THEMESETTING|F_NEEDAPPLY)) == (F_THEMESETTING|F_NEEDAPPLY))
{
settings_apply_skins();
settings_apply_skins();
}
if (setting->setting == &global_settings.sleeptimer_duration && get_sleep_timer())
{