static gboolean compose_send_control_enter (Compose *compose);
static gint compose_defer_auto_save_draft (Compose *compose);
+static PrefsAccount *compose_guess_forward_account_from_msginfo (MsgInfo *msginfo);
static GtkItemFactoryEntry compose_popup_entries[] =
{
g_return_val_if_fail(msginfo != NULL, NULL);
g_return_val_if_fail(msginfo->folder != NULL, NULL);
- if (msginfo->folder->prefs->enable_default_account)
- account = account_find_from_id(msginfo->folder->prefs->default_account);
- if (!account)
- account = msginfo->folder->folder->account;
- if (!account && msginfo->to && prefs_common.forward_account_autosel) {
- gchar *to;
- Xstrdup_a(to, msginfo->to, return NULL);
- extract_address(to);
- account = account_find_from_address(to);
- }
-
- if (!account && prefs_common.forward_account_autosel) {
- gchar cc[BUFFSIZE];
- if (!procheader_get_header_from_msginfo(msginfo,cc,sizeof(cc),"CC:")){ /* Found a CC header */
- extract_address(cc);
- account = account_find_from_address(cc);
- }
- }
-
- if (account == NULL) {
+ if (!account &&
+ !(account = compose_guess_forward_account_from_msginfo
+ (msginfo)))
account = cur_account;
- /*
- account = msginfo->folder->folder->account;
- if (!account) account = cur_account;
- */
- }
- g_return_val_if_fail(account != NULL, NULL);
compose = compose_create(account, COMPOSE_FORWARD);
gchar *msgfile;
g_return_val_if_fail(msginfo_list != NULL, NULL);
-
- for (msginfo = msginfo_list; msginfo != NULL; msginfo = msginfo->next) {
- if ( ((MsgInfo *)msginfo->data)->folder == NULL )
+
+ for (msginfo = msginfo_list; msginfo != NULL; msginfo = msginfo->next)
+ if (((MsgInfo *)msginfo->data)->folder == NULL)
return NULL;
- }
- if (account == NULL) {
+ /* guess account from first selected message */
+ if (!account &&
+ !(account = compose_guess_forward_account_from_msginfo
+ (msginfo_list->data)))
account = cur_account;
- /*
- account = msginfo->folder->folder->account;
- if (!account) account = cur_account;
- */
- }
+
g_return_val_if_fail(account != NULL, NULL);
for (msginfo = msginfo_list; msginfo != NULL; msginfo = msginfo->next) {
text = GTK_STEXT(compose->text);
gtk_stext_freeze(text);
-
+
for (msginfo = msginfo_list; msginfo != NULL; msginfo = msginfo->next) {
msgfile = procmsg_get_message_file_path((MsgInfo *)msginfo->data);
if (!is_file_exist(msgfile))
}
#endif
+/*!
+ *\brief Guess originating forward account from MsgInfo and several
+ * "common preference" settings. Return NULL if no guess.
+ */
+static PrefsAccount *compose_guess_forward_account_from_msginfo(MsgInfo *msginfo)
+{
+ PrefsAccount *account = NULL;
+
+ g_return_val_if_fail(msginfo, NULL);
+ g_return_val_if_fail(msginfo->folder, NULL);
+ g_return_val_if_fail(msginfo->folder->prefs, NULL);
+
+ if (msginfo->folder->prefs->enable_default_account)
+ account = account_find_from_id(msginfo->folder->prefs->default_account);
+
+ if (!account)
+ account = msginfo->folder->folder->account;
+
+ if (!account && msginfo->to && prefs_common.forward_account_autosel) {
+ gchar *to;
+ Xstrdup_a(to, msginfo->to, return NULL);
+ extract_address(to);
+ account = account_find_from_address(to);
+ }
+
+ if (!account && prefs_common.forward_account_autosel) {
+ gchar cc[BUFFSIZE];
+ if (!procheader_get_header_from_msginfo
+ (msginfo, cc,sizeof cc , "CC:")) { /* Found a CC header */
+ extract_address(cc);
+ account = account_find_from_address(cc);
+ }
+ }
+
+ return account;
+}
+
/**
* Add entry field for each address in list.
* \param compose E-Mail composition object.