#include "timing.h"
#include "autofaces.h"
#include "spell_entry.h"
+#include "headers.h"
enum
{
typedef enum
{
- COMPOSE_CALL_ADVANCED_ACTION_MOVE_BEGINNING_OF_LINE,
+ COMPOSE_CALL_ADVANCED_ACTION_UNDEFINED = -1,
+ COMPOSE_CALL_ADVANCED_ACTION_MOVE_BEGINNING_OF_LINE = 0,
COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_CHARACTER,
COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_CHARACTER,
COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_WORD,
gint *msgnum,
FolderItem **item,
gchar **msgpath,
- gboolean check_subject,
+ gboolean perform_checks,
gboolean remove_reedit_target);
static int compose_add_attachments (Compose *compose,
MimeInfo *parent);
static GtkActionEntry compose_popup_entries[] =
{
- {"Compose", NULL, "Compose" },
- {"Compose/Add", NULL, N_("_Add..."), NULL, NULL, G_CALLBACK(compose_attach_cb) },
- {"Compose/Remove", NULL, N_("_Remove"), NULL, NULL, G_CALLBACK(compose_attach_remove_selected) },
- {"Compose/---", NULL, "---", NULL, NULL, NULL },
- {"Compose/Properties", NULL, N_("_Properties..."), NULL, NULL, G_CALLBACK(compose_attach_property) },
+ {"Compose", NULL, "Compose", NULL, NULL, NULL },
+ {"Compose/Add", NULL, N_("_Add..."), NULL, NULL, G_CALLBACK(compose_attach_cb) },
+ {"Compose/Remove", NULL, N_("_Remove"), NULL, NULL, G_CALLBACK(compose_attach_remove_selected) },
+ {"Compose/---", NULL, "---", NULL, NULL, NULL },
+ {"Compose/Properties", NULL, N_("_Properties..."), NULL, NULL, G_CALLBACK(compose_attach_property) },
};
static GtkActionEntry compose_entries[] =
{
- {"Menu", NULL, "Menu" },
+ {"Menu", NULL, "Menu", NULL, NULL, NULL },
/* menus */
- {"Message", NULL, N_("_Message") },
- {"Edit", NULL, N_("_Edit") },
+ {"Message", NULL, N_("_Message"), NULL, NULL, NULL },
+ {"Edit", NULL, N_("_Edit"), NULL, NULL, NULL },
#if USE_ENCHANT
- {"Spelling", NULL, N_("_Spelling") },
+ {"Spelling", NULL, N_("_Spelling"), NULL, NULL, NULL },
#endif
- {"Options", NULL, N_("_Options") },
- {"Tools", NULL, N_("_Tools") },
- {"Help", NULL, N_("_Help") },
+ {"Options", NULL, N_("_Options"), NULL, NULL, NULL },
+ {"Tools", NULL, N_("_Tools"), NULL, NULL, NULL },
+ {"Help", NULL, N_("_Help"), NULL, NULL, NULL },
/* Message menu */
- {"Message/Send", NULL, N_("S_end"), "<control>Return", NULL, G_CALLBACK(compose_send_cb) },
- {"Message/SendLater", NULL, N_("Send _later"), "<shift><control>S", NULL, G_CALLBACK(compose_send_later_cb) },
- {"Message/---", NULL, "---" },
-
- {"Message/AttachFile", NULL, N_("_Attach file"), "<control>M", NULL, G_CALLBACK(compose_attach_cb) },
- {"Message/InsertFile", NULL, N_("_Insert file"), "<control>I", NULL, G_CALLBACK(compose_insert_file_cb) },
- {"Message/InsertSig", NULL, N_("Insert si_gnature"), "<control>G", NULL, G_CALLBACK(compose_insert_sig_cb) },
- {"Message/ReplaceSig", NULL, N_("_Replace signature"), NULL, NULL, G_CALLBACK(compose_replace_sig_cb) },
- /* {"Message/---", NULL, "---" }, */
- {"Message/Save", NULL, N_("_Save"), "<control>S", NULL, G_CALLBACK(compose_save_cb) }, /*COMPOSE_KEEP_EDITING*/
- /* {"Message/---", NULL, "---" }, */
- {"Message/Print", NULL, N_("_Print"), NULL, NULL, G_CALLBACK(compose_print_cb) },
- /* {"Message/---", NULL, "---" }, */
- {"Message/Close", NULL, N_("_Close"), "<control>W", NULL, G_CALLBACK(compose_close_cb) },
+ {"Message/Send", NULL, N_("S_end"), "<control>Return", NULL, G_CALLBACK(compose_send_cb) },
+ {"Message/SendLater", NULL, N_("Send _later"), "<shift><control>S", NULL, G_CALLBACK(compose_send_later_cb) },
+ {"Message/---", NULL, "---", NULL, NULL, NULL },
+
+ {"Message/AttachFile", NULL, N_("_Attach file"), "<control>M", NULL, G_CALLBACK(compose_attach_cb) },
+ {"Message/InsertFile", NULL, N_("_Insert file"), "<control>I", NULL, G_CALLBACK(compose_insert_file_cb) },
+ {"Message/InsertSig", NULL, N_("Insert si_gnature"), "<control>G", NULL, G_CALLBACK(compose_insert_sig_cb) },
+ {"Message/ReplaceSig", NULL, N_("_Replace signature"), NULL, NULL, G_CALLBACK(compose_replace_sig_cb) },
+ /* {"Message/---", NULL, "---", NULL, NULL, NULL }, */
+ {"Message/Save", NULL, N_("_Save"), "<control>S", NULL, G_CALLBACK(compose_save_cb) }, /*COMPOSE_KEEP_EDITING*/
+ /* {"Message/---", NULL, "---", NULL, NULL, NULL }, */
+ {"Message/Print", NULL, N_("_Print"), NULL, NULL, G_CALLBACK(compose_print_cb) },
+ /* {"Message/---", NULL, "---", NULL, NULL, NULL }, */
+ {"Message/Close", NULL, N_("_Close"), "<control>W", NULL, G_CALLBACK(compose_close_cb) },
/* Edit menu */
- {"Edit/Undo", NULL, N_("_Undo"), "<control>Z", NULL, G_CALLBACK(compose_undo_cb) },
- {"Edit/Redo", NULL, N_("_Redo"), "<control>Y", NULL, G_CALLBACK(compose_redo_cb) },
- {"Edit/---", NULL, "---" },
-
- {"Edit/Cut", NULL, N_("Cu_t"), "<control>X", NULL, G_CALLBACK(compose_cut_cb) },
- {"Edit/Copy", NULL, N_("_Copy"), "<control>C", NULL, G_CALLBACK(compose_copy_cb) },
- {"Edit/Paste", NULL, N_("_Paste"), "<control>V", NULL, G_CALLBACK(compose_paste_cb) },
-
- {"Edit/SpecialPaste", NULL, N_("_Special paste") },
- {"Edit/SpecialPaste/AsQuotation", NULL, N_("As _quotation"), NULL, NULL, G_CALLBACK(compose_paste_as_quote_cb) },
- {"Edit/SpecialPaste/Wrapped", NULL, N_("_Wrapped"), NULL, NULL, G_CALLBACK(compose_paste_wrap_cb) },
- {"Edit/SpecialPaste/Unwrapped", NULL, N_("_Unwrapped"), NULL, NULL, G_CALLBACK(compose_paste_no_wrap_cb) },
-
- {"Edit/SelectAll", NULL, N_("Select _all"), "<control>A", NULL, G_CALLBACK(compose_allsel_cb) },
-
- {"Edit/Advanced", NULL, N_("A_dvanced") },
- {"Edit/Advanced/BackChar", NULL, N_("Move a character backward"), "<shift><control>B", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_CHARACTER*/
- {"Edit/Advanced/ForwChar", NULL, N_("Move a character forward"), "<shift><control>F", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_CHARACTER*/
- {"Edit/Advanced/BackWord", NULL, N_("Move a word backward"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_WORD*/
- {"Edit/Advanced/ForwWord", NULL, N_("Move a word forward"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_WORD*/
- {"Edit/Advanced/BegLine", NULL, N_("Move to beginning of line"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_BEGINNING_OF_LINE*/
- {"Edit/Advanced/EndLine", NULL, N_("Move to end of line"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_END_OF_LINE*/
- {"Edit/Advanced/PrevLine", NULL, N_("Move to previous line"), "<control>P", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_PREVIOUS_LINE*/
- {"Edit/Advanced/NextLine", NULL, N_("Move to next line"), "<control>N", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_NEXT_LINE*/
- {"Edit/Advanced/DelBackChar", NULL, N_("Delete a character backward"), "<control>H", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_BACKWARD_CHARACTER*/
- {"Edit/Advanced/DelForwChar", NULL, N_("Delete a character forward"), "<control>D", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_FORWARD_CHARACTER*/
- {"Edit/Advanced/DelBackWord", NULL, N_("Delete a word backward"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_BACKWARD_WORD*/
- {"Edit/Advanced/DelForwWord", NULL, N_("Delete a word forward"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_FORWARD_WORD*/
- {"Edit/Advanced/DelLine", NULL, N_("Delete line"), "<control>U", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_LINE*/
- {"Edit/Advanced/DelEndLine", NULL, N_("Delete to end of line"), "<control>K", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_TO_LINE_END*/
-
- /* {"Edit/---", NULL, "---" }, */
- {"Edit/Find", NULL, N_("_Find"), "<control>F", NULL, G_CALLBACK(compose_find_cb) },
-
- /* {"Edit/---", NULL, "---" }, */
- {"Edit/WrapPara", NULL, N_("_Wrap current paragraph"), "<control>L", NULL, G_CALLBACK(compose_wrap_cb) }, /* 0 */
- {"Edit/WrapAllLines", NULL, N_("Wrap all long _lines"), "<control><alt>L", NULL, G_CALLBACK(compose_wrap_all_cb) }, /* 1 */
- /* {"Edit/---", NULL, "---" }, */
- {"Edit/ExtEditor", NULL, N_("Edit with e_xternal editor"), "<shift><control>X", NULL, G_CALLBACK(compose_ext_editor_cb) },
+ {"Edit/Undo", NULL, N_("_Undo"), "<control>Z", NULL, G_CALLBACK(compose_undo_cb) },
+ {"Edit/Redo", NULL, N_("_Redo"), "<control>Y", NULL, G_CALLBACK(compose_redo_cb) },
+ {"Edit/---", NULL, "---", NULL, NULL, NULL },
+
+ {"Edit/Cut", NULL, N_("Cu_t"), "<control>X", NULL, G_CALLBACK(compose_cut_cb) },
+ {"Edit/Copy", NULL, N_("_Copy"), "<control>C", NULL, G_CALLBACK(compose_copy_cb) },
+ {"Edit/Paste", NULL, N_("_Paste"), "<control>V", NULL, G_CALLBACK(compose_paste_cb) },
+
+ {"Edit/SpecialPaste", NULL, N_("_Special paste"), NULL, NULL, NULL },
+ {"Edit/SpecialPaste/AsQuotation", NULL, N_("As _quotation"), NULL, NULL, G_CALLBACK(compose_paste_as_quote_cb) },
+ {"Edit/SpecialPaste/Wrapped", NULL, N_("_Wrapped"), NULL, NULL, G_CALLBACK(compose_paste_wrap_cb) },
+ {"Edit/SpecialPaste/Unwrapped", NULL, N_("_Unwrapped"), NULL, NULL, G_CALLBACK(compose_paste_no_wrap_cb) },
+
+ {"Edit/SelectAll", NULL, N_("Select _all"), "<control>A", NULL, G_CALLBACK(compose_allsel_cb) },
+
+ {"Edit/Advanced", NULL, N_("A_dvanced"), NULL, NULL, NULL },
+ {"Edit/Advanced/BackChar", NULL, N_("Move a character backward"), "<shift><control>B", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_CHARACTER*/
+ {"Edit/Advanced/ForwChar", NULL, N_("Move a character forward"), "<shift><control>F", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_CHARACTER*/
+ {"Edit/Advanced/BackWord", NULL, N_("Move a word backward"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_BACKWARD_WORD*/
+ {"Edit/Advanced/ForwWord", NULL, N_("Move a word forward"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_FORWARD_WORD*/
+ {"Edit/Advanced/BegLine", NULL, N_("Move to beginning of line"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_BEGINNING_OF_LINE*/
+ {"Edit/Advanced/EndLine", NULL, N_("Move to end of line"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_END_OF_LINE*/
+ {"Edit/Advanced/PrevLine", NULL, N_("Move to previous line"), "<control>P", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_PREVIOUS_LINE*/
+ {"Edit/Advanced/NextLine", NULL, N_("Move to next line"), "<control>N", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_MOVE_NEXT_LINE*/
+ {"Edit/Advanced/DelBackChar", NULL, N_("Delete a character backward"), "<control>H", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_BACKWARD_CHARACTER*/
+ {"Edit/Advanced/DelForwChar", NULL, N_("Delete a character forward"), "<control>D", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_FORWARD_CHARACTER*/
+ {"Edit/Advanced/DelBackWord", NULL, N_("Delete a word backward"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_BACKWARD_WORD*/
+ {"Edit/Advanced/DelForwWord", NULL, N_("Delete a word forward"), NULL, NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_FORWARD_WORD*/
+ {"Edit/Advanced/DelLine", NULL, N_("Delete line"), "<control>U", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_LINE*/
+ {"Edit/Advanced/DelEndLine", NULL, N_("Delete to end of line"), "<control>K", NULL, G_CALLBACK(compose_advanced_action_cb) }, /*COMPOSE_CALL_ADVANCED_ACTION_DELETE_TO_LINE_END*/
+
+ /* {"Edit/---", NULL, "---", NULL, NULL, NULL }, */
+ {"Edit/Find", NULL, N_("_Find"), "<control>F", NULL, G_CALLBACK(compose_find_cb) },
+
+ /* {"Edit/---", NULL, "---", NULL, NULL, NULL }, */
+ {"Edit/WrapPara", NULL, N_("_Wrap current paragraph"), "<control>L", NULL, G_CALLBACK(compose_wrap_cb) }, /* 0 */
+ {"Edit/WrapAllLines", NULL, N_("Wrap all long _lines"), "<control><alt>L", NULL, G_CALLBACK(compose_wrap_all_cb) }, /* 1 */
+ /* {"Edit/---", NULL, "---", NULL, NULL, NULL }, */
+ {"Edit/ExtEditor", NULL, N_("Edit with e_xternal editor"), "<shift><control>X", NULL, G_CALLBACK(compose_ext_editor_cb) },
#if USE_ENCHANT
/* Spelling menu */
- {"Spelling/CheckAllSel", NULL, N_("_Check all or check selection"), NULL, NULL, G_CALLBACK(compose_check_all) },
- {"Spelling/HighlightAll", NULL, N_("_Highlight all misspelled words"), NULL, NULL, G_CALLBACK(compose_highlight_all) },
- {"Spelling/CheckBackwards", NULL, N_("Check _backwards misspelled word"), NULL, NULL, G_CALLBACK(compose_check_backwards) },
- {"Spelling/ForwardNext", NULL, N_("_Forward to next misspelled word"), NULL, NULL, G_CALLBACK(compose_check_forwards_go) },
+ {"Spelling/CheckAllSel", NULL, N_("_Check all or check selection"), NULL, NULL, G_CALLBACK(compose_check_all) },
+ {"Spelling/HighlightAll", NULL, N_("_Highlight all misspelled words"), NULL, NULL, G_CALLBACK(compose_highlight_all) },
+ {"Spelling/CheckBackwards", NULL, N_("Check _backwards misspelled word"), NULL, NULL, G_CALLBACK(compose_check_backwards) },
+ {"Spelling/ForwardNext", NULL, N_("_Forward to next misspelled word"), NULL, NULL, G_CALLBACK(compose_check_forwards_go) },
- {"Spelling/---", NULL, "---" },
- {"Spelling/Options", NULL, N_("_Options") },
+ {"Spelling/---", NULL, "---", NULL, NULL, NULL },
+ {"Spelling/Options", NULL, N_("_Options"), NULL, NULL, NULL },
#endif
/* Options menu */
+ {"Options/ReplyMode", NULL, N_("Reply _mode"), NULL, NULL, NULL },
+ {"Options/---", NULL, "---", NULL, NULL, NULL },
+ {"Options/PrivacySystem", NULL, N_("Privacy _System"), NULL, NULL, NULL },
+ {"Options/PrivacySystem/PlaceHolder", NULL, "Placeholder", NULL, NULL, G_CALLBACK(compose_nothing_cb) },
- {"Options/ReplyMode", NULL, N_("Reply _mode") },
- {"Options/---", NULL, "---" },
- {"Options/PrivacySystem", NULL, N_("Privacy _System") },
- {"Options/PrivacySystem/PlaceHolder", NULL, "Placeholder", NULL, NULL, G_CALLBACK(compose_nothing_cb) },
+ /* {"Options/---", NULL, "---", NULL, NULL, NULL }, */
+ {"Options/Priority", NULL, N_("_Priority"), NULL, NULL, NULL },
- /* {"Options/---", NULL, "---" }, */
-
- {"Options/Priority", NULL, N_("_Priority") },
-
- {"Options/Encoding", NULL, N_("Character _encoding") },
- {"Options/Encoding/---", NULL, "---" },
+ {"Options/Encoding", NULL, N_("Character _encoding"), NULL, NULL, NULL },
+ {"Options/Encoding/---", NULL, "---", NULL, NULL, NULL },
#define ENC_ACTION(cs_char,c_char,string) \
- { "Options/Encoding/" cs_char, NULL, N_(string), NULL, NULL, c_char }
-
- {"Options/Encoding/Western", NULL, N_("Western European") },
- {"Options/Encoding/Baltic", NULL, N_("Baltic") },
- {"Options/Encoding/Hebrew", NULL, N_("Hebrew") },
- {"Options/Encoding/Arabic", NULL, N_("Arabic") },
- {"Options/Encoding/Cyrillic", NULL, N_("Cyrillic") },
- {"Options/Encoding/Japanese", NULL, N_("Japanese") },
- {"Options/Encoding/Chinese", NULL, N_("Chinese") },
- {"Options/Encoding/Korean", NULL, N_("Korean") },
- {"Options/Encoding/Thai", NULL, N_("Thai") },
+ {"Options/Encoding/" cs_char, NULL, N_(string), NULL, NULL, c_char }
+
+ {"Options/Encoding/Western", NULL, N_("Western European"), NULL, NULL, NULL },
+ {"Options/Encoding/Baltic", NULL, N_("Baltic"), NULL, NULL, NULL },
+ {"Options/Encoding/Hebrew", NULL, N_("Hebrew"), NULL, NULL, NULL },
+ {"Options/Encoding/Arabic", NULL, N_("Arabic"), NULL, NULL, NULL },
+ {"Options/Encoding/Cyrillic", NULL, N_("Cyrillic"), NULL, NULL, NULL },
+ {"Options/Encoding/Japanese", NULL, N_("Japanese"), NULL, NULL, NULL },
+ {"Options/Encoding/Chinese", NULL, N_("Chinese"), NULL, NULL, NULL },
+ {"Options/Encoding/Korean", NULL, N_("Korean"), NULL, NULL, NULL },
+ {"Options/Encoding/Thai", NULL, N_("Thai"), NULL, NULL, NULL },
/* Tools menu */
- {"Tools/AddressBook", NULL, N_("_Address book"), NULL, NULL, G_CALLBACK(compose_address_cb) },
+ {"Tools/AddressBook", NULL, N_("_Address book"), NULL, NULL, G_CALLBACK(compose_address_cb) },
- {"Tools/Template", NULL, N_("_Template") },
- {"Tools/Template/PlaceHolder", NULL, "Placeholder", NULL, NULL, G_CALLBACK(compose_nothing_cb) },
- {"Tools/Actions", NULL, N_("Actio_ns") },
- {"Tools/Actions/PlaceHolder", NULL, "Placeholder", NULL, NULL, G_CALLBACK(compose_nothing_cb) },
+ {"Tools/Template", NULL, N_("_Template"), NULL, NULL, NULL },
+ {"Tools/Template/PlaceHolder", NULL, "Placeholder", NULL, NULL, G_CALLBACK(compose_nothing_cb) },
+ {"Tools/Actions", NULL, N_("Actio_ns"), NULL, NULL, NULL },
+ {"Tools/Actions/PlaceHolder", NULL, "Placeholder", NULL, NULL, G_CALLBACK(compose_nothing_cb) },
/* Help menu */
- {"Help/About", NULL, N_("_About"), NULL, NULL, G_CALLBACK(about_show_cb) },
+ {"Help/About", NULL, N_("_About"), NULL, NULL, G_CALLBACK(about_show_cb) },
};
static GtkToggleActionEntry compose_toggle_entries[] =
{
- {"Edit/AutoWrap", NULL, N_("Aut_o wrapping"), "<shift><control>L", NULL, G_CALLBACK(compose_toggle_autowrap_cb) }, /* TOGGLE */
- {"Edit/AutoIndent", NULL, N_("Auto _indent"), NULL, NULL, G_CALLBACK(compose_toggle_autoindent_cb) }, /* TOGGLE */
- {"Options/Sign", NULL, N_("Si_gn"), NULL, NULL, G_CALLBACK(compose_toggle_sign_cb) }, /* Toggle */
- {"Options/Encrypt", NULL, N_("_Encrypt"), NULL, NULL, G_CALLBACK(compose_toggle_encrypt_cb) }, /* Toggle */
- {"Options/RequestRetRcpt", NULL, N_("_Request Return Receipt"), NULL, NULL, G_CALLBACK(compose_toggle_return_receipt_cb) }, /* TOGGLE */
- {"Options/RemoveReferences", NULL, N_("Remo_ve references"), NULL, NULL, G_CALLBACK(compose_toggle_remove_refs_cb) }, /* TOGGLE */
- {"Tools/ShowRuler", NULL, N_("Show _ruler"), NULL, NULL, G_CALLBACK(compose_toggle_ruler_cb) }, /* Toggle */
+ {"Edit/AutoWrap", NULL, N_("Aut_o wrapping"), "<shift><control>L", NULL, G_CALLBACK(compose_toggle_autowrap_cb), FALSE }, /* Toggle */
+ {"Edit/AutoIndent", NULL, N_("Auto _indent"), NULL, NULL, G_CALLBACK(compose_toggle_autoindent_cb), FALSE }, /* Toggle */
+ {"Options/Sign", NULL, N_("Si_gn"), NULL, NULL, G_CALLBACK(compose_toggle_sign_cb), FALSE }, /* Toggle */
+ {"Options/Encrypt", NULL, N_("_Encrypt"), NULL, NULL, G_CALLBACK(compose_toggle_encrypt_cb), FALSE }, /* Toggle */
+ {"Options/RequestRetRcpt", NULL, N_("_Request Return Receipt"), NULL, NULL, G_CALLBACK(compose_toggle_return_receipt_cb), FALSE }, /* Toggle */
+ {"Options/RemoveReferences", NULL, N_("Remo_ve references"), NULL, NULL, G_CALLBACK(compose_toggle_remove_refs_cb), FALSE }, /* Toggle */
+ {"Tools/ShowRuler", NULL, N_("Show _ruler"), NULL, NULL, G_CALLBACK(compose_toggle_ruler_cb), FALSE }, /* Toggle */
};
static GtkRadioActionEntry compose_radio_rm_entries[] =
{
- {"Options/ReplyMode/Normal", NULL, N_("_Normal"), NULL, NULL, COMPOSE_REPLY }, /* RADIO compose_reply_change_mode_cb */
- {"Options/ReplyMode/All", NULL, N_("_All"), NULL, NULL, COMPOSE_REPLY_TO_ALL }, /* RADIO compose_reply_change_mode_cb */
- {"Options/ReplyMode/Sender", NULL, N_("_Sender"), NULL, NULL, COMPOSE_REPLY_TO_SENDER }, /* RADIO compose_reply_change_mode_cb */
- {"Options/ReplyMode/List", NULL, N_("_Mailing-list"), NULL, NULL, COMPOSE_REPLY_TO_LIST }, /* RADIO compose_reply_change_mode_cb */
+ {"Options/ReplyMode/Normal", NULL, N_("_Normal"), NULL, NULL, COMPOSE_REPLY }, /* RADIO compose_reply_change_mode_cb */
+ {"Options/ReplyMode/All", NULL, N_("_All"), NULL, NULL, COMPOSE_REPLY_TO_ALL }, /* RADIO compose_reply_change_mode_cb */
+ {"Options/ReplyMode/Sender", NULL, N_("_Sender"), NULL, NULL, COMPOSE_REPLY_TO_SENDER }, /* RADIO compose_reply_change_mode_cb */
+ {"Options/ReplyMode/List", NULL, N_("_Mailing-list"), NULL, NULL, COMPOSE_REPLY_TO_LIST }, /* RADIO compose_reply_change_mode_cb */
};
static GtkRadioActionEntry compose_radio_prio_entries[] =
{
- {"Options/Priority/Highest", NULL, N_("_Highest"), NULL, NULL, PRIORITY_HIGHEST }, /* RADIO compose_set_priority_cb */
- {"Options/Priority/High", NULL, N_("Hi_gh"), NULL, NULL, PRIORITY_HIGH }, /* RADIO compose_set_priority_cb */
- {"Options/Priority/Normal", NULL, N_("_Normal"), NULL, NULL, PRIORITY_NORMAL }, /* RADIO compose_set_priority_cb */
- {"Options/Priority/Low", NULL, N_("Lo_w"), NULL, NULL, PRIORITY_LOW }, /* RADIO compose_set_priority_cb */
- {"Options/Priority/Lowest", NULL, N_("_Lowest"), NULL, NULL, PRIORITY_LOWEST }, /* RADIO compose_set_priority_cb */
+ {"Options/Priority/Highest", NULL, N_("_Highest"), NULL, NULL, PRIORITY_HIGHEST }, /* RADIO compose_set_priority_cb */
+ {"Options/Priority/High", NULL, N_("Hi_gh"), NULL, NULL, PRIORITY_HIGH }, /* RADIO compose_set_priority_cb */
+ {"Options/Priority/Normal", NULL, N_("_Normal"), NULL, NULL, PRIORITY_NORMAL }, /* RADIO compose_set_priority_cb */
+ {"Options/Priority/Low", NULL, N_("Lo_w"), NULL, NULL, PRIORITY_LOW }, /* RADIO compose_set_priority_cb */
+ {"Options/Priority/Lowest", NULL, N_("_Lowest"), NULL, NULL, PRIORITY_LOWEST }, /* RADIO compose_set_priority_cb */
};
static GtkRadioActionEntry compose_radio_enc_entries[] =
GtkTextMark *mark;
GtkTextIter iter;
FILE *fp;
- gchar buf[BUFFSIZE];
gboolean use_signing = FALSE;
gboolean use_encryption = FALSE;
gchar *privacy_system = NULL;
if (folder_has_parent_of_type(msginfo->folder, F_QUEUE) ||
folder_has_parent_of_type(msginfo->folder, F_DRAFT) ||
folder_has_parent_of_type(msginfo->folder, F_OUTBOX)) {
- gchar queueheader_buf[BUFFSIZE];
+ gchar *queueheader_buf = NULL;
gint id, param;
/* Select Account from queue headers */
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Claws-Account-Id:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Claws-Account-Id:")) {
id = atoi(&queueheader_buf[strlen("X-Claws-Account-Id:")]);
account = account_find_from_id(id);
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Sylpheed-Account-Id:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Sylpheed-Account-Id:")) {
id = atoi(&queueheader_buf[strlen("X-Sylpheed-Account-Id:")]);
account = account_find_from_id(id);
+ g_free(queueheader_buf);
}
- if (!account && !procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "NAID:")) {
+ if (!account && !procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "NAID:")) {
id = atoi(&queueheader_buf[strlen("NAID:")]);
account = account_find_from_id(id);
+ g_free(queueheader_buf);
}
- if (!account && !procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "MAID:")) {
+ if (!account && !procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "MAID:")) {
id = atoi(&queueheader_buf[strlen("MAID:")]);
account = account_find_from_id(id);
+ g_free(queueheader_buf);
}
- if (!account && !procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "S:")) {
+ if (!account && !procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "S:")) {
account = account_find_from_address(queueheader_buf, FALSE);
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Claws-Sign:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Claws-Sign:")) {
param = atoi(&queueheader_buf[strlen("X-Claws-Sign:")]);
use_signing = param;
-
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Sylpheed-Sign:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Sylpheed-Sign:")) {
param = atoi(&queueheader_buf[strlen("X-Sylpheed-Sign:")]);
use_signing = param;
-
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Claws-Encrypt:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Claws-Encrypt:")) {
param = atoi(&queueheader_buf[strlen("X-Claws-Encrypt:")]);
use_encryption = param;
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Sylpheed-Encrypt:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Sylpheed-Encrypt:")) {
param = atoi(&queueheader_buf[strlen("X-Sylpheed-Encrypt:")]);
use_encryption = param;
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Claws-Auto-Wrapping:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Claws-Auto-Wrapping:")) {
param = atoi(&queueheader_buf[strlen("X-Claws-Auto-Wrapping:")]);
autowrap = param;
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Claws-Auto-Indent:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Claws-Auto-Indent:")) {
param = atoi(&queueheader_buf[strlen("X-Claws-Auto-Indent:")]);
autoindent = param;
+ g_free(queueheader_buf);
+ }
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Claws-Privacy-System:")) {
+ privacy_system = g_strdup(&queueheader_buf[strlen("X-Claws-Privacy-System:")]);
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Claws-Privacy-System:")) {
- privacy_system = g_strdup(&queueheader_buf[strlen("X-Claws-Privacy-System:")]);
- }
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Sylpheed-Privacy-System:")) {
- privacy_system = g_strdup(&queueheader_buf[strlen("X-Sylpheed-Privacy-System:")]);
- }
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "X-Priority: ")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Sylpheed-Privacy-System:")) {
+ privacy_system = g_strdup(&queueheader_buf[strlen("X-Sylpheed-Privacy-System:")]);
+ g_free(queueheader_buf);
+ }
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Priority: ")) {
param = atoi(&queueheader_buf[strlen("X-Priority: ")]); /* mind the space */
priority = param;
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "RMID:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "RMID:")) {
gchar **tokens = g_strsplit(&queueheader_buf[strlen("RMID:")], "\t", 0);
- if (tokens[0] && tokens[1] && tokens[2]) {
+ if (tokens && tokens[0] && tokens[1] && tokens[2]) {
FolderItem *orig_item = folder_find_item_from_identifier(tokens[0]);
if (orig_item != NULL) {
replyinfo = folder_item_get_msginfo_by_msgid(orig_item, tokens[2]);
}
+ g_strfreev(tokens);
}
- g_strfreev(tokens);
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf,
- sizeof(queueheader_buf), "FMID:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "FMID:")) {
gchar **tokens = g_strsplit(&queueheader_buf[strlen("FMID:")], "\t", 0);
- if (tokens[0] && tokens[1] && tokens[2]) {
+ if (tokens && tokens[0] && tokens[1] && tokens[2]) {
FolderItem *orig_item = folder_find_item_from_identifier(tokens[0]);
if (orig_item != NULL) {
fwdinfo = folder_item_get_msginfo_by_msgid(orig_item, tokens[2]);
}
+ g_strfreev(tokens);
}
- g_strfreev(tokens);
+ g_free(queueheader_buf);
}
/* Get manual headers */
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf, sizeof(queueheader_buf), "X-Claws-Manual-Headers:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf,
+ "X-Claws-Manual-Headers:")) {
gchar *listmh = g_strdup(&queueheader_buf[strlen("X-Claws-Manual-Headers:")]);
- if (*listmh != '\0') {
+ if (listmh && *listmh != '\0') {
debug_print("Got manual headers: %s\n", listmh);
manual_headers = procheader_entries_from_str(listmh);
+ g_free(listmh);
}
- g_free(listmh);
+ g_free(queueheader_buf);
}
} else {
account = msginfo->folder->folder->account;
}
if (!account && prefs_common.reedit_account_autosel) {
- gchar from[BUFFSIZE];
- if (!procheader_get_header_from_msginfo(msginfo, from, sizeof(from), "FROM:")) {
- extract_address(from);
- account = account_find_from_address(from, FALSE);
- }
- }
- if (!account) {
- account = cur_account;
- }
+ gchar *from = NULL;
+ if (!procheader_get_header_from_msginfo(msginfo, &from, "FROM:")) {
+ extract_address(from);
+ account = account_find_from_address(from, FALSE);
+ g_free(from);
+ }
+ }
+ if (!account) {
+ account = cur_account;
+ }
cm_return_val_if_fail(account != NULL, NULL);
compose = compose_create(account, msginfo->folder, COMPOSE_REEDIT, batch);
compose_extract_original_charset(compose);
- if (folder_has_parent_of_type(msginfo->folder, F_QUEUE) ||
+ if (folder_has_parent_of_type(msginfo->folder, F_QUEUE) ||
folder_has_parent_of_type(msginfo->folder, F_DRAFT) ||
folder_has_parent_of_type(msginfo->folder, F_OUTBOX)) {
- gchar queueheader_buf[BUFFSIZE];
+ gchar *queueheader_buf = NULL;
/* Set message save folder */
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf, sizeof(queueheader_buf), "SCF:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf, "SCF:")) {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(compose->savemsg_checkbtn), TRUE);
compose_set_save_to(compose, &queueheader_buf[4]);
+ g_free(queueheader_buf);
}
- if (!procheader_get_header_from_msginfo(msginfo, queueheader_buf, sizeof(queueheader_buf), "RRCPT:")) {
+ if (!procheader_get_header_from_msginfo(msginfo, &queueheader_buf, "RRCPT:")) {
gint active = atoi(&queueheader_buf[strlen("RRCPT:")]);
if (active) {
cm_toggle_menu_set_active_full(compose->ui_manager, "Menu/Options/RequestRetRcpt", TRUE);
}
+ g_free(queueheader_buf);
}
}
}
if (fp != NULL) {
+ gchar buf[BUFFSIZE];
gboolean prev_autowrap;
GtkTextBuffer *buffer;
BLOCK_WRAP();
static gint compose_parse_header(Compose *compose, MsgInfo *msginfo)
{
- static HeaderEntry hentry[] = {{"Reply-To:", NULL, TRUE},
- {"Cc:", NULL, TRUE},
- {"References:", NULL, FALSE},
- {"Bcc:", NULL, TRUE},
- {"Newsgroups:", NULL, TRUE},
- {"Followup-To:", NULL, TRUE},
- {"List-Post:", NULL, FALSE},
- {"X-Priority:", NULL, FALSE},
- {NULL, NULL, FALSE}};
+ static HeaderEntry hentry[] = {
+ {"Reply-To:", NULL, TRUE },
+ {"Cc:", NULL, TRUE },
+ {"References:", NULL, FALSE },
+ {"Bcc:", NULL, TRUE },
+ {"Newsgroups:", NULL, TRUE },
+ {"Followup-To:", NULL, TRUE },
+ {"List-Post:", NULL, FALSE },
+ {"X-Priority:", NULL, FALSE },
+ {NULL, NULL, FALSE }
+ };
enum
{
- H_REPLY_TO = 0,
- H_CC = 1,
- H_REFERENCES = 2,
- H_BCC = 3,
- H_NEWSGROUPS = 4,
- H_FOLLOWUP_TO = 5,
- H_LIST_POST = 6,
- H_X_PRIORITY = 7
+ H_REPLY_TO = 0,
+ H_CC = 1,
+ H_REFERENCES = 2,
+ H_BCC = 3,
+ H_NEWSGROUPS = 4,
+ H_FOLLOWUP_TO = 5,
+ H_LIST_POST = 6,
+ H_X_PRIORITY = 7
};
FILE *fp;
can_break = TRUE;
}
-// debug_print("compose_get_line_break_pos(): do_break = %d, pos = %d, col = %d\n", do_break, pos, col);
+/* debug_print("compose_get_line_break_pos(): do_break = %d, pos = %d, col = %d\n", do_break, pos, col); */
g_free(attrs);
g_free(str);
quote_str = compose_get_quote_str(buffer, &iter, "e_len);
if (quote_str) {
-// debug_print("compose_beautify_paragraph(): quote_str = '%s'\n", quote_str);
+/* debug_print("compose_beautify_paragraph(): quote_str = '%s'\n", quote_str); */
if (startq_offset == -1)
startq_offset = gtk_text_iter_get_offset(&iter);
quotelevel = get_quote_level(quote_str, prefs_common.quote_chars);
}
}
if (!modified) {
-// debug_print("not modified, out after %d lines\n", lines);
+/* debug_print("not modified, out after %d lines\n", lines); */
goto end;
}
}
-// debug_print("modified, out after %d lines\n", lines);
+/* debug_print("modified, out after %d lines\n", lines); */
end:
g_free(itemized_chars);
if (par_iter)
}
if (!found_other) {
AlertValue aval;
+ gchar *text;
if (compose->batch) {
gtk_widget_show_all(compose->window);
}
+ text = g_strdup_printf(_("The only recipient is the default '%s' address. Send anyway?"),
+ prefs_common_translated_header_name("Cc"));
aval = alertpanel(_("Send"),
- _("The only recipient is the default CC address. Send anyway?"),
+ text,
GTK_STOCK_CANCEL, g_strconcat("+", _("_Send"), NULL), NULL);
+ g_free(text);
if (aval != G_ALERTALTERNATE)
return FALSE;
}
|| strcmp(header, prefs_common_translated_header_name("Bcc:"))) {
found_other = TRUE;
g_free(entry);
+ g_free(header);
break;
}
g_free(entry);
}
if (!found_other) {
AlertValue aval;
+ gchar *text;
if (compose->batch) {
gtk_widget_show_all(compose->window);
}
+ text = g_strdup_printf(_("The only recipient is the default '%s' address. Send anyway?"),
+ prefs_common_translated_header_name("Bcc"));
aval = alertpanel(_("Send"),
- _("The only recipient is the default BCC address. Send anyway?"),
+ text,
GTK_STOCK_CANCEL, g_strconcat("+", _("_Send"), NULL), NULL);
+ g_free(text);
if (aval != G_ALERTALTERNATE)
return FALSE;
}
}
}
+ if (!compose->batch && prefs_common.warn_sending_many_recipients == TRUE
+ && check_everything == TRUE) {
+ GSList *list;
+ gint cnt = 0;
+
+ /* count To and Cc recipients */
+ for (list = compose->header_list; list; list = list->next) {
+ gchar *header;
+ gchar *entry;
+
+ header = gtk_editable_get_chars(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN((((ComposeHeaderEntry *)list->data)->combo)))), 0, -1);
+ entry = gtk_editable_get_chars(GTK_EDITABLE(((ComposeHeaderEntry *)list->data)->entry), 0, -1);
+ g_strstrip(header);
+ g_strstrip(entry);
+ if ((entry[0] != '\0')
+ && (strcmp(header, prefs_common_translated_header_name("To:"))
+ || strcmp(header, prefs_common_translated_header_name("Cc:")))) {
+ cnt++;
+ }
+ g_free(header);
+ g_free(entry);
+ }
+ if (cnt > prefs_common.warn_sending_many_recipients_num) {
+ AlertValue aval;
+ gchar *button_label;
+ gchar *message;
+
+ if (compose->sending)
+ button_label = g_strconcat("+", _("_Send"), NULL);
+ else
+ button_label = g_strconcat("+", _("_Queue"), NULL);
+ message = g_strdup_printf(_("Sending to %d recipients. %s"), cnt,
+ compose->sending?_("Send it anyway?"):
+ _("Queue it anyway?"));
+
+ aval = alertpanel_full(compose->sending?_("Send"):_("Send later"), message,
+ GTK_STOCK_CANCEL, button_label, NULL, TRUE, NULL,
+ ALERT_QUESTION, G_ALERTDEFAULT);
+ g_free(message);
+ if (aval & G_ALERTDISABLE) {
+ aval &= ~G_ALERTDISABLE;
+ prefs_common.warn_empty_subj = FALSE;
+ }
+ if (aval != G_ALERTALTERNATE)
+ return FALSE;
+ }
+ }
+
if (check_everything && hooks_invoke(COMPOSE_CHECK_BEFORE_SEND_HOOKLIST, compose))
return FALSE;
{
FILE *fp;
size_t len;
- gchar buf[BUFFSIZE];
+ gchar *buf = NULL;
+ gchar rewrite_buf[BUFFSIZE];
int i = 0;
gboolean skip = FALSE;
gboolean err = FALSE;
"X-Claws-Auto-Wrapping:", "X-Claws-Auto-Indent:",
NULL
};
+ gint ret = 0;
+
if ((fp = g_fopen(compose->redirect_filename, "rb")) == NULL) {
FILE_OP_ERROR(compose->redirect_filename, "fopen");
return -1;
}
- while (procheader_get_one_field_asis(buf, sizeof(buf), fp) != -1) {
+ while ((ret = procheader_get_one_field_asis(&buf, fp)) != -1) {
skip = FALSE;
for (i = 0; not_included[i] != NULL; i++) {
if (g_ascii_strncasecmp(buf, not_included[i],
strlen(not_included[i])) == 0) {
skip = TRUE;
+ g_free(buf);
+ buf = NULL;
break;
}
}
- if (skip)
+ if (skip) {
+ g_free(buf);
+ buf = NULL;
continue;
- if (fputs(buf, fdest) == -1)
+ }
+ if (fputs(buf, fdest) == -1) {
+ g_free(buf);
+ buf = NULL;
goto error;
+ }
if (!prefs_common.redirect_keep_from) {
if (g_ascii_strncasecmp(buf, "From:",
err |= (fputs(" (by way of ", fdest) == EOF);
if (compose->account->name
&& *compose->account->name) {
+ gchar buffer[BUFFSIZE];
+
compose_convert_header
- (compose, buf, sizeof(buf),
+ (compose, buffer, sizeof(buffer),
compose->account->name,
strlen("From: "),
FALSE);
err |= (fprintf(fdest, "%s <%s>",
- buf,
+ buffer,
compose->account->address) < 0);
} else
err |= (fprintf(fdest, "%s",
}
}
+ g_free(buf);
+ buf = NULL;
if (fputs("\n", fdest) == -1)
goto error;
}
- if (err)
+ if (err || ret == -1)
goto error;
if (compose_redirect_write_headers(compose, fdest))
goto error;
- while ((len = fread(buf, sizeof(gchar), sizeof(buf), fp)) > 0) {
- if (fwrite(buf, sizeof(gchar), len, fdest) != len)
+ while ((len = fread(rewrite_buf, sizeof(gchar), sizeof(rewrite_buf), fp)) > 0) {
+ if (fwrite(rewrite_buf, sizeof(gchar), len, fdest) != len)
goto error;
}
fclose(fp);
return 0;
+
error:
fclose(fp);
}
static gint compose_queue_sub(Compose *compose, gint *msgnum, FolderItem **item,
- gchar **msgpath, gboolean check_subject,
+ gchar **msgpath, gboolean perform_checks,
gboolean remove_reedit_target)
{
FolderItem *queue;
debug_print("queueing message...\n");
cm_return_val_if_fail(compose->account != NULL, -1);
- if (compose_check_entries(compose, check_subject) == FALSE) {
+ if (compose_check_entries(compose, perform_checks) == FALSE) {
if (compose->batch) {
gtk_widget_show_all(compose->window);
}
(compose->account->add_customhdr && \
custom_header_find(compose->account->customhdr_list, header) != NULL)
+static const gchar *compose_untranslated_header_name(gchar *header_name)
+{
+ /* return the untranslated header name, if header_name is a known
+ header name, in either its translated or untranslated form, with
+ or without trailing colon. return NULL if no matching header name
+ is found or if header_name is NULL. */
+ gchar *translated_header_name;
+ gchar *translated_header_name_wcolon;
+ const gchar *untranslated_header_name;
+ const gchar *untranslated_header_name_wcolon;
+ gint i;
+
+ cm_return_val_if_fail(header_name != NULL, NULL);
+
+ for (i = 0; HEADERS[i].header_name != NULL; i++) {
+ untranslated_header_name = HEADERS[i].header_name;
+ untranslated_header_name_wcolon = HEADERS[i].header_name_w_colon;
+
+ translated_header_name = gettext(untranslated_header_name);
+ translated_header_name_wcolon = gettext(untranslated_header_name_wcolon);
+
+ if (!strcmp(header_name, untranslated_header_name) ||
+ !strcmp(header_name, translated_header_name)) {
+ return untranslated_header_name;
+ } else {
+ if (!strcmp(header_name, untranslated_header_name_wcolon) ||
+ !strcmp(header_name, translated_header_name_wcolon)) {
+ return untranslated_header_name_wcolon;
+ }
+ }
+ }
+ debug_print("compose_untranslated_header_name: unknown header '%s'\n", header_name);
+ return NULL;
+}
+
static void compose_add_headerfield_from_headerlist(Compose *compose,
GString *header,
const gchar *fieldname,
Xstrdup_a(headervalue, entry_str, return NULL);
subst_char(headervalue, '\r', ' ');
subst_char(headervalue, '\n', ' ');
- string = std_headers;
- while (*string != NULL) {
- headername_trans = prefs_common_translated_header_name(*string);
- if (!strcmp(headername_trans, headername_wcolon))
- standard_header = TRUE;
- string++;
- }
- if (!standard_header && !IS_IN_CUSTOM_HEADER(headername))
- g_string_append_printf(header, "%s %s\n", headername_wcolon, headervalue);
-
+ g_strstrip(headervalue);
+ if (*headervalue != '\0') {
+ string = std_headers;
+ while (*string != NULL && !standard_header) {
+ headername_trans = prefs_common_translated_header_name(*string);
+ /* support mixed translated and untranslated headers */
+ if (!strcmp(headername_trans, headername_wcolon) || !strcmp(*string, headername_wcolon))
+ standard_header = TRUE;
+ string++;
+ }
+ if (!standard_header && !IS_IN_CUSTOM_HEADER(headername)) {
+ /* store untranslated header name */
+ g_string_append_printf(header, "%s %s\n",
+ compose_untranslated_header_name(headername_wcolon), headervalue);
+ }
+ }
g_free(headername);
g_free(headername_wcolon);
}
cm_return_val_if_fail(account != NULL, NULL);
+ gtkut_convert_int_to_gdk_color(prefs_common.default_header_bgcolor,
+ &default_header_bgcolor);
+ gtkut_convert_int_to_gdk_color(prefs_common.default_header_color,
+ &default_header_color);
+
debug_print("Creating compose window...\n");
compose = g_new0(Compose, 1);
gtk_widget_show(window);
}
- gtkut_convert_int_to_gdk_color(prefs_common.default_header_bgcolor,
- &default_header_bgcolor);
- gtkut_convert_int_to_gdk_color(prefs_common.default_header_color,
- &default_header_color);
-
return compose;
}
#endif
}
+static void compose_template_apply_fields_error(const gchar *header)
+{
+ gchar *tr;
+ gchar *text;
+
+ tr = g_strdup(C_("'%s' stands for a header name",
+ "Template '%s' format error."));
+ text = g_strdup_printf(tr, prefs_common_translated_header_name(header));
+ alertpanel_error(text);
+
+ g_free(text);
+ g_free(tr);
+}
+
static void compose_template_apply_fields(Compose *compose, Template *tmpl)
{
MsgInfo* dummyinfo = NULL;
buf = quote_fmt_get_buffer();
if (buf == NULL) {
- alertpanel_error(_("Template From format error."));
+ compose_template_apply_fields_error("From");
} else {
gtk_entry_set_text(GTK_ENTRY(compose->from_name), buf);
}
buf = quote_fmt_get_buffer();
if (buf == NULL) {
- alertpanel_error(_("Template To format error."));
+ compose_template_apply_fields_error("To");
} else {
compose_entry_append(compose, buf, COMPOSE_TO, PREF_TEMPLATE);
}
buf = quote_fmt_get_buffer();
if (buf == NULL) {
- alertpanel_error(_("Template Cc format error."));
+ compose_template_apply_fields_error("Cc");
} else {
compose_entry_append(compose, buf, COMPOSE_CC, PREF_TEMPLATE);
}
buf = quote_fmt_get_buffer();
if (buf == NULL) {
- alertpanel_error(_("Template Bcc format error."));
+ compose_template_apply_fields_error("Bcc");
} else {
compose_entry_append(compose, buf, COMPOSE_BCC, PREF_TEMPLATE);
}
buf = quote_fmt_get_buffer();
if (buf == NULL) {
- alertpanel_error(_("Template Reply-To format error."));
+ compose_template_apply_fields_error("Reply-To");
} else {
compose_entry_append(compose, buf, COMPOSE_REPLYTO, PREF_TEMPLATE);
}
buf = quote_fmt_get_buffer();
if (buf == NULL) {
- alertpanel_error(_("Template subject format error."));
+ compose_template_apply_fields_error("Subject");
} else {
gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), buf);
}
#endif /* G_OS_UNIX */
}
+static gboolean compose_can_autosave(Compose *compose)
+{
+ if (compose->privacy_system && compose->use_encryption)
+ return prefs_common.autosave && prefs_common.autosave_encrypted;
+ else
+ return prefs_common.autosave;
+}
+
#ifdef G_OS_UNIX
static gboolean compose_get_ext_editor_cmd_valid()
{
static gint compose_exec_ext_editor_real(const gchar *file, GdkNativeWindow socket_wid)
{
- gchar buf[1024];
+ gchar *buf;
gchar *p, *s;
gchar **cmdline;
pid_t pid;
s = strstr(p, "%w");
s[1] = 'u';
if (strstr(p, "%s") < s)
- g_snprintf(buf, sizeof(buf), p, file, socket_wid);
+ buf = g_strdup_printf(p, file, socket_wid);
else
- g_snprintf(buf, sizeof(buf), p, socket_wid, file);
+ buf = g_strdup_printf(p, socket_wid, file);
g_free(p);
} else {
- g_snprintf(buf, sizeof(buf),
- prefs_common_get_ext_editor_cmd(), file);
+ buf = g_strdup_printf(prefs_common_get_ext_editor_cmd(), file);
}
} else {
if (prefs_common_get_ext_editor_cmd())
g_warning("External editor command-line is invalid: '%s'",
prefs_common_get_ext_editor_cmd());
- g_snprintf(buf, sizeof(buf), DEFAULT_EDITOR_CMD, file);
+ buf = g_strdup_printf(DEFAULT_EDITOR_CMD, file);
}
- cmdline = strsplit_with_quote(buf, " ", 1024);
+ cmdline = strsplit_with_quote(buf, " ", 0);
+ g_free(buf);
execvp(cmdline[0], cmdline);
perror("execvp");
return TRUE;
}
-static gboolean compose_can_autosave(Compose *compose)
-{
- if (compose->privacy_system && compose->use_encryption)
- return prefs_common.autosave && prefs_common.autosave_encrypted;
- else
- return prefs_common.autosave;
-}
-
static gboolean compose_input_cb(GIOChannel *source, GIOCondition condition,
gpointer data)
{
DO_ACTION("Edit/Advanced/DelForwWord", COMPOSE_CALL_ADVANCED_ACTION_DELETE_FORWARD_WORD);
DO_ACTION("Edit/Advanced/DelLine", COMPOSE_CALL_ADVANCED_ACTION_DELETE_LINE);
DO_ACTION("Edit/Advanced/DelEndLine", COMPOSE_CALL_ADVANCED_ACTION_DELETE_TO_LINE_END);
- return -1;
+ return COMPOSE_CALL_ADVANCED_ACTION_UNDEFINED;
}
static void compose_advanced_action_cb(GtkAction *gaction, gpointer data)
{
Compose *compose = (Compose *)data;
GtkTextView *text = GTK_TEXT_VIEW(compose->text);
- ComposeCallAdvancedAction action = -1;
+ ComposeCallAdvancedAction action = COMPOSE_CALL_ADVANCED_ACTION_UNDEFINED;
action = compose_call_advanced_action_from_path(gaction);
static void compose_changed_cb(GtkTextBuffer *textbuf, Compose *compose)
{
compose->modified = TRUE;
-// compose_beautify_paragraph(compose, NULL, TRUE);
+/* compose_beautify_paragraph(compose, NULL, TRUE); */
#ifndef GENERIC_UMPC
compose_set_title(compose);
#endif
}
if (!account && prefs_common.forward_account_autosel) {
- gchar cc[BUFFSIZE];
+ gchar *cc = NULL;
if (!procheader_get_header_from_msginfo
- (msginfo, cc,sizeof cc , "Cc:")) {
+ (msginfo, &cc, "Cc:")) {
gchar *buf = cc + strlen("Cc:");
- extract_address(buf);
- account = account_find_from_address(buf, FALSE);
- }
+ extract_address(buf);
+ account = account_find_from_address(buf, FALSE);
+ g_free(cc);
+ }
}
if (!account && prefs_common.forward_account_autosel) {
- gchar deliveredto[BUFFSIZE];
+ gchar *deliveredto = NULL;
if (!procheader_get_header_from_msginfo
- (msginfo, deliveredto,sizeof deliveredto , "Delivered-To:")) {
+ (msginfo, &deliveredto, "Delivered-To:")) {
gchar *buf = deliveredto + strlen("Delivered-To:");
- extract_address(buf);
- account = account_find_from_address(buf, FALSE);
- }
+ extract_address(buf);
+ account = account_find_from_address(buf, FALSE);
+ g_free(deliveredto);
+ }
}
if (!account)