summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2023-08-29 09:26:41 -0400
committerWilliam Wilgus <wilgus.william@gmail.com>2023-08-29 09:26:41 -0400
commit873f49b1f066f41ef0649647188708645e6c0663 (patch)
treeec8845e8c201a018f96818189056a3ecf9c0c3b2
parente60ade1fbcb0f1c5a5cd15217b32565c80b166a7 (diff)
downloadrockbox-873f49b1f0.tar.gz
rockbox-873f49b1f0.zip
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
-rw-r--r--apps/gui/option_select.c8
-rw-r--r--apps/settings_list.c8
-rw-r--r--apps/settings_list.h2
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 */