2005-08-26 [colin] 1.9.13cvs59
authorColin Leroy <colin@colino.net>
Fri, 26 Aug 2005 16:38:40 +0000 (16:38 +0000)
committerColin Leroy <colin@colino.net>
Fri, 26 Aug 2005 16:38:40 +0000 (16:38 +0000)
* src/procmime.c
Fix "Problem with replies". This happened only
on IMAP...
* src/procmsg.c
Factorize code a bit
* src/compose.c
Speed improvement on very long messages (wrapping)
Fix signature color on Reedit and Redirect
On Reedit, don't attach pgp-signatures parts, but
set signing to On.

ChangeLog-gtk2.claws
PATCHSETS
configure.ac
src/compose.c
src/procmime.c
src/procmsg.c

index c5fb49bafc6ba6a90e7e9da9b87ea3351397d257..ae2b8b98186896f26980e12d48e7de3d07bc7365 100644 (file)
@@ -1,3 +1,16 @@
+2005-08-26 [colin]     1.9.13cvs59
+
+       * src/procmime.c
+               Fix "Problem with replies". This happened only
+               on IMAP...
+       * src/procmsg.c
+               Factorize code a bit
+       * src/compose.c
+               Speed improvement on very long messages (wrapping)
+               Fix signature color on Reedit and Redirect
+               On Reedit, don't attach pgp-signatures parts, but
+               set signing to On.
+
 2005-08-24 [paul]      1.9.13cvs58
 
        * src/compose.c
index e04571a6e1dbacc4cd647e44bc26d0bfa8b6e32c..07d82e441f0ff19110dab93447821c953eb8c2ba 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.179.2.59 -r 1.179.2.60 src/imap.c;  cvs diff -u -r 1.1.4.16 -r 1.1.4.17 src/etpan/imap-thread.c;  cvs diff -u -r 1.1.4.3 -r 1.1.4.4 src/etpan/imap-thread.h;  cvs diff -u -r -1.1.2.1 -r -1.1.2.2 src/gtk/sylpheed-marshal.c;  cvs diff -u -r -1.1.2.1 -r -1.1.2.2 src/gtk/sylpheed-marshal.h;  cvs diff -u -r 1.2.2.5 -r 1.2.2.6 tools/kdeservicemenu/README;  cvs diff -u -r 1.2.2.2 -r 1.2.2.3 tools/kdeservicemenu/install.sh;  cvs diff -u -r 1.3.2.4 -r 1.3.2.5 tools/kdeservicemenu/template_sylpheed-attach-files.desktop;  cvs diff -u -r 1.3.2.4 -r 1.3.2.5 tools/kdeservicemenu/template_sylpheed-compress-attach.desktop;  ) > 1.9.13cvs56.patchset
 ( cvs diff -u -r 1.115.2.51 -r 1.115.2.52 src/main.c;  cvs diff -u -r 1.9.2.14 -r 1.9.2.15 src/common/defs.h;  ) > 1.9.13cvs57.patchset
 ( cvs diff -u -r 1.382.2.155 -r 1.382.2.156 src/compose.c;  ) > 1.9.13cvs58.patchset
+( cvs diff -u -r 1.49.2.55 -r 1.49.2.56 src/procmime.c;  cvs diff -u -r 1.150.2.40 -r 1.150.2.41 src/procmsg.c;  cvs diff -u -r 1.382.2.156 -r 1.382.2.157 src/compose.c;  ) > 1.9.13cvs59.patchset
index 55e94614dde07e82e8c0ff500f1307ef644bf916..6ea655c806cff215762dfc5b629eaed710592a18 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=13
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=58
+EXTRA_VERSION=59
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 60ecdce61908e420c2ee859b4054a7527323f29b..fef63274a3adc161b6fe6d876fff19e0b8b83c96 100644 (file)
@@ -951,6 +951,26 @@ static void compose_force_encryption(Compose *compose, PrefsAccount *account,
        }
 }      
 
+static void compose_force_signing(Compose *compose, PrefsAccount *account)
+{
+       gchar *privacy = NULL;
+
+       if (account->default_privacy_system
+       &&  strlen(account->default_privacy_system)) {
+               privacy = account->default_privacy_system;
+       } else {
+               GSList *privacy_avail = privacy_get_system_ids();
+               if (privacy_avail && g_slist_length(privacy_avail)) {
+                       privacy = (gchar *)(privacy_avail->data);
+               }
+       }
+       if (privacy != NULL) {
+               compose->privacy_system = g_strdup(privacy);
+               compose_update_privacy_system_menu_item(compose);
+               compose_use_signing(compose, TRUE);
+       }
+}      
+
 void compose_reply_mode(ComposeMode mode, GSList *msginfo_list, gchar *body)
 {
        MsgInfo *msginfo;
@@ -1328,6 +1348,49 @@ Compose *compose_forward_multiple(PrefsAccount *account, GSList *msginfo_list)
        return compose;
 }
 
+static gboolean compose_is_sig_separator(Compose *compose, GtkTextBuffer *textbuf, GtkTextIter *iter) 
+{
+       GtkTextIter start = *iter;
+       GtkTextIter end_iter;
+       int start_pos = gtk_text_iter_get_offset(&start);
+
+       if (!compose->account->sig_sep)
+               return FALSE;
+       
+       gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter,
+               start_pos+strlen(compose->account->sig_sep));
+
+       /* check sig separator */
+       if (!strcmp(gtk_text_iter_get_text(&start, &end_iter),
+                       compose->account->sig_sep)) {
+               /* check end of line (\n) */
+               gtk_text_buffer_get_iter_at_offset(textbuf, &start,
+                       start_pos+strlen(compose->account->sig_sep));
+               gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter,
+                       start_pos+strlen(compose->account->sig_sep)+1);
+
+               if (!strcmp(gtk_text_iter_get_text(&start, &end_iter),"\n"));
+                       return TRUE;
+               
+
+       }
+
+       return FALSE;
+}
+
+static void compose_colorize_signature(Compose *compose)
+{
+       GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(compose->text));
+       GtkTextIter iter;
+       GtkTextIter end_iter;
+       gtk_text_buffer_get_start_iter(buffer, &iter);
+       while (gtk_text_iter_forward_line(&iter))
+               if (compose_is_sig_separator(compose, buffer, &iter)) {
+                       gtk_text_buffer_get_end_iter(buffer, &end_iter);
+                       gtk_text_buffer_apply_tag_by_name(buffer,"signature",&iter, &end_iter);
+               }
+}
+
 void compose_reedit(MsgInfo *msginfo)
 {
        Compose *compose = NULL;
@@ -1468,6 +1531,8 @@ void compose_reedit(MsgInfo *msginfo)
        
        compose_attach_parts(compose, msginfo);
 
+       compose_colorize_signature(compose);
+
        g_signal_handlers_unblock_by_func(G_OBJECT(textbuf),
                                        G_CALLBACK(compose_changed_cb),
                                        compose);
@@ -1529,6 +1594,8 @@ Compose *compose_redirect(PrefsAccount *account, MsgInfo *msginfo)
        compose_quote_fmt(compose, msginfo, "%M", NULL, NULL);
        gtk_text_view_set_editable(GTK_TEXT_VIEW(compose->text), FALSE);
 
+       compose_colorize_signature(compose);
+
        ifactory = gtk_item_factory_from_widget(compose->popupmenu);
        menu_set_sensitive(ifactory, "/Add...", FALSE);
        menu_set_sensitive(ifactory, "/Remove", FALSE);
@@ -2603,13 +2670,20 @@ static void compose_attach_parts(Compose *compose, MsgInfo *msginfo)
                        gchar *content_type;
 
                        content_type = procmime_get_content_type_str(child->type, child->subtype);
-                       partname = procmime_mimeinfo_get_parameter(child, "filename");
-                       if (partname == NULL)
-                               partname = procmime_mimeinfo_get_parameter(child, "name");
-                       if (partname == NULL)
-                               partname = "";
-                       compose_attach_append(compose, outfile, 
-                                             partname, content_type);
+
+                       /* if we meet a pgp signature, we don't attach it, but
+                        * we force signing. */
+                       if (strcmp(content_type, "application/pgp-signature")) {
+                               partname = procmime_mimeinfo_get_parameter(child, "filename");
+                               if (partname == NULL)
+                                       partname = procmime_mimeinfo_get_parameter(child, "name");
+                               if (partname == NULL)
+                                       partname = "";
+                               compose_attach_append(compose, outfile, 
+                                                     partname, content_type);
+                       } else {
+                               compose_force_signing(compose, compose->account);
+                       }
                        g_free(content_type);
                }
                g_free(outfile);
@@ -2843,36 +2917,6 @@ static gboolean compose_get_line_break_pos(GtkTextBuffer *buffer,
        return do_break;
 }
 
-static gboolean compose_is_sig_separator(Compose *compose, GtkTextBuffer *textbuf, GtkTextIter *iter) 
-{
-       GtkTextIter start = *iter;
-       GtkTextIter end_iter;
-       int start_pos = gtk_text_iter_get_offset(&start);
-
-       if (!compose->account->sig_sep)
-               return FALSE;
-       
-       gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter,
-               start_pos+strlen(compose->account->sig_sep));
-
-       /* check sig separator */
-       if (!strcmp(gtk_text_iter_get_text(&start, &end_iter),
-                       compose->account->sig_sep)) {
-               /* check end of line (\n) */
-               gtk_text_buffer_get_iter_at_offset(textbuf, &start,
-                       start_pos+strlen(compose->account->sig_sep));
-               gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter,
-                       start_pos+strlen(compose->account->sig_sep)+1);
-
-               if (!strcmp(gtk_text_iter_get_text(&start, &end_iter),"\n"));
-                       return TRUE;
-               
-
-       }
-
-       return FALSE;
-}
-
 static gboolean compose_join_next_line(Compose *compose,
                                       GtkTextBuffer *buffer,
                                       GtkTextIter *iter,
@@ -7490,7 +7534,10 @@ static void text_inserted(GtkTextBuffer *buffer, GtkTextIter *iter,
                gtk_text_buffer_insert(buffer, iter, text, len);
 
        mark = gtk_text_buffer_create_mark(buffer, NULL, iter, FALSE);
-       compose_wrap_all_full(compose, FALSE);
+       
+/*     compose_wrap_all_full(compose, FALSE); */
+       compose_wrap_paragraph(compose, iter, FALSE);
+
        gtk_text_buffer_get_iter_at_mark(buffer, iter, mark);
        gtk_text_buffer_delete_mark(buffer, mark);
 
index 4f7e38452c70ebaa11913d84c7a75defee189768..6e00efe2e83f1ebb23cfe470de0c18bdf31e9a37 100644 (file)
@@ -409,6 +409,9 @@ gboolean procmime_encode_content(MimeInfo *mimeinfo, EncodingType encoding)
        gchar *tmpfilename;
        struct stat statbuf;
 
+       if (mimeinfo->content == MIMECONTENT_EMPTY)
+               return TRUE;
+
        if (mimeinfo->encoding_type != ENC_UNKNOWN &&
            mimeinfo->encoding_type != ENC_BINARY &&
            mimeinfo->encoding_type != ENC_7BIT &&
@@ -2138,6 +2141,10 @@ gint procmime_write_mimeinfo(MimeInfo *mimeinfo, FILE *fp)
 
        debug_print("procmime_write_mimeinfo\n");
 
+       if (mimeinfo->encoding_type == ENC_UNKNOWN
+       &&  mimeinfo->content != MIMECONTENT_EMPTY)
+               procmime_encode_content(mimeinfo, ENC_BINARY);
+
        if (G_NODE_IS_LEAF(mimeinfo->node)) {
                switch (mimeinfo->content) {
                case MIMECONTENT_FILE:
index 788bda55988c076a9dc7a97037365ccc0e47dc73..48e949f684e2d23ab808b7c868290c422ccf3d96 100644 (file)
@@ -1914,53 +1914,36 @@ MsgInfo *procmsg_msginfo_new_from_mimeinfo(MsgInfo *src_msginfo, MimeInfo *mimei
 {
        MsgInfo *tmp_msginfo = NULL;
        MsgFlags flags = {0, 0};
-       
+       gchar *tmpfile = get_tmp_file();
+       FILE *fp = g_fopen(tmpfile, "wb");
        
        if (!mimeinfo || mimeinfo->type != MIMETYPE_MESSAGE ||
            g_ascii_strcasecmp(mimeinfo->subtype, "rfc822")) {
                g_warning("procmsg_msginfo_new_from_mimeinfo(): unsuitable mimeinfo");
+               if (fp) 
+                       fclose(fp);
+               g_free(tmpfile);
                return NULL;
        }
        
-       
-       if (mimeinfo->content == MIMECONTENT_MEM) {
-               gchar *tmpfile = get_tmp_file();
-               str_write_to_file(mimeinfo->data.mem, tmpfile);
-               g_free(mimeinfo->data.mem);
-               mimeinfo->content = MIMECONTENT_FILE;
-               mimeinfo->data.filename = g_strdup(tmpfile);
-               g_free(tmpfile);
-               tmp_msginfo = procheader_parse_file(mimeinfo->data.filename,
-                                       flags, TRUE, FALSE);
-               if (tmp_msginfo != NULL) {
-                       tmp_msginfo->folder = src_msginfo->folder;
-                       tmp_msginfo->plaintext_file = g_strdup(mimeinfo->data.filename);
-               } else {
-                       g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo");
-               }
-       } else {
-               gchar *tmpfile = get_tmp_file();
-               FILE *fp = g_fopen(tmpfile, "wb");
-               if (fp && procmime_write_mimeinfo(mimeinfo, fp) >= 0) {
-                       if (fp)
-                               fclose(fp);
-                       fp = NULL;
-                       tmp_msginfo = procheader_parse_file(
-                               tmpfile, flags, 
-                               TRUE, FALSE);
-               }
-               if (fp)
-                       fclose(fp);
+       if (fp && procmime_write_mimeinfo(mimeinfo, fp) >= 0) {
+               fclose(fp);
+               fp = NULL;
+               tmp_msginfo = procheader_parse_file(
+                       tmpfile, flags, 
+                       TRUE, FALSE);
+       }
+       if (fp)
+               fclose(fp);
 
-               if (tmp_msginfo != NULL) {
-                       tmp_msginfo->folder = src_msginfo->folder;
-                       tmp_msginfo->plaintext_file = g_strdup(tmpfile);
-               } else {
-                       g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo");
-               }
-               g_free(tmpfile);
-               
+       if (tmp_msginfo != NULL) {
+               tmp_msginfo->folder = src_msginfo->folder;
+               tmp_msginfo->plaintext_file = g_strdup(tmpfile);
+       } else {
+               g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo");
        }
-       
+
+       g_free(tmpfile);
+
        return tmp_msginfo;
 }