diff options
Diffstat (limited to 'apps/plugins/clock/clock_settings.c')
-rw-r--r-- | apps/plugins/clock/clock_settings.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/apps/plugins/clock/clock_settings.c b/apps/plugins/clock/clock_settings.c index 9bd7c90d3b..b59a265a3b 100644 --- a/apps/plugins/clock/clock_settings.c +++ b/apps/plugins/clock/clock_settings.c | |||
@@ -45,6 +45,14 @@ enum settings_file_status{ | |||
45 | 45 | ||
46 | struct clock_settings clock_settings; | 46 | struct clock_settings clock_settings; |
47 | 47 | ||
48 | /* The settings as they exist on the hard disk, so that | ||
49 | * we can know at saving time if changes have been made */ | ||
50 | struct clock_settings hdd_clock_settings; | ||
51 | |||
52 | bool settings_needs_saving(struct clock_settings* settings){ | ||
53 | return(rb->memcmp(settings, &hdd_clock_settings, sizeof(*settings))); | ||
54 | } | ||
55 | |||
48 | void clock_settings_reset(struct clock_settings* settings){ | 56 | void clock_settings_reset(struct clock_settings* settings){ |
49 | settings->mode = ANALOG; | 57 | settings->mode = ANALOG; |
50 | int i; | 58 | int i; |
@@ -98,6 +106,7 @@ enum settings_file_status clock_settings_load(struct clock_settings* settings, | |||
98 | rb->read(fd, settings, sizeof(*settings)); | 106 | rb->read(fd, settings, sizeof(*settings)); |
99 | rb->close(fd); | 107 | rb->close(fd); |
100 | apply_backlight_setting(settings->general.backlight); | 108 | apply_backlight_setting(settings->general.backlight); |
109 | rb->memcpy(&hdd_clock_settings, settings, sizeof(*settings)); | ||
101 | return(LOADED); | 110 | return(LOADED); |
102 | } | 111 | } |
103 | } | 112 | } |
@@ -171,6 +180,9 @@ void load_settings(void){ | |||
171 | void save_settings(void){ | 180 | void save_settings(void){ |
172 | int i; | 181 | int i; |
173 | struct screen* display; | 182 | struct screen* display; |
183 | if(!settings_needs_saving(&clock_settings)) | ||
184 | return; | ||
185 | |||
174 | FOR_NB_SCREENS(i){ | 186 | FOR_NB_SCREENS(i){ |
175 | display=rb->screens[i]; | 187 | display=rb->screens[i]; |
176 | display->clear_display(); | 188 | display->clear_display(); |