diff options
author | Guy Harris <guy@alum.mit.edu> | 2004-10-16 23:32:24 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2004-10-16 23:32:24 +0000 |
commit | 727ad67453a879a58ab46adeee058d2acbbe5c13 (patch) | |
tree | 9fe0f60bac0ddcee9a3c48d3ff0ca8003b3ca707 /gtk/prefs_dlg.c | |
parent | de1bcd5d88f4ecd85df770ef5a7a0357b539ee4f (diff) |
Remove the fixed maximum number of subranges in a range_t; dynamically
allocate them to be large enough.
Add checks that the numbers in the range fit in a guint32.
Check the validity of a range before saving or printing, and report
errors in an alert box.
Clean up white space.
svn path=/trunk/; revision=12320
Diffstat (limited to 'gtk/prefs_dlg.c')
-rw-r--r-- | gtk/prefs_dlg.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/gtk/prefs_dlg.c b/gtk/prefs_dlg.c index c5c305ed16..f2b31f4c60 100644 --- a/gtk/prefs_dlg.c +++ b/gtk/prefs_dlg.c @@ -206,8 +206,10 @@ pref_show(pref_t *pref, gpointer user_data) { char range_string[MAXRANGESTRING]; - pref->saved_val.rangeval = *pref->varp.rangep; - range_convert_range(pref->varp.rangep, range_string); + if (pref->saved_val.range != NULL) + g_free(pref->saved_val.range); + pref->saved_val.range = range_copy(*pref->varp.range); + range_convert_range(*pref->varp.range, range_string); pref->control = create_preference_entry(main_tb, pref->ordinal, label_string, pref->description, range_string); @@ -901,14 +903,15 @@ pref_check(pref_t *pref, gpointer user_data) case PREF_RANGE: str_val = gtk_entry_get_text(GTK_ENTRY(pref->control)); - if (strlen(str_val)) { - range_t newrange; + if (strlen(str_val) != 0) { + range_t *newrange; if (range_convert_str(&newrange, str_val, pref->info.max_value) != CVT_NO_ERROR) { *badpref = pref; return PREFS_SET_SYNTAX_ERR; /* range was bad */ } + g_free(newrange); } break; @@ -988,21 +991,24 @@ pref_fetch(pref_t *pref, gpointer user_data) case PREF_RANGE: { - range_t newrange; + range_t *newrange; convert_ret_t ret; str_val = gtk_entry_get_text(GTK_ENTRY(pref->control)); ret = range_convert_str(&newrange, str_val, pref->info.max_value); -#if 0 if (ret != CVT_NO_ERROR) +#if 0 return PREFS_SET_SYNTAX_ERR; /* range was bad */ +#else + return 0; /* XXX - should fail */ #endif - if (!ranges_are_equal(pref->varp.rangep, &newrange)) - { + if (!ranges_are_equal(*pref->varp.range, newrange)) { *pref_changed_p = TRUE; - *pref->varp.rangep = newrange; - } + g_free(*pref->varp.range); + *pref->varp.range = newrange; + } else + g_free(newrange); break; } @@ -1055,6 +1061,10 @@ pref_clean(pref_t *pref, gpointer user_data _U_) break; case PREF_RANGE: + if (pref->saved_val.range != NULL) { + g_free(pref->saved_val.range); + pref->saved_val.range = NULL; + } break; case PREF_OBSOLETE: @@ -1314,10 +1324,10 @@ pref_revert(pref_t *pref, gpointer user_data) break; case PREF_RANGE: - if (!ranges_are_equal(pref->varp.rangep, &pref->saved_val.rangeval)) - { + if (!ranges_are_equal(*pref->varp.range, pref->saved_val.range)) { *pref_changed_p = TRUE; - *pref->varp.rangep = pref->saved_val.rangeval; + g_free(*pref->varp.range); + *pref->varp.range = range_copy(pref->saved_val.range); } break; |