2004-11-16 [colin] 0.9.12cvs146.14
[claws.git] / src / compose.c
index 0b7e8d1a82ad98b9b14b8b97ec6bbed49b4fd472..83e9b0e94c4b58e4c00a54e025f42de75d665d0e 100644 (file)
@@ -1295,6 +1295,10 @@ void compose_reedit(MsgInfo *msginfo)
        g_signal_handlers_block_by_func(G_OBJECT(textbuf),
                                        G_CALLBACK(compose_changed_cb),
                                        compose);
+                                       
+       g_signal_handlers_block_by_func(G_OBJECT(textbuf),
+                                       G_CALLBACK(text_inserted),
+                                       compose);
 
        if ((fp = procmime_get_first_text_content(msginfo)) == NULL)
                g_warning("Can't get text part\n");
@@ -1302,12 +1306,16 @@ void compose_reedit(MsgInfo *msginfo)
                while (fgets(buf, sizeof(buf), fp) != NULL) {
                        strcrchomp(buf);
                        gtk_text_buffer_insert(textbuf, &iter, buf, -1);
+                       gtk_text_buffer_get_iter_at_mark(textbuf, &iter, mark);
                }
                fclose(fp);
        }
        
        compose_attach_parts(compose, msginfo);
 
+       g_signal_handlers_unblock_by_func(G_OBJECT(textbuf),
+                                       G_CALLBACK(text_inserted),
+                                       compose);
        g_signal_handlers_unblock_by_func(G_OBJECT(textbuf),
                                        G_CALLBACK(compose_changed_cb),
                                        compose);
@@ -2173,6 +2181,7 @@ static void compose_attach_append(Compose *compose, const gchar *file,
        FILE *fp;
        off_t size;
        gint row;
+       gchar *name;
 
        if (!is_file_exist(file)) {
                g_warning("File %s doesn't exist\n", file);
@@ -2208,7 +2217,6 @@ static void compose_attach_append(Compose *compose, const gchar *file,
                if (!g_ascii_strcasecmp(content_type, "message/rfc822")) {
                        MsgInfo *msginfo;
                        MsgFlags flags = {0, 0};
-                       const gchar *name;
 
                        if (procmime_get_encoding_for_file(file) == ENC_7BIT)
                                ainfo->encoding = ENC_7BIT;
@@ -2219,7 +2227,7 @@ static void compose_attach_append(Compose *compose, const gchar *file,
                        if (msginfo && msginfo->subject)
                                name = msginfo->subject;
                        else
-                               name = g_basename(filename ? filename : file);
+                               name = g_path_get_basename(filename ? filename : file);
 
                        ainfo->name = g_strdup_printf(_("Message: %s"), name);
 
@@ -2230,9 +2238,10 @@ static void compose_attach_append(Compose *compose, const gchar *file,
                                        procmime_get_encoding_for_file(file);
                        else
                                ainfo->encoding = ENC_BASE64;
-                       ainfo->name = g_strdup
-                               (g_basename(filename ? filename : file));
+                       name = g_path_get_basename(filename ? filename : file);
+                       ainfo->name = g_strdup(name);
                }
+               g_free(name);
        } else {
                ainfo->content_type = procmime_get_mime_type(file);
                if (!ainfo->content_type) {
@@ -2243,7 +2252,9 @@ static void compose_attach_append(Compose *compose, const gchar *file,
                        ainfo->encoding = procmime_get_encoding_for_file(file);
                else
                        ainfo->encoding = ENC_BASE64;
-               ainfo->name = g_strdup(g_basename(filename ? filename : file)); 
+               name = g_path_get_basename(filename ? filename : file);
+               ainfo->name = g_strdup(name);   
+               g_free(name);
        }
 
        if (!strcmp(ainfo->content_type, "unknown")) {
@@ -3598,7 +3609,8 @@ static gint compose_write_to_file(Compose *compose, FILE *fp, gint action)
        mimetext->subtype = g_strdup("plain");
        g_hash_table_insert(mimetext->typeparameters, g_strdup("charset"),
                            g_strdup(out_codeset));
-       /* procmime_encode_content(mimetext, encoding); */
+       if (encoding != ENC_UNKNOWN)
+               procmime_encode_content(mimetext, encoding);
 
        /* append attachment parts */
        if (compose_use_attach(compose)) {
@@ -3620,8 +3632,9 @@ static gint compose_write_to_file(Compose *compose, FILE *fp, gint action)
        } else
                g_node_append(mimemsg->node, mimetext->node);
 
-       /* sign message */
-       if (compose->use_signing && privacy_system_can_sign(compose->privacy_system))
+       /* sign message if sending */
+       if (action == COMPOSE_WRITE_FOR_SEND && compose->use_signing && 
+           privacy_system_can_sign(compose->privacy_system))
                if (!privacy_sign(compose->privacy_system, mimemsg))
                        return -1;
 
@@ -4107,23 +4120,16 @@ static gchar *compose_get_header(Compose *compose)
        compose_add_headerfield_from_headerlist(compose, header, "Bcc", ", ");
 
        /* Subject */
-       str = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry));
+       str = gtk_editable_get_chars(GTK_EDITABLE(compose->subject_entry), 0, -1);
        if (*str != '\0' && !IS_IN_CUSTOM_HEADER("Subject")) {
-               gchar *tmpstr;
-
-               tmpstr = g_strdup(str);
-               if (tmpstr == NULL) {
-                       g_string_free(header, TRUE);
-                       return NULL;
-               }
                g_strstrip(str);
                if (*str != '\0') {
                        compose_convert_header(buf, sizeof(buf), str,
                                               strlen("Subject: "), FALSE);
                        g_string_append_printf(header, "Subject: %s\n", buf);
                }
-               g_free(tmpstr);
        }
+       g_free(str);
 
        /* Message-ID */
        if (compose->account->gen_msgid) {
@@ -4257,7 +4263,7 @@ static gchar *compose_get_header(Compose *compose)
                g_free(tmp);
                
                entry_str = gtk_entry_get_text(GTK_ENTRY(headerentry->entry));
-               Xstrdup_a(headervalue, entry_str, return -1);
+               Xstrdup_a(headervalue, entry_str, return NULL);
                subst_char(headervalue, '\r', ' ');
                subst_char(headervalue, '\n', ' ');
                string = std_headers;
@@ -6384,7 +6390,7 @@ static void compose_insert_file_cb(gpointer data, guint action,
                for ( tmp = file_list; tmp; tmp = tmp->next) {
                        gchar *file = (gchar *) tmp->data;
                        gchar *filedup = g_strdup(file);
-                       const gchar *shortfile = g_basename(filedup);
+                       gchar *shortfile = g_path_get_basename(filedup);
                        ComposeInsertResult res;
 
                        res = compose_insert_file(compose, file);
@@ -6394,6 +6400,7 @@ static void compose_insert_file_cb(gpointer data, guint action,
                                alertpanel_error(_("File '%s' contained invalid characters\n"
                                                   "for the current encoding, insertion may be incorrect."), shortfile);
                        }
+                       g_free(shortfile);
                        g_free(filedup);
                        g_free(file);
                }
@@ -6969,12 +6976,8 @@ static void compose_toggle_encrypt_cb(gpointer data, guint action,
 
 static void activate_privacy_system(Compose *compose, PrefsAccount *account) 
 {
-       /* TODO
-       if (account->default_gnupg_mode)
-               compose->gnupg_mode = GNUPG_MODE_INLINE;
-       else
-               compose->gnupg_mode = GNUPG_MODE_DETACH;
-       */              
+       g_free(compose->privacy_system);
+       compose->privacy_system = g_strdup(account->default_privacy_system);
        compose_update_privacy_system_menu_item(compose);
 }
 
@@ -7220,7 +7223,7 @@ static void text_inserted(GtkTextBuffer *buffer, GtkTextIter *iter,
        } else
                gtk_text_buffer_insert(buffer, iter, text, len);
 
-       if (prefs_common.autowrap)
+       if (compose->autowrap)
                compose_wrap_line_all_full(compose, TRUE);
 
        g_signal_handlers_unblock_by_func(G_OBJECT(buffer),