cmark); \
}
+static void compose_set_save_to(Compose *compose, const gchar *folderidentifier)
+{
+ GtkEditable *entry;
+ if (folderidentifier) {
+ combobox_unset_popdown_strings(GTK_COMBO_BOX(compose->savemsg_combo));
+ prefs_common.compose_save_to_history = add_history(
+ prefs_common.compose_save_to_history, folderidentifier);
+ combobox_set_popdown_strings(GTK_COMBO_BOX(compose->savemsg_combo),
+ prefs_common.compose_save_to_history);
+ }
+
+ entry = GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(compose->savemsg_combo)));
+ if (folderidentifier)
+ gtk_entry_set_text(GTK_ENTRY(entry), folderidentifier);
+ else
+ gtk_entry_set_text(GTK_ENTRY(entry), "");
+}
+
+static gchar *compose_get_save_to(Compose *compose)
+{
+ GtkEditable *entry;
+ gchar *result = NULL;
+ entry = GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(compose->savemsg_combo)));
+ result = gtk_editable_get_chars(entry, 0, -1);
+
+ if (result) {
+ combobox_unset_popdown_strings(GTK_COMBO_BOX(compose->savemsg_combo));
+ prefs_common.compose_save_to_history = add_history(
+ prefs_common.compose_save_to_history, result);
+ combobox_set_popdown_strings(GTK_COMBO_BOX(compose->savemsg_combo),
+ prefs_common.compose_save_to_history);
+ }
+ return result;
+}
+
Compose *compose_generic_new(PrefsAccount *account, const gchar *mailto, FolderItem *item,
GPtrArray *attach_files, GList *listAddress )
{
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn), prefs_common.savemsg);
folderidentifier = folder_item_get_identifier(item);
- gtk_entry_set_text(GTK_ENTRY(compose->savemsg_entry), folderidentifier);
+ compose_set_save_to(compose, folderidentifier);
g_free(folderidentifier);
}
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn), TRUE);
folderidentifier = folder_item_get_identifier(msginfo->folder);
- gtk_entry_set_text(GTK_ENTRY(compose->savemsg_entry), folderidentifier);
+ compose_set_save_to(compose, folderidentifier);
g_free(folderidentifier);
}
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn), TRUE);
folderidentifier = folder_item_get_identifier(msginfo->folder);
- gtk_entry_set_text(GTK_ENTRY(compose->savemsg_entry), folderidentifier);
+ compose_set_save_to(compose, folderidentifier);
g_free(folderidentifier);
}
/* Set message save folder */
if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf, sizeof(queueheader_buf), "SCF:")) {
- gint startpos = 0;
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn), TRUE);
- gtk_editable_delete_text(GTK_EDITABLE(compose->savemsg_entry), 0, -1);
- gtk_editable_insert_text(GTK_EDITABLE(compose->savemsg_entry), &queueheader_buf[4], strlen(&queueheader_buf[4]), &startpos);
+ compose_set_save_to(compose, &queueheader_buf[4]);
}
if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf, sizeof(queueheader_buf), "RRCPT:")) {
gint active = atoi(&queueheader_buf[strlen("RRCPT:")]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn), prefs_common.savemsg);
folderidentifier = folder_item_get_identifier(item);
- gtk_entry_set_text(GTK_ENTRY(compose->savemsg_entry), folderidentifier);
+ compose_set_save_to(compose, folderidentifier);
g_free(folderidentifier);
}
MimeInfo *mimemsg, *mimetext;
gint line;
const gchar *src_codeset = CS_INTERNAL;
+ gchar *from_addr = NULL;
+ gchar *from_name = NULL;
if (action == COMPOSE_WRITE_FOR_SEND)
attach_parts = TRUE;
g_free(buf);
+ if (strlen(gtk_entry_get_text(GTK_ENTRY(compose->from_name))) != 0) {
+ gchar *spec = gtk_editable_get_chars(GTK_EDITABLE(compose->from_name), 0, -1);
+ /* extract name and address */
+ if (strstr(spec, " <") && strstr(spec, ">")) {
+ from_addr = g_strdup(strrchr(spec, '<')+1);
+ *(strrchr(from_addr, '>')) = '\0';
+ from_name = g_strdup(spec);
+ *(strrchr(from_name, '<')) = '\0';
+ } else {
+ from_name = NULL;
+ from_addr = NULL;
+ }
+ g_free(spec);
+ }
/* 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, compose->account))
+ if (!privacy_sign(compose->privacy_system, mimemsg,
+ compose->account, from_addr)) {
+ g_free(from_name);
+ g_free(from_addr);
return -2;
-
+ }
+ g_free(from_name);
+ g_free(from_addr);
procmime_write_mimeinfo(mimemsg, fp);
procmime_mimeinfo_free_all(mimemsg);
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn))) {
gchar *savefolderid;
- savefolderid = gtk_editable_get_chars(GTK_EDITABLE(compose->savemsg_entry), 0, -1);
+ savefolderid = compose_get_save_to(compose);
err |= (fprintf(fp, "SCF:%s\n", savefolderid) < 0);
g_free(savefolderid);
}
mimepart->disposition = DISPOSITIONTYPE_INLINE;
} else {
if (ainfo->name) {
- g_hash_table_insert(mimepart->typeparameters,
- g_strdup("name"), g_strdup(ainfo->name));
+ if (mimepart->type == MIMETYPE_APPLICATION &&
+ !strcmp2(mimepart->subtype, "octet-stream"))
+ g_hash_table_insert(mimepart->typeparameters,
+ g_strdup("name"), g_strdup(ainfo->name));
g_hash_table_insert(mimepart->dispositionparameters,
g_strdup("filename"), g_strdup(ainfo->name));
mimepart->disposition = DISPOSITIONTYPE_ATTACHMENT;
{
GtkWidget *table;
GtkWidget *savemsg_checkbtn;
- GtkWidget *savemsg_entry;
+ GtkWidget *savemsg_combo;
GtkWidget *savemsg_select;
guint rowcount = 0;
g_signal_connect(G_OBJECT(savemsg_checkbtn), "toggled",
G_CALLBACK(compose_savemsg_checkbtn_cb), compose);
- savemsg_entry = gtk_entry_new();
- gtk_widget_show(savemsg_entry);
- gtk_table_attach_defaults(GTK_TABLE(table), savemsg_entry, 1, 2, rowcount, rowcount + 1);
- gtk_editable_set_editable(GTK_EDITABLE(savemsg_entry), prefs_common.savemsg);
- g_signal_connect_after(G_OBJECT(savemsg_entry), "grab_focus",
+ savemsg_combo = gtk_combo_box_entry_new_text();
+ compose->savemsg_checkbtn = savemsg_checkbtn;
+ compose->savemsg_combo = savemsg_combo;
+ gtk_widget_show(savemsg_combo);
+
+ if (prefs_common.compose_save_to_history)
+ combobox_set_popdown_strings(GTK_COMBO_BOX(savemsg_combo),
+ prefs_common.compose_save_to_history);
+
+ gtk_table_attach(GTK_TABLE(table), savemsg_combo, 1, 2, rowcount, rowcount + 1, GTK_FILL|GTK_EXPAND, GTK_SHRINK, 0, 0);
+ gtk_widget_set_sensitive(GTK_WIDGET(savemsg_combo), prefs_common.savemsg);
+ g_signal_connect_after(G_OBJECT(savemsg_combo), "grab_focus",
G_CALLBACK(compose_grab_focus_cb), compose);
if (account_get_special_folder(compose->account, F_OUTBOX)) {
folderidentifier = folder_item_get_identifier(account_get_special_folder
(compose->account, F_OUTBOX));
- gtk_entry_set_text(GTK_ENTRY(savemsg_entry), folderidentifier);
+ compose_set_save_to(compose, folderidentifier);
g_free(folderidentifier);
}
rowcount++;
- compose->savemsg_checkbtn = savemsg_checkbtn;
- compose->savemsg_entry = savemsg_entry;
-
return table;
}
static void compose_savemsg_checkbtn_cb(GtkWidget *widget, Compose *compose)
{
- gtk_editable_set_editable(GTK_EDITABLE(compose->savemsg_entry),
+ gtk_widget_set_sensitive(GTK_WIDGET(compose->savemsg_combo),
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn)));
}
path = folder_item_get_identifier(dest);
- gtk_entry_set_text(GTK_ENTRY(compose->savemsg_entry), path);
+ compose_set_save_to(compose, path);
g_free(path);
}
*cancelled = TRUE;
gtk_main_quit();
}
+ if (event && event->keyval == GDK_Return) {
+ *cancelled = FALSE;
+ gtk_main_quit();
+ }
return FALSE;
}
g_signal_connect(G_OBJECT(compose->savemsg_checkbtn), "toggled",
G_CALLBACK(compose_savemsg_checkbtn_cb), compose);
- gtk_editable_delete_text(GTK_EDITABLE(compose->savemsg_entry), 0, -1);
+ compose_set_save_to(compose, NULL);
if (account_get_special_folder(compose->account, F_OUTBOX)) {
folderidentifier = folder_item_get_identifier(account_get_special_folder
(compose->account, F_OUTBOX));
- gtk_entry_set_text(GTK_ENTRY(compose->savemsg_entry), folderidentifier);
+ compose_set_save_to(compose, folderidentifier);
g_free(folderidentifier);
}
}
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn))) {
gchar *savefolderid;
- savefolderid = gtk_editable_get_chars(GTK_EDITABLE(compose->savemsg_entry), 0, -1);
+ savefolderid = compose_get_save_to(compose);
err |= (fprintf(fp, "SCF:%s\n", savefolderid) < 0);
g_free(savefolderid);
}