[PATCH] Fix default gradient factor setting

Linus Torvalds torvalds at linux-foundation.org
Fri Jan 11 12:29:42 PST 2013

Testing the new "don't even bother saving default values" showed that the 
default values for the deco gradient factors were undefined.

Or rather, they were over-defined.

We had defaults for the UI (30 and 75 for GFlow/GFhigh respectively - the 
config ones are in percent), *and* we had defaults in deco.c for the deco 
code itself (0.35 and 0.75 respectively - in deco.c they are represented 
as fractions, not percent).

And if the config entries had never been written, and were assumed to be 
the defaults, the UI code thought the defaults were 30/75, but they had 
never been *set* to those defaults, so actual default calculations 
silently used the 35/75 in deco.c, which is very confusing (you could go 
to the preferences page, see the 30/75 there, and it would not actually 
match th evalues used for computation).

Of course, with an old config file that saves even default entries, you'd 
never see that if you ever changed anything in the preferences, because 
you'd always have explicit gflow/high values. But now it's much easier to 
see the conflicting default values.

Fix it by just always using the UI defaults (or set values) to set the 
actual deco values.

Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>

This bug did exist before the movement to prefs.c and the new "don't save 
defaults", but it was a lot harder to trigger and see. You needed to never 
have saved any preferences values at all.

Now it's easy to see: set your GFlow/high values to the UI defaults 
(30/75), press OK, and restart subsurface. It would use the non-UI deco 
defaults (35/75) despite *saying* 30/75.

 prefs.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/prefs.c b/prefs.c
index 9dbb9ed4a87c..d15a97dd9191 100644
--- a/prefs.c
+++ b/prefs.c
@@ -144,16 +144,15 @@ void load_preferences(void)
 	if (conf_value) {
 		sscanf(conf_value, "%lf", &prefs.gflow);
 		prefs.gflow /= 100.0;
-		set_gf(prefs.gflow, -1.0);
 		free((void *)conf_value);
 	conf_value = subsurface_get_conf("gfhigh");
 	if (conf_value) {
 		sscanf(conf_value, "%lf", &prefs.gfhigh);
 		prefs.gfhigh /= 100.0;
-		set_gf(-1.0, prefs.gfhigh);
 		free((void *)conf_value);
+	set_gf(prefs.gflow, prefs.gfhigh);
 	divelist_font = subsurface_get_conf("divelist_font");
 	default_filename = subsurface_get_conf("default_filename");

More information about the subsurface mailing list