2009-05-22 [colin] 3.7.1cvs62
[claws.git] / src / compose.c
index dc7a7fcd9c3ecc25f001f23731598cae00f30556..0df06d88608ddde8d53317f9bce18e2d89385acd 100644 (file)
@@ -282,7 +282,7 @@ static gint compose_queue_sub                       (Compose        *compose,
                                                 gchar          **msgpath,
                                                 gboolean       check_subject,
                                                 gboolean       remove_reedit_target);
-static void compose_add_attachments            (Compose        *compose,
+static int compose_add_attachments             (Compose        *compose,
                                                 MimeInfo       *parent);
 static gchar *compose_get_header               (Compose        *compose);
 
@@ -496,6 +496,8 @@ static gboolean compose_headerentry_changed_cb         (GtkWidget          *entry,
 static gboolean compose_headerentry_key_press_event_cb(GtkWidget              *entry,
                                            GdkEventKey        *event,
                                            ComposeHeaderEntry *headerentry);
+static gboolean compose_headerentry_button_clicked_cb (GtkWidget *button,
+                                       ComposeHeaderEntry *headerentry);
 
 static void compose_show_first_last_header (Compose *compose, gboolean show_first);
 
@@ -4118,6 +4120,7 @@ static gboolean compose_beautify_paragraph(Compose *compose, GtkTextIter *par_it
                        {"https://", strcasestr, get_uri_part,   make_uri_string},
                        {"ftp://",   strcasestr, get_uri_part,   make_uri_string},
                        {"sftp://",  strcasestr, get_uri_part,   make_uri_string},
+                       {"gopher://",strcasestr, get_uri_part,   make_uri_string},
                        {"www.",     strcasestr, get_uri_part,   make_http_string},
                        {"mailto:",  strcasestr, get_uri_part,   make_uri_string},
                        {"@",        strcasestr, get_email_part, make_email_string}
@@ -4540,7 +4543,8 @@ compose_current_mail_account(void)
 static void compose_select_account(Compose *compose, PrefsAccount *account,
                                   gboolean init)
 {
-       gchar *from = NULL;
+       gchar *from = NULL, *header;
+       ComposeHeaderEntry *header_entry;
 
        cm_return_if_fail(account != NULL);
 
@@ -4578,7 +4582,26 @@ static void compose_select_account(Compose *compose, PrefsAccount *account,
                compose_insert_sig(compose, TRUE);
                undo_unblock(compose->undostruct);
        }
-
+       
+       header_entry = (ComposeHeaderEntry *) compose->header_list->data;
+       header = gtk_combo_box_get_active_text(GTK_COMBO_BOX(header_entry->combo));
+       
+       if (header && !strlen(gtk_entry_get_text(GTK_ENTRY(header_entry->entry)))) {
+               if (account->protocol == A_NNTP) {
+                       if (!strcmp(header, _("To:")))
+                               combobox_select_by_text(
+                                       GTK_COMBO_BOX(header_entry->combo),
+                                       _("Newsgroups:"));
+               } else {
+                       if (!strcmp(header, _("Newsgroups:")))
+                               combobox_select_by_text(
+                                       GTK_COMBO_BOX(header_entry->combo),
+                                       _("To:"));
+               }
+               
+       }
+       g_free(header);
+       
 #ifdef USE_ENCHANT
        /* use account's dict info if set */
        if (compose->gtkaspell) {
@@ -5337,7 +5360,8 @@ static gint compose_write_to_file(Compose *compose, FILE *fp, gint action, gbool
                g_node_append(mimempart->node, mimetext->node);
                g_node_append(mimemsg->node, mimempart->node);
 
-               compose_add_attachments(compose, mimempart);
+               if (compose_add_attachments(compose, mimempart) < 0)
+                       return -1;
        } else
                g_node_append(mimemsg->node, mimetext->node);
 
@@ -5762,7 +5786,7 @@ static gint compose_queue_sub(Compose *compose, gint *msgnum, FolderItem **item,
        return 0;
 }
 
-static void compose_add_attachments(Compose *compose, MimeInfo *parent)
+static int compose_add_attachments(Compose *compose, MimeInfo *parent)
 {
        AttachInfo *ainfo;
        GtkTreeView *tree_view = GTK_TREE_VIEW(compose->attach_clist);
@@ -5775,12 +5799,22 @@ static void compose_add_attachments(Compose *compose, MimeInfo *parent)
        model = gtk_tree_view_get_model(tree_view);
        
        if (!gtk_tree_model_get_iter_first(model, &iter))
-               return;
+               return 0;
        do {
                gtk_tree_model_get(model, &iter,
                                   COL_DATA, &ainfo,
                                   -1);
-                                                          
+               
+               if (!is_file_exist(ainfo->file)) {
+                       gchar *msg = g_strdup_printf(_("Attachment %s doesn't exist anymore. Ignore?"), ainfo->file);
+                       AlertValue val = alertpanel_full(_("Warning"), msg, _("Cancel sending"), _("Ignore attachment"),
+                                     NULL, FALSE, NULL, ALERT_WARNING, G_ALERTDEFAULT);
+                       g_free(msg);
+                       if (val == G_ALERTDEFAULT) {
+                               return -1;
+                       }
+                       continue;
+               }
                mimepart = procmime_mimeinfo_new();
                mimepart->content = MIMECONTENT_FILE;
                mimepart->data.filename = g_strdup(ainfo->file);
@@ -5829,6 +5863,8 @@ static void compose_add_attachments(Compose *compose, MimeInfo *parent)
 
                g_node_append(parent->node, mimepart->node);
        } while (gtk_tree_model_iter_next(model, &iter));
+       
+       return 0;
 }
 
 #define IS_IN_CUSTOM_HEADER(header) \
@@ -6277,6 +6313,8 @@ static void compose_create_header_entry(Compose *compose)
 
        GtkWidget *combo;
        GtkWidget *entry;
+       GtkWidget *button;
+       GtkWidget *hbox;
        gchar **string;
        const gchar *header = NULL;
        ComposeHeaderEntry *headerentry;
@@ -6307,7 +6345,7 @@ static void compose_create_header_entry(Compose *compose)
                                GTK_ENTRY(gtk_bin_get_child(GTK_BIN((compose->header_last->combo)))));
                string = headers;
                while (*string != NULL) {
-                       if (!strcmp(*string, last_header_entry))
+                       if (!strcmp(prefs_common_translated_header_name(*string), last_header_entry))
                                standard_header = TRUE;
                        string++;
                }
@@ -6330,12 +6368,22 @@ static void compose_create_header_entry(Compose *compose)
        g_signal_connect_after(G_OBJECT(gtk_bin_get_child(GTK_BIN((combo)))), "grab_focus",
                         G_CALLBACK(compose_grab_focus_cb), compose);
 
-       /* Entry field */
+       /* Entry field with cleanup button */
+       button = gtk_button_new();
+       gtk_button_set_image(GTK_BUTTON(button),
+                        gtk_image_new_from_stock(GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU));
+       gtk_widget_show(button);
+       CLAWS_SET_TIP(button,
+               _("Delete entry contents"));
        entry = gtk_entry_new(); 
        gtk_widget_show(entry);
        CLAWS_SET_TIP(entry,
                _("Use <tab> to autocomplete from addressbook"));
-       gtk_table_attach(GTK_TABLE(compose->header_table), entry, 1, 2,
+       hbox = gtk_hbox_new (FALSE, 0);
+       gtk_widget_show(hbox);
+       gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+       gtk_table_attach(GTK_TABLE(compose->header_table), hbox, 1, 2,
                        compose->header_nextrow, compose->header_nextrow+1,
                        GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
 
@@ -6347,6 +6395,10 @@ static void compose_create_header_entry(Compose *compose)
                         headerentry);
        g_signal_connect_after(G_OBJECT(entry), "grab_focus",
                         G_CALLBACK(compose_grab_focus_cb), compose);
+
+       g_signal_connect(G_OBJECT(button), "clicked",
+                        G_CALLBACK(compose_headerentry_button_clicked_cb),
+                        headerentry); 
                         
        /* email dnd */
        gtk_drag_dest_set(entry, GTK_DEST_DEFAULT_ALL, compose_mime_types, 
@@ -6367,6 +6419,8 @@ static void compose_create_header_entry(Compose *compose)
         headerentry->compose = compose;
         headerentry->combo = combo;
         headerentry->entry = entry;
+        headerentry->button = button;
+        headerentry->hbox = hbox;
         headerentry->headernum = compose->header_nextrow;
 
         compose->header_nextrow++;
@@ -10356,6 +10410,13 @@ static void compose_toggle_remove_refs_cb(GtkToggleAction *action, gpointer data
                compose->remove_references = FALSE;
 }
 
+static gboolean compose_headerentry_button_clicked_cb (GtkWidget *button,
+                                        ComposeHeaderEntry *headerentry)
+{
+       gtk_entry_set_text(GTK_ENTRY(headerentry->entry), "");
+       return FALSE;
+}
+
 static gboolean compose_headerentry_key_press_event_cb(GtkWidget *entry,
                                            GdkEventKey *event,
                                            ComposeHeaderEntry *headerentry)
@@ -10702,8 +10763,10 @@ static void compose_reply_from_messageview_real(MessageView *msgview, GSList *ms
 
                                tmp_msginfo->folder = orig_msginfo->folder;
                                tmp_msginfo->msgnum = orig_msginfo->msgnum; 
-                               if (orig_msginfo->tags)
+                               if (orig_msginfo->tags) {
                                        tmp_msginfo->tags = g_slist_copy(orig_msginfo->tags);
+                                       tmp_msginfo->folder->tags_dirty = TRUE;
+                               }
                        }
                }
        }