From 873f49b1f066f41ef0649647188708645e6c0663 Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Tue, 29 Aug 2023 09:26:41 -0400 Subject: settings_list add F_CB_ONLY_IF_CHANGED for settings Recently I added F_CB_ON_SELECT_ONLY_IF_CHANGED in conjunction with the shuffle and repeat settings instead it makes more sense to make F_CB_ONLY_IF_CHANGED and apply to all callbacks (F_CB_ON_SELECT_ONLY or on_exit) Change-Id: I4376557d479aceb419f7b4b4e0998afc249c87ec --- apps/gui/option_select.c | 8 +++++--- apps/settings_list.c | 8 ++++---- apps/settings_list.h | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/gui/option_select.c b/apps/gui/option_select.c index d7f27f64eb..da6c703f40 100644 --- a/apps/gui/option_select.c +++ b/apps/gui/option_select.c @@ -472,7 +472,7 @@ bool option_screen(const struct settings_list *setting, bool cb_on_select_only = ((setting->flags & F_CB_ON_SELECT_ONLY) == F_CB_ON_SELECT_ONLY); bool cb_on_changed = - ((setting->flags & F_CB_ON_SELECT_ONLY_IF_CHANGED) == F_CB_ON_SELECT_ONLY_IF_CHANGED); + ((setting->flags & F_CB_ONLY_IF_CHANGED) == F_CB_ONLY_IF_CHANGED); int var_type = setting->flags&F_T_MASK; void (*function)(int) = NULL; @@ -578,8 +578,10 @@ bool option_screen(const struct settings_list *setting, } /* callback */ if (function && !cb_on_select_only) - function(*variable); - + { + if (!cb_on_changed || (*variable != oldvalue)) + function(*variable); + } /* if the volume is changing we need to let the skins know */ if (function == sound_get_fn(SOUND_VOLUME)) global_status.last_volume_change = current_tick; diff --git a/apps/settings_list.c b/apps/settings_list.c index a830ea7428..32b1e38999 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -929,15 +929,15 @@ const struct settings_list settings[] = { #endif /* playback */ - OFFON_SETTING(F_CB_ON_SELECT_ONLY_IF_CHANGED, playlist_shuffle, LANG_SHUFFLE, - false, "shuffle", shuffle_playlist_callback), + OFFON_SETTING(F_CB_ON_SELECT_ONLY|F_CB_ONLY_IF_CHANGED, playlist_shuffle, + LANG_SHUFFLE, false, "shuffle", shuffle_playlist_callback), SYSTEM_SETTING(NVRAM(4), resume_index, -1), SYSTEM_SETTING(NVRAM(4), resume_crc32, -1), SYSTEM_SETTING(NVRAM(4), resume_elapsed, -1), SYSTEM_SETTING(NVRAM(4), resume_offset, -1), - CHOICE_SETTING(F_CB_ON_SELECT_ONLY_IF_CHANGED, repeat_mode, LANG_REPEAT, - REPEAT_OFF, "repeat", "off,all,one,shuffle" + CHOICE_SETTING(F_CB_ON_SELECT_ONLY|F_CB_ONLY_IF_CHANGED, repeat_mode, + LANG_REPEAT, REPEAT_OFF, "repeat", "off,all,one,shuffle" #ifdef AB_REPEAT_ENABLE ",ab" #endif diff --git a/apps/settings_list.h b/apps/settings_list.h index 3e8739e525..3a6b0d60c2 100644 --- a/apps/settings_list.h +++ b/apps/settings_list.h @@ -102,7 +102,7 @@ struct table_setting { #define F_TABLE_SETTING 0x2000 #define F_ALLOW_ARBITRARY_VALS 0x4000 #define F_CB_ON_SELECT_ONLY 0x20000 -#define F_CB_ON_SELECT_ONLY_IF_CHANGED (F_CB_ON_SELECT_ONLY|F_TEMPVAR) +#define F_CB_ONLY_IF_CHANGED 0x40000 /* these use the _isfunc_type type for the function */ /* typedef int (*_isfunc_type)(void); */ #define F_MIN_ISFUNC 0x100000 /* min(above) is function pointer to above type */ -- cgit v1.2.3