talons

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

commit f93591fbc660c967c79695e4275233e74f27befd
parent 2212eef1fa41639671bb2d33858debf012084f50
Author: Colin Leroy <colin@colino.net>
Date:   Thu, 28 Aug 2008 13:09:09 +0000

2008-08-28 [colin]	3.5.0cvs78

	* src/Makefile.am
	* src/account.c
	* src/compose.c
	* src/prefs_account.c
	* src/prefs_account.h
	* src/privacy.c
	* src/privacy.h
	* src/procmime.c
	* src/stock_pixmap.c
	* src/stock_pixmap.h
	* src/summaryview.c
	* src/pixmaps/key_gpg_signed.xpm
		Fix bug 1412, "Sign reply, if mail was signed"
		Add an account preference to sign replies to signed mails

Diffstat:
MChangeLog | 17+++++++++++++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/Makefile.am | 1+
Msrc/account.c | 1+
Msrc/compose.c | 13+++++++++++++
Asrc/pixmaps/key_gpg_signed.xpm | 34++++++++++++++++++++++++++++++++++
Msrc/prefs_account.c | 12++++++++++++
Msrc/prefs_account.h | 1+
Msrc/privacy.c | 22++++++++++++++++++++++
Msrc/privacy.h | 1+
Msrc/procmime.c | 2++
Msrc/stock_pixmap.c | 2++
Msrc/stock_pixmap.h | 1+
Msrc/summaryview.c | 14++++++++++++--
15 files changed, 121 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,20 @@ +2008-08-28 [colin] 3.5.0cvs78 + + * src/Makefile.am + * src/account.c + * src/compose.c + * src/prefs_account.c + * src/prefs_account.h + * src/privacy.c + * src/privacy.h + * src/procmime.c + * src/stock_pixmap.c + * src/stock_pixmap.h + * src/summaryview.c + * src/pixmaps/key_gpg_signed.xpm + Fix bug 1412, "Sign reply, if mail was signed" + Add an account preference to sign replies to signed mails + 2008-08-28 [iwkse] 3.5.0cvs77 * src/prefs_filtering.c diff --git a/PATCHSETS b/PATCHSETS @@ -3489,3 +3489,4 @@ ( cvs diff -u -r 1.1.2.5 -r 1.1.2.6 src/gtk/gtkcmctree.c; ) > 3.5.0cvs75.patchset ( cvs diff -u -r 1.115.2.202 -r 1.115.2.203 src/main.c; ) > 3.5.0cvs76.patchset ( cvs diff -u -r 1.59.2.71 -r 1.59.2.72 src/prefs_filtering.c; ) > 3.5.0cvs77.patchset +( cvs diff -u -r 1.155.2.89 -r 1.155.2.90 src/Makefile.am; cvs diff -u -r 1.61.2.81 -r 1.61.2.82 src/account.c; cvs diff -u -r 1.382.2.470 -r 1.382.2.471 src/compose.c; cvs diff -u -r 1.105.2.142 -r 1.105.2.143 src/prefs_account.c; cvs diff -u -r 1.49.2.37 -r 1.49.2.38 src/prefs_account.h; cvs diff -u -r 1.10.2.15 -r 1.10.2.16 src/privacy.c; cvs diff -u -r 1.10.2.16 -r 1.10.2.17 src/privacy.h; cvs diff -u -r 1.49.2.113 -r 1.49.2.114 src/procmime.c; cvs diff -u -r 1.25.2.59 -r 1.25.2.60 src/stock_pixmap.c; cvs diff -u -r 1.18.2.36 -r 1.18.2.37 src/stock_pixmap.h; cvs diff -u -r 1.395.2.383 -r 1.395.2.384 src/summaryview.c; diff -u /dev/null src/pixmaps/key_gpg_signed.xpm; ) > 3.5.0cvs78.patchset diff --git a/configure.ac b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=5 MICRO_VERSION=0 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=77 +EXTRA_VERSION=78 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/Makefile.am b/src/Makefile.am @@ -380,6 +380,7 @@ EXTRA_DIST = \ pixmaps/insert_file.xpm \ pixmaps/jpilot.xpm \ pixmaps/key.xpm \ + pixmaps/key_gpg_signed.xpm \ pixmaps/ldap.xpm \ pixmaps/linewrap.xpm \ pixmaps/linewrapcurrent.xpm \ diff --git a/src/account.c b/src/account.c @@ -992,6 +992,7 @@ static void account_clone(GtkWidget *widget, gpointer data) ACP_FASSIGN(default_encrypt); ACP_FASSIGN(default_encrypt_reply); ACP_FASSIGN(default_sign); + ACP_FASSIGN(default_sign_reply); ACP_FASSIGN(save_encrypted_as_clear_text); ACP_FASSIGN(encrypt_to_self); diff --git a/src/compose.c b/src/compose.c @@ -1504,6 +1504,11 @@ static Compose *compose_generic_reply(MsgInfo *msginfo, compose_force_encryption(compose, account, FALSE); } + privacy_msginfo_get_signed_state(compose->replyinfo); + if (MSG_IS_SIGNED(compose->replyinfo->flags) && account->default_sign_reply) { + compose_force_signing(compose, account); + } + SIGNAL_BLOCK(textbuf); if (account->auto_sig) @@ -10558,6 +10563,7 @@ static void compose_reply_from_messageview_real(MessageView *msgview, GSList *ms GSList *new_msglist = NULL; MsgInfo *tmp_msginfo = NULL; gboolean originally_enc = FALSE; + gboolean originally_sig = FALSE; Compose *compose = NULL; g_return_if_fail(msgview != NULL); @@ -10576,6 +10582,9 @@ static void compose_reply_from_messageview_real(MessageView *msgview, GSList *ms new_msglist = g_slist_append(NULL, tmp_msginfo); originally_enc = MSG_IS_ENCRYPTED(orig_msginfo->flags); + privacy_msginfo_get_signed_state(orig_msginfo); + originally_sig = MSG_IS_SIGNED(orig_msginfo->flags); + tmp_msginfo->folder = orig_msginfo->folder; tmp_msginfo->msgnum = orig_msginfo->msgnum; if (orig_msginfo->tags) @@ -10598,6 +10607,10 @@ static void compose_reply_from_messageview_real(MessageView *msgview, GSList *ms compose_force_encryption(compose, compose->account, FALSE); } + if (compose && originally_sig && compose->account->default_sign_reply) { + compose_force_signing(compose, compose->account); + } + g_free(body); } diff --git a/src/pixmaps/key_gpg_signed.xpm b/src/pixmaps/key_gpg_signed.xpm @@ -0,0 +1,34 @@ +/* XPM */ +static char * key_gpg_signed_xpm[] = { +"11 12 19 1", +" c None", +". c #D39C0A", +"+ c #E4AB0B", +"@ c #DA7D25", +"# c #E4B600", +"$ c #E96B00", +"% c #DA2D01", +"& c #E9AD00", +"* c #E94500", +"= c #B11E04", +"- c #E7BC01", +"; c #E99400", +"> c #E02F00", +", c #E9BD00", +"' c #E97800", +") c #040204", +"! c #E7C50E", +"~ c #E9B802", +"{ c #FCFE04", +" ", +" .+@ ", +" #$% ", +" &*= ", +" -;> ", +" ,'))) ", +" !~){{{)", +" ))))){{{{)", +"){{{{{{{){)", +" ){){){{{{)", +" ) ) ){{{)", +" ))) "}; diff --git a/src/prefs_account.c b/src/prefs_account.c @@ -223,6 +223,7 @@ typedef struct PrivacyPage GtkWidget *default_encrypt_checkbtn; GtkWidget *default_encrypt_reply_checkbtn; GtkWidget *default_sign_checkbtn; + GtkWidget *default_sign_reply_checkbtn; GtkWidget *save_clear_text_checkbtn; GtkWidget *encrypt_to_self_checkbtn; } PrivacyPage; @@ -656,6 +657,10 @@ static PrefParam privacy_param[] = { &privacy_page.default_sign_checkbtn, prefs_set_data_from_toggle, prefs_set_toggle}, + {"default_sign_reply", "TRUE", &tmp_ac_prefs.default_sign_reply, P_BOOL, + &privacy_page.default_sign_reply_checkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"save_clear_text", "FALSE", &tmp_ac_prefs.save_encrypted_as_clear_text, P_BOOL, &privacy_page.save_clear_text_checkbtn, prefs_set_data_from_toggle, prefs_set_toggle}, @@ -888,6 +893,8 @@ static void privacy_system_activated(GtkWidget *combobox) privacy_enabled); gtk_widget_set_sensitive (privacy_page.default_sign_checkbtn, privacy_enabled); + gtk_widget_set_sensitive (privacy_page.default_sign_reply_checkbtn, + privacy_enabled); gtk_widget_set_sensitive (privacy_page.encrypt_to_self_checkbtn, privacy_enabled); gtk_widget_set_sensitive (privacy_page.save_clear_text_checkbtn, @@ -2142,6 +2149,7 @@ static void privacy_create_widget_func(PrefsPage * _page, GtkWidget *default_encrypt_checkbtn; GtkWidget *default_encrypt_reply_checkbtn; GtkWidget *default_sign_checkbtn; + GtkWidget *default_sign_reply_checkbtn; GtkWidget *save_clear_text_checkbtn; GtkWidget *encrypt_to_self_checkbtn; @@ -2189,6 +2197,9 @@ static void privacy_create_widget_func(PrefsPage * _page, _("Always sign messages")); PACK_CHECK_BUTTON (vbox2, default_encrypt_checkbtn, _("Always encrypt messages")); + PACK_CHECK_BUTTON (vbox2, default_sign_reply_checkbtn, + _("Always sign messages when replying to a " + "signed message")); PACK_CHECK_BUTTON (vbox2, default_encrypt_reply_checkbtn, _("Always encrypt messages when replying to an " "encrypted message")); @@ -2203,6 +2214,7 @@ static void privacy_create_widget_func(PrefsPage * _page, page->default_privacy_system = default_privacy_system; page->default_encrypt_checkbtn = default_encrypt_checkbtn; page->default_encrypt_reply_checkbtn = default_encrypt_reply_checkbtn; + page->default_sign_reply_checkbtn = default_sign_reply_checkbtn; page->default_sign_checkbtn = default_sign_checkbtn; page->save_clear_text_checkbtn = save_clear_text_checkbtn; page->encrypt_to_self_checkbtn = encrypt_to_self_checkbtn; diff --git a/src/prefs_account.h b/src/prefs_account.h @@ -152,6 +152,7 @@ struct _PrefsAccount gboolean default_encrypt; gboolean default_encrypt_reply; gboolean default_sign; + gboolean default_sign_reply; gboolean save_encrypted_as_clear_text; gboolean encrypt_to_self; diff --git a/src/privacy.c b/src/privacy.c @@ -147,6 +147,28 @@ try_others: return FALSE; } +static void msginfo_set_signed_flag(GNode *node, gpointer data) +{ + MsgInfo *msginfo = data; + MimeInfo *mimeinfo = node->data; + + if (privacy_mimeinfo_is_signed(mimeinfo)) { + procmsg_msginfo_set_flags(msginfo, 0, MSG_SIGNED); + } + if (privacy_mimeinfo_is_encrypted(mimeinfo)) { + procmsg_msginfo_set_flags(msginfo, 0, MSG_ENCRYPTED); + } else { + /* searching inside encrypted parts doesn't really make sense */ + g_node_children_foreach(mimeinfo->node, G_TRAVERSE_ALL, msginfo_set_signed_flag, msginfo); + } +} + +void privacy_msginfo_get_signed_state(MsgInfo *msginfo) +{ + MimeInfo *mimeinfo = procmime_scan_message(msginfo); + g_node_children_foreach(mimeinfo->node, G_TRAVERSE_ALL, msginfo_set_signed_flag, msginfo); +} + /** * Check the signature of a MimeInfo. privacy_mimeinfo_is_signed * should be called before otherwise it is done by this function. diff --git a/src/privacy.h b/src/privacy.h @@ -43,6 +43,7 @@ void privacy_unregister_system (PrivacySystem *system); void privacy_free_privacydata (PrivacyData *); +void privacy_msginfo_get_signed_state (MsgInfo *); gboolean privacy_mimeinfo_is_signed (MimeInfo *); gint privacy_mimeinfo_check_signature (MimeInfo *); SignatureStatus privacy_mimeinfo_get_sig_status (MimeInfo *); diff --git a/src/procmime.c b/src/procmime.c @@ -841,6 +841,8 @@ FILE *procmime_get_first_encrypted_text_content(MsgInfo *msginfo) partinfo = mimeinfo; while (partinfo && partinfo->type != MIMETYPE_TEXT) { partinfo = procmime_mimeinfo_next(partinfo); + if (privacy_mimeinfo_is_signed(partinfo)) + procmsg_msginfo_set_flags(msginfo, 0, MSG_SIGNED); } if (partinfo) diff --git a/src/stock_pixmap.c b/src/stock_pixmap.c @@ -50,6 +50,7 @@ #include "pixmaps/interface.xpm" #include "pixmaps/jpilot.xpm" #include "pixmaps/key.xpm" +#include "pixmaps/key_gpg_signed.xpm" #include "pixmaps/ldap.xpm" #include "pixmaps/linewrap.xpm" #include "pixmaps/linewrapcurrent.xpm" @@ -275,6 +276,7 @@ static StockPixmapData pixmaps[] = {interface_xpm , NULL, NULL, "interface", NULL}, {jpilot_xpm , NULL, NULL, "jpilot", NULL}, {key_xpm , NULL, NULL, "key", NULL}, + {key_gpg_signed_xpm , NULL, NULL, "key_gpg_signed_xpm", NULL}, {ldap_xpm , NULL, NULL, "ldap", NULL}, {linewrapcurrent_xpm , NULL, NULL, "linewrapcurrent", NULL}, {linewrap_xpm , NULL, NULL, "linewrap", NULL}, diff --git a/src/stock_pixmap.h b/src/stock_pixmap.h @@ -71,6 +71,7 @@ typedef enum STOCK_PIXMAP_INTERFACE, STOCK_PIXMAP_JPILOT, STOCK_PIXMAP_KEY, + STOCK_PIXMAP_KEY_SIGN, STOCK_PIXMAP_LDAP, STOCK_PIXMAP_LINEWRAP_CURRENT, STOCK_PIXMAP_LINEWRAP_ALL, diff --git a/src/summaryview.c b/src/summaryview.c @@ -122,6 +122,8 @@ static GdkPixmap *keyxpm; static GdkBitmap *keyxpmmask; static GdkPixmap *clipkeyxpm; static GdkBitmap *clipkeyxpmmask; +static GdkPixmap *keysignxpm; +static GdkBitmap *keysignxpmmask; static GdkPixmap *gpgsignedxpm; static GdkBitmap *gpgsignedxpmmask; static GdkPixmap *clipgpgsignedxpm; @@ -1101,6 +1103,8 @@ void summary_init(SummaryView *summaryview) &watchthreadxpm, &watchthreadxpmmask); stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_CLIP_KEY, &clipkeyxpm, &clipkeyxpmmask); + stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_KEY_SIGN, + &keysignxpm, &keysignxpmmask); stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_KEY, &keyxpm, &keyxpmmask); stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_GPG_SIGNED, @@ -3870,8 +3874,13 @@ static void summary_set_row_marks(SummaryView *summaryview, GtkCMCTreeNode *row) gtk_cmctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME], clipgpgsignedxpm, clipgpgsignedxpmmask); } else if (MSG_IS_SIGNED(flags)) { - gtk_cmctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME], - gpgsignedxpm, gpgsignedxpmmask); + if (MSG_IS_ENCRYPTED(flags)) { + gtk_cmctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME], + keysignxpm, keysignxpmmask); + } else { + gtk_cmctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME], + gpgsignedxpm, gpgsignedxpmmask); + } } else if (MSG_IS_WITH_ATTACHMENT(flags) && MSG_IS_ENCRYPTED(flags)) { gtk_cmctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME], clipkeyxpm, clipkeyxpmmask); @@ -7513,6 +7522,7 @@ void summary_reflect_prefs_pixmap_theme(SummaryView *summaryview) stock_pixmap_gdk(ctree, STOCK_PIXMAP_WATCHTHREAD, &watchthreadxpm, &watchthreadxpmmask); stock_pixmap_gdk(ctree, STOCK_PIXMAP_CLIP_KEY, &clipkeyxpm, &clipkeyxpmmask); stock_pixmap_gdk(ctree, STOCK_PIXMAP_KEY, &keyxpm, &keyxpmmask); + stock_pixmap_gdk(ctree, STOCK_PIXMAP_KEY_SIGN, &keysignxpm, &keysignxpmmask); stock_pixmap_gdk(ctree, STOCK_PIXMAP_GPG_SIGNED, &gpgsignedxpm, &gpgsignedxpmmask); stock_pixmap_gdk(ctree, STOCK_PIXMAP_CLIP_GPG_SIGNED, &clipgpgsignedxpm, &clipgpgsignedxpmmask); stock_pixmap_gdk(ctree, STOCK_PIXMAP_SPAM, &spamxpm, &spamxpmmask);