1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
William Wilgus 2023-08-29 09:26:41 -04:00
parent e60ade1fbc
commit 873f49b1f0
3 changed files with 10 additions and 8 deletions

View file

@ -472,7 +472,7 @@ bool option_screen(const struct settings_list *setting,
bool cb_on_select_only = bool cb_on_select_only =
((setting->flags & F_CB_ON_SELECT_ONLY) == F_CB_ON_SELECT_ONLY); ((setting->flags & F_CB_ON_SELECT_ONLY) == F_CB_ON_SELECT_ONLY);
bool cb_on_changed = 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; int var_type = setting->flags&F_T_MASK;
void (*function)(int) = NULL; void (*function)(int) = NULL;
@ -578,8 +578,10 @@ bool option_screen(const struct settings_list *setting,
} }
/* callback */ /* callback */
if (function && !cb_on_select_only) 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 the volume is changing we need to let the skins know */
if (function == sound_get_fn(SOUND_VOLUME)) if (function == sound_get_fn(SOUND_VOLUME))
global_status.last_volume_change = current_tick; global_status.last_volume_change = current_tick;

View file

@ -929,15 +929,15 @@ const struct settings_list settings[] = {
#endif #endif
/* playback */ /* playback */
OFFON_SETTING(F_CB_ON_SELECT_ONLY_IF_CHANGED, playlist_shuffle, LANG_SHUFFLE, OFFON_SETTING(F_CB_ON_SELECT_ONLY|F_CB_ONLY_IF_CHANGED, playlist_shuffle,
false, "shuffle", shuffle_playlist_callback), LANG_SHUFFLE, false, "shuffle", shuffle_playlist_callback),
SYSTEM_SETTING(NVRAM(4), resume_index, -1), SYSTEM_SETTING(NVRAM(4), resume_index, -1),
SYSTEM_SETTING(NVRAM(4), resume_crc32, -1), SYSTEM_SETTING(NVRAM(4), resume_crc32, -1),
SYSTEM_SETTING(NVRAM(4), resume_elapsed, -1), SYSTEM_SETTING(NVRAM(4), resume_elapsed, -1),
SYSTEM_SETTING(NVRAM(4), resume_offset, -1), SYSTEM_SETTING(NVRAM(4), resume_offset, -1),
CHOICE_SETTING(F_CB_ON_SELECT_ONLY_IF_CHANGED, repeat_mode, LANG_REPEAT, CHOICE_SETTING(F_CB_ON_SELECT_ONLY|F_CB_ONLY_IF_CHANGED, repeat_mode,
REPEAT_OFF, "repeat", "off,all,one,shuffle" LANG_REPEAT, REPEAT_OFF, "repeat", "off,all,one,shuffle"
#ifdef AB_REPEAT_ENABLE #ifdef AB_REPEAT_ENABLE
",ab" ",ab"
#endif #endif

View file

@ -102,7 +102,7 @@ struct table_setting {
#define F_TABLE_SETTING 0x2000 #define F_TABLE_SETTING 0x2000
#define F_ALLOW_ARBITRARY_VALS 0x4000 #define F_ALLOW_ARBITRARY_VALS 0x4000
#define F_CB_ON_SELECT_ONLY 0x20000 #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 */ /* these use the _isfunc_type type for the function */
/* typedef int (*_isfunc_type)(void); */ /* typedef int (*_isfunc_type)(void); */
#define F_MIN_ISFUNC 0x100000 /* min(above) is function pointer to above type */ #define F_MIN_ISFUNC 0x100000 /* min(above) is function pointer to above type */