talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit b6c563983a8cea0c13859f3b9bcd80cd8ec011ed
parent 7593136257a76ae5618fdcaeacd435475deee5e8
Author: Ricardo Mones <ricardo@mones.org>
Date:   Tue, 11 Mar 2014 21:34:26 +0100

Fix a couple of bugs

 • Incorrect initialization of radiobuttons on prefs (remember
   not to use the same variable for two purposes...)
 • Empty missing cache when changing to generated-avatar missing
   icon modes, otherwise they're still served as missing

Diffstat:
Msrc/plugins/libravatar/libravatar.c | 15+++++++--------
Msrc/plugins/libravatar/libravatar_prefs.c | 36++++++++++++++++++++++++------------
Msrc/plugins/libravatar/libravatar_prefs.h | 1+
3 files changed, 32 insertions(+), 20 deletions(-)

diff --git a/src/plugins/libravatar/libravatar.c b/src/plugins/libravatar/libravatar.c @@ -50,7 +50,6 @@ static const char *def_mode[] = { static guint update_hook_id; static guint render_hook_id; static gchar *cache_dir = NULL; /* dir-separator terminated */ -static GHashTable *misses; static gboolean libravatar_header_update_hook(gpointer source, gpointer data) { @@ -170,7 +169,7 @@ static GtkWidget *image_widget_from_url(const gchar *url, const gchar *md5) } if (filesize == 0) - missing_add_md5(misses, md5); + missing_add_md5(libravatarmisses, md5); } else { g_warning("could not open '%s' for writting\n", filename); } @@ -245,7 +244,7 @@ static gboolean libravatar_image_render_hook(gpointer source, gpointer data) md5_hex_digest(md5sum, a); /* try missing cache */ - if (is_missing_md5(misses, md5sum)) { + if (is_missing_md5(libravatarmisses, md5sum)) { return FALSE; } /* try disk cache */ @@ -315,10 +314,10 @@ static gint missing_cache_init() LIBRAVATAR_CACHE_DIR, G_DIR_SEPARATOR_S, LIBRAVATAR_MISSING_FILE, NULL); - misses = missing_load_from_file(cache_file); + libravatarmisses = missing_load_from_file(cache_file); g_free(cache_file); - if (misses == NULL) + if (libravatarmisses == NULL) return -1; return 0; @@ -328,13 +327,13 @@ static void missing_cache_done() { gchar *cache_file; - if (misses != NULL) { + if (libravatarmisses != NULL) { cache_file = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, LIBRAVATAR_CACHE_DIR, G_DIR_SEPARATOR_S, LIBRAVATAR_MISSING_FILE, NULL); - missing_save_to_file(misses, cache_file); + missing_save_to_file(libravatarmisses, cache_file); g_free(cache_file); - g_hash_table_destroy(misses); + g_hash_table_destroy(libravatarmisses); } } diff --git a/src/plugins/libravatar/libravatar_prefs.c b/src/plugins/libravatar/libravatar_prefs.c @@ -42,6 +42,7 @@ #define INTERVAL_MAX_H 720.0 LibravatarPrefs libravatarprefs; +GHashTable *libravatarmisses; struct LibravatarPrefsPage { @@ -134,18 +135,28 @@ static GtkWidget *p_create_frame_cache(struct LibravatarPrefsPage *page) static void default_mode_radio_button_cb(GtkToggleButton *button, gpointer data) { + guint mode; gboolean is_url; - if (gtk_toggle_button_get_active(button) == TRUE) { - is_url = (*((guint *)data) == DEF_MODE_URL)? TRUE: FALSE; - gtk_widget_set_sensitive(libravatarprefs_page.defm_url_text, is_url); - if (is_url) /* custom URL requires following redirects */ - gtk_toggle_button_set_active( - GTK_TOGGLE_BUTTON(libravatarprefs_page.allow_redirects_check), - TRUE); + if (gtk_toggle_button_get_active(button) != TRUE) + return; + + mode = *((guint *)data); + is_url = (mode == DEF_MODE_URL)? TRUE: FALSE; + + gtk_widget_set_sensitive(libravatarprefs_page.defm_url_text, is_url); + if (is_url) /* custom URL requires following redirects */ + gtk_toggle_button_set_active( + GTK_TOGGLE_BUTTON(libravatarprefs_page.allow_redirects_check), + TRUE); + + if (mode == DEF_MODE_NONE) { + prefs_common.enable_avatars = AVATARS_ENABLE_BOTH; + } else { /* don't waste time with headers that won't be displayed */ - prefs_common.enable_avatars = (*((guint *)data) == DEF_MODE_NONE) - ? AVATARS_ENABLE_BOTH: AVATARS_DISABLE; + prefs_common.enable_avatars = AVATARS_DISABLE; + /* empty missing cache when switching to generated */ + g_hash_table_remove_all(libravatarmisses); } } @@ -163,7 +174,7 @@ static GtkWidget *p_create_frame_missing(struct LibravatarPrefsPage *page) { GtkWidget *vbox, *radio[NUM_DEF_BUTTONS], *hbox, *label, *entry; gboolean enable = FALSE; - int i; + int i, e; gchar *radio_label[] = { _("None"), _("Mystery man"), @@ -186,7 +197,8 @@ static GtkWidget *p_create_frame_missing(struct LibravatarPrefsPage *page) vbox = gtk_vbox_new(FALSE, 6); for (i = 0; i < NUM_DEF_BUTTONS; ++i) { - enable = (!enable && libravatarprefs.default_mode == radio_value[i])? TRUE: FALSE; + enable = (libravatarprefs.default_mode == radio_value[i])? TRUE: FALSE; + e += enable? 1: 0; radio[i] = gtk_radio_button_new_with_label_from_widget( (i > 0)? GTK_RADIO_BUTTON(radio[i - 1]): NULL, radio_label[i]); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio[i]), enable); @@ -198,7 +210,7 @@ static GtkWidget *p_create_frame_missing(struct LibravatarPrefsPage *page) gtk_widget_show(radio[i]); page->defm_radio[i] = radio[i]; } - if (!enable) { /* unknown value, go default */ + if (e == 0) { /* unknown value, go default */ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio[0]), TRUE); libravatarprefs.default_mode = DEF_MODE_NONE; } diff --git a/src/plugins/libravatar/libravatar_prefs.h b/src/plugins/libravatar/libravatar_prefs.h @@ -48,6 +48,7 @@ struct _LibravatarPrefs }; extern LibravatarPrefs libravatarprefs; +extern GHashTable *libravatarmisses; void libravatar_prefs_init(void); void libravatar_prefs_done(void);