From 5ae9b35372237e9b1243e0e38c0114e2aa4f1cfe Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Tue, 5 Apr 2011 18:13:24 +0200 Subject: [PATCH 1/5] Make setting the X-Mailer header an account option. Enabled by default. --- src/account.c | 1 + src/compose.c | 3 ++- src/prefs_account.c | 22 ++++++++++++++++++++++ src/prefs_account.h | 1 + 4 files changed, 26 insertions(+), 1 deletions(-) diff --git a/src/account.c b/src/account.c index 25171a6..a3ce627 100644 --- a/src/account.c +++ b/src/account.c @@ -938,6 +938,7 @@ static void account_clone(GtkWidget *widget, gpointer data) /* send */ ACP_FASSIGN(gen_msgid); + ACP_FASSIGN(gen_xmailer); ACP_FASSIGN(add_customhdr); ACP_FASSIGN(use_smtp_auth); ACP_FASSIGN(smtp_auth_type); diff --git a/src/compose.c b/src/compose.c index 3a656c7..7c7790c 100644 --- a/src/compose.c +++ b/src/compose.c @@ -6227,7 +6227,8 @@ static gchar *compose_get_header(Compose *compose) } /* Program version and system info */ - if (g_slist_length(compose->to_list) && !IS_IN_CUSTOM_HEADER("X-Mailer") && + if (compose->account->gen_xmailer && + g_slist_length(compose->to_list) && !IS_IN_CUSTOM_HEADER("X-Mailer") && !compose->newsgroup_list) { g_string_append_printf(header, "X-Mailer: %s (GTK+ %d.%d.%d; %s)\n", prog_version, diff --git a/src/prefs_account.c b/src/prefs_account.c index 705e66b..bef8c6e 100644 --- a/src/prefs_account.c +++ b/src/prefs_account.c @@ -162,6 +162,7 @@ typedef struct SendPage GtkWidget *vbox; GtkWidget *msgid_checkbtn; + GtkWidget *xmailer_checkbtn; GtkWidget *customhdr_checkbtn; GtkWidget *msgid_with_addr_checkbtn; GtkWidget *smtp_auth_checkbtn; @@ -500,6 +501,10 @@ static PrefParam send_param[] = { &send_page.msgid_checkbtn, prefs_set_data_from_toggle, prefs_set_toggle}, + {"generate_xmailer", "TRUE", &tmp_ac_prefs.gen_xmailer, P_BOOL, + &send_page.xmailer_checkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"add_custom_header", "FALSE", &tmp_ac_prefs.add_customhdr, P_BOOL, &send_page.customhdr_checkbtn, prefs_set_data_from_toggle, prefs_set_toggle}, @@ -1652,6 +1657,7 @@ static void send_create_widget_func(PrefsPage * _page, GtkWidget *vbox2; GtkWidget *frame; GtkWidget *msgid_checkbtn; + GtkWidget *xmailer_checkbtn; GtkWidget *hbox; GtkWidget *customhdr_checkbtn; GtkWidget *customhdr_edit_btn; @@ -1683,6 +1689,8 @@ static void send_create_widget_func(PrefsPage * _page, PACK_CHECK_BUTTON (vbox2, checkbtn_msgid_with_addr, _("Send account mail address in Message-ID")); + PACK_CHECK_BUTTON (vbox2, xmailer_checkbtn, _("Generate X-Mailer")); + hbox = gtk_hbox_new (FALSE, 12); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); @@ -1831,6 +1839,7 @@ static void send_create_widget_func(PrefsPage * _page, gtk_box_pack_start (GTK_BOX (hbox), pop_auth_minutes_lbl, FALSE, FALSE, 0); page->msgid_checkbtn = msgid_checkbtn; + page->xmailer_checkbtn = xmailer_checkbtn; page->customhdr_checkbtn = customhdr_checkbtn; page->msgid_with_addr_checkbtn = checkbtn_msgid_with_addr; @@ -3909,8 +3918,12 @@ static void prefs_account_protocol_set_optmenu(PrefParam *pparam) GTK_TOGGLE_BUTTON(send_page.msgid_checkbtn), TRUE); gtk_widget_hide(send_page.msgid_checkbtn); + /* XXX: unsure what this is for */ + gtk_widget_hide(send_page.xmailer_checkbtn); } else { gtk_widget_show(send_page.msgid_checkbtn); + /* XXX: unsure what this is for */ + gtk_widget_show(send_page.xmailer_checkbtn); } } } @@ -4060,6 +4073,7 @@ static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data) gtk_widget_hide(protocol_optmenu->no_imap_warn_label); #endif gtk_widget_show(send_page.msgid_checkbtn); + gtk_widget_show(send_page.xmailer_checkbtn); gtk_widget_show(basic_page.nntpserv_label); gtk_widget_show(basic_page.nntpserv_entry); gtk_table_set_row_spacing (GTK_TABLE (basic_page.serv_table), @@ -4157,6 +4171,7 @@ static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data) break; case A_LOCAL: gtk_widget_show(send_page.msgid_checkbtn); + gtk_widget_show(send_page.xmailer_checkbtn); gtk_widget_hide(protocol_optmenu->no_imap_warn_icon); gtk_widget_hide(protocol_optmenu->no_imap_warn_label); gtk_widget_hide(basic_page.nntpserv_label); @@ -4260,6 +4275,11 @@ static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data) GTK_TOGGLE_BUTTON(send_page.msgid_checkbtn), TRUE); gtk_widget_hide(send_page.msgid_checkbtn); + if (new_account) + gtk_toggle_button_set_active( + GTK_TOGGLE_BUTTON(send_page.xmailer_checkbtn), + TRUE); + gtk_widget_hide(send_page.xmailer_checkbtn); gtk_widget_hide(basic_page.nntpserv_label); gtk_widget_hide(basic_page.nntpserv_entry); gtk_table_set_row_spacing (GTK_TABLE (basic_page.serv_table), @@ -4356,6 +4376,7 @@ static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data) break; case A_NONE: gtk_widget_show(send_page.msgid_checkbtn); + gtk_widget_show(send_page.xmailer_checkbtn); gtk_widget_hide(protocol_optmenu->no_imap_warn_icon); gtk_widget_hide(protocol_optmenu->no_imap_warn_label); gtk_widget_hide(basic_page.nntpserv_label); @@ -4450,6 +4471,7 @@ static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data) case A_POP3: default: gtk_widget_show(send_page.msgid_checkbtn); + gtk_widget_show(send_page.xmailer_checkbtn); gtk_widget_hide(protocol_optmenu->no_imap_warn_icon); gtk_widget_hide(protocol_optmenu->no_imap_warn_label); gtk_widget_hide(basic_page.nntpserv_label); diff --git a/src/prefs_account.h b/src/prefs_account.h index ce8689a..4dc5227 100644 --- a/src/prefs_account.h +++ b/src/prefs_account.h @@ -106,6 +106,7 @@ struct _PrefsAccount /* Send */ gboolean gen_msgid; + gboolean gen_xmailer; gboolean add_customhdr; gboolean use_smtp_auth; SMTPAuthType smtp_auth_type; -- 1.7.6 From 84aa43d3983a250e5d51c2ca290133d9a81eadab Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Sat, 7 May 2011 17:30:51 +0200 Subject: [PATCH 2/5] In icon_list_append_icon(), escape sigshort so the brackets around the email address don't cause markup errors --- src/mimeview.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/src/mimeview.c b/src/mimeview.c index 1533bd6..9fc3696 100644 --- a/src/mimeview.c +++ b/src/mimeview.c @@ -2404,6 +2404,14 @@ static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo) g_free(tmp); } if (sigshort && *sigshort) { +#if GTK_CHECK_VERSION(2,12,0) + gchar *tmp; + tmp = g_markup_escape_text(sigshort, -1); + if (tmp != NULL) { + g_free(sigshort); + sigshort = tmp; + } +#endif tiptmp = g_strjoin("\n", tip, sigshort, NULL); g_free(tip); tip = tiptmp; -- 1.7.6 From 43f143ba60fc355a8ab7ef93340e98f249cede75 Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Mon, 25 Apr 2011 12:06:30 +0200 Subject: [PATCH 3/5] Remove a stray ECHO that caused quicksearch strings with spaces to be dumped to stdout --- src/matcher_parser_lex.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/src/matcher_parser_lex.c b/src/matcher_parser_lex.c index a6abec5..878d91c 100644 --- a/src/matcher_parser_lex.c +++ b/src/matcher_parser_lex.c @@ -1035,7 +1035,6 @@ YY_RULE_SETUP case 17: YY_RULE_SETUP #line 131 "matcher_parser_lex.l" -ECHO; YY_BREAK #line 1041 "matcher_parser_lex.c" case YY_STATE_EOF(INITIAL): -- 1.7.6 From 8da8b2c7c652d78f3403d33103e210c1aca51efa Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Sat, 9 Apr 2011 23:19:59 +0200 Subject: [PATCH 4/5] Truncate the tooltip text after 150 characters. Works around crashes in gdk with long space-less headers in the summaryview. --- src/summaryview.c | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-) diff --git a/src/summaryview.c b/src/summaryview.c index 5c8bc4d..5645400 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -6177,6 +6177,7 @@ static gboolean tooltip_cb (GtkWidget *widget, MsgInfo *info = NULL; GdkRectangle rect; gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT); + static const int max_characters_in_tooltip_text = 150; if (!prefs_common.show_tooltips) return FALSE; @@ -6212,7 +6213,23 @@ static gboolean tooltip_cb (GtkWidget *widget, if (!text || !*text) return FALSE; - formatted = g_strdup(text); + /* + * Really long words in tooltip texts cause gdk to abort(). + * Workaround this by limiting the text to max_characters_in_tooltip_text characters. + */ + if (g_utf8_strlen(text, max_characters_in_tooltip_text+1) < max_characters_in_tooltip_text) + formatted = g_strdup(text); + else + { + gchar *tmp; + static const gchar truncation_signs[] = " [...]"; + formatted = g_strndup(text, max_characters_in_tooltip_text); + if (!formatted) + return FALSE; + tmp = g_utf8_find_prev_char(formatted, formatted+max_characters_in_tooltip_text-sizeof(truncation_signs)); + g_utf8_strncpy(tmp, truncation_signs, sizeof(truncation_signs)); + debug_print("Truncated tooltip text to %s\n", formatted); + } g_strstrip(formatted); if (!vert) -- 1.7.6 From 047c9b667e8f306fe4c75ca9a6b26b45288dabd7 Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Tue, 5 Apr 2011 20:59:10 +0200 Subject: [PATCH 5/5] Only include the local domain in the Message-ID if neither the "include account address" or the "domain name" options are set If the "include account address" and the "domain name" options are both set, only include the account address. Remove the code to prevent multiple @ signs in the Message-ID. They can now only be caused by invalid input in which case all bets are off anyway. --- src/common/utils.c | 23 ++++++----------------- 1 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/common/utils.c b/src/common/utils.c index 93907ea..5491729 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -3839,23 +3839,12 @@ gchar *generate_msgid(gchar *buf, gint len, gchar *user_addr) t = time(NULL); lt = localtime_r(&t, &buft); - if (strcmp(buf, "") == 0) { - if (user_addr != NULL) - addr = g_strconcat(".", user_addr, "@", get_domain_name(), NULL); - else - addr = g_strconcat("@", get_domain_name(), NULL); - } else { - if (user_addr != NULL) - addr = g_strconcat(".", user_addr, "@", buf, NULL); - else - addr = g_strconcat("@", buf, NULL); - } - - /* Replace all @ but the last one in addr, with underscores. - * RFC 2822 States that msg-id syntax only allows one @. - */ - while (strchr(addr, '@') != NULL && strchr(addr, '@') != strrchr(addr, '@')) - *(strchr(addr, '@')) = '_'; + if (user_addr != NULL) + addr = g_strconcat(".", user_addr, NULL); + else if (strlen(buf) != 0) + addr = g_strconcat("@", buf, NULL); + else + addr = g_strconcat("@", get_domain_name(), NULL); g_snprintf(buf, len, "%04d%02d%02d%02d%02d%02d.%08x%s", lt->tm_year + 1900, lt->tm_mon + 1, -- 1.7.6