1 /* 2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client 3 * Copyright (C) 1999-2012 Hiroyuki Yamamoto 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 * 18 */ 19 20 #ifndef __COMPOSE_H__ 21 #define __COMPOSE_H__ 22 23 typedef struct _Compose Compose; 24 typedef struct _AttachInfo AttachInfo; 25 26 #include <glib.h> 27 #include <gtk/gtk.h> 28 29 #include "procmsg.h" 30 #include "procmime.h" 31 #include "prefs_account.h" 32 #include "undo.h" 33 #include "toolbar.h" 34 #include "codeconv.h" 35 #include "template.h" 36 #include "viewtypes.h" 37 #include "folder.h" 38 39 #ifdef USE_ENCHANT 40 #include "gtkaspell.h" 41 #endif 42 43 #define COMPOSE_CHECK_BEFORE_SEND_HOOKLIST "compose_check_before_send" 44 #define COMPOSE_CREATED_HOOKLIST "compose_created" 45 46 typedef enum 47 { 48 COMPOSE_TO, 49 COMPOSE_CC, 50 COMPOSE_BCC, 51 COMPOSE_REPLYTO, 52 COMPOSE_NEWSGROUPS, 53 COMPOSE_FOLLOWUPTO, 54 COMPOSE_INREPLYTO 55 } ComposeEntryType; 56 57 typedef enum 58 { 59 COMPOSE_REPLY, 60 COMPOSE_REPLY_WITH_QUOTE, 61 COMPOSE_REPLY_WITHOUT_QUOTE, 62 COMPOSE_REPLY_TO_SENDER, 63 COMPOSE_REPLY_TO_ADDRESS, 64 COMPOSE_FOLLOWUP_AND_REPLY_TO, 65 COMPOSE_REPLY_TO_SENDER_WITH_QUOTE, 66 COMPOSE_REPLY_TO_SENDER_WITHOUT_QUOTE, 67 COMPOSE_REPLY_TO_ALL, 68 COMPOSE_REPLY_TO_ALL_WITH_QUOTE, 69 COMPOSE_REPLY_TO_ALL_WITHOUT_QUOTE, 70 COMPOSE_REPLY_TO_LIST, 71 COMPOSE_REPLY_TO_LIST_WITH_QUOTE, 72 COMPOSE_REPLY_TO_LIST_WITHOUT_QUOTE, 73 COMPOSE_FORWARD, 74 COMPOSE_FORWARD_AS_ATTACH, 75 COMPOSE_FORWARD_INLINE, 76 COMPOSE_NEW, 77 COMPOSE_REDIRECT, 78 COMPOSE_REEDIT 79 } ComposeMode; 80 81 typedef enum 82 { 83 COMPOSE_QUEUE_SUCCESS = 0, 84 COMPOSE_QUEUE_ERROR_NO_MSG = -1, 85 COMPOSE_QUEUE_ERROR_WITH_ERRNO = -2, 86 COMPOSE_QUEUE_ERROR_SIGNING_FAILED = -3, 87 COMPOSE_QUEUE_ERROR_ENCRYPT_FAILED = -4, 88 COMPOSE_QUEUE_ERROR_CHAR_CONVERSION = -5, 89 COMPOSE_QUEUE_ERROR_NO_ENCRYPTION_KEY = -6, 90 COMPOSE_QUEUE_SIGNING_CANCELLED = -7 91 } ComposeQueueResult; 92 93 typedef enum { 94 PREF_ACCOUNT, 95 PREF_FOLDER, 96 PREF_TEMPLATE, 97 PREF_ML, 98 PREF_MAILTO, 99 PREF_NONE 100 } ComposePrefType; 101 102 typedef struct { 103 guint headernum; 104 Compose *compose; 105 GtkWidget *combo; 106 GtkWidget *entry; 107 GtkWidget *button; 108 GtkWidget *hbox; 109 ComposePrefType type; 110 } ComposeHeaderEntry; 111 112 struct _Compose 113 { 114 /* start with window widget don`t change order */ 115 GtkWidget *window; 116 GtkWidget *vbox; 117 GtkWidget *menubar; 118 119 /* Toolbar handlebox */ 120 GtkWidget *handlebox; 121 Toolbar *toolbar; 122 123 GtkWidget *vbox2; 124 125 /* Header */ 126 GtkWidget *table_vbox; 127 GtkWidget *table; 128 GtkWidget *account_combo; 129 GtkWidget *subject_entry; 130 GtkWidget *paned; 131 132 /* Attachments */ 133 GtkWidget *attach_scrwin; 134 GtkWidget *attach_clist; 135 GtkWidget *attach_label; 136 137 /* Others */ 138 GtkWidget *savemsg_checkbtn; 139 GtkWidget *savemsg_combo; 140 141 /* Headers notebook */ 142 GtkWidget *notebook; 143 144 /* Textedit */ 145 GtkWidget *edit_vbox; 146 GtkWidget *ruler_hbox; 147 GtkWidget *ruler; 148 GtkWidget *scrolledwin; 149 GtkWidget *text; 150 GtkWidget *from_name; 151 152 GtkWidget *focused_editable; 153 154 GtkWidget *popupmenu; 155 156 GtkWidget *tmpl_menu; 157 158 ComposeMode mode; 159 160 MsgInfo *targetinfo; 161 MsgInfo *replyinfo; 162 MsgInfo *autosaved_draft; 163 MsgInfo *fwdinfo; 164 165 GtkWidget *header_table; 166 GSList *header_list; 167 guint header_nextrow; 168 ComposeHeaderEntry *header_last; 169 170 GHashTable *email_hashtable; 171 172 gchar *replyto; 173 gchar *cc; 174 gchar *bcc; 175 gchar *newsgroups; 176 gchar *followup_to; 177 178 gchar *ml_post; 179 180 gchar *inreplyto; 181 gchar *references; 182 gchar *msgid; 183 gchar *boundary; 184 185 gboolean autowrap; 186 gboolean autoindent; 187 188 gboolean use_to; 189 gboolean use_cc; 190 gboolean use_bcc; 191 gboolean use_replyto; 192 gboolean use_newsgroups; 193 gboolean use_followupto; 194 gboolean use_attach; 195 196 CharSet out_encoding; 197 198 /* privacy settings */ 199 gboolean use_signing; 200 gboolean use_encryption; 201 gchar *privacy_system; 202 gchar *encdata; 203 204 gboolean modified; 205 206 gboolean sending; 207 208 gboolean return_receipt; 209 210 gboolean batch; 211 212 GSList *to_list; 213 GSList *newsgroup_list; 214 215 PrefsAccount *account; 216 FolderItem *folder; 217 218 UndoMain *undostruct; 219 220 gchar *sig_str; 221 gboolean sig_inserted; 222 223 /* external editor */ 224 gchar *exteditor_file; 225 GPid exteditor_pid; 226 gint exteditor_tag; 227 GtkWidget *exteditor_socket; 228 229 /* Priority */ 230 gint priority; 231 232 gchar *redirect_filename; 233 234 gboolean remove_references; 235 236 gint64 draft_timeout_tag; 237 238 GtkTextTag *no_wrap_tag; 239 GtkTextTag *no_join_tag; 240 GtkTextTag *signature_tag; 241 GtkTextTag *quote0_tag; 242 GtkTextTag *quote1_tag; 243 GtkTextTag *quote2_tag; 244 GtkTextTag *uri_tag; 245 246 gboolean automatic_break; 247 GMutex *mutex; 248 gint close_timeout_tag; 249 gchar *orig_charset; 250 gint set_cursor_pos; 251 252 gboolean updating; 253 gboolean deferred_destroy; 254 ComposeMode rmode; 255 GtkWidget *first_combo; 256 GtkWidget *first_entry; 257 258 GtkUIManager *ui_manager; 259 260 gint folder_update_callback_id; 261 #if USE_ENCHANT 262 /* GNU/aspell spell checker */ 263 GtkAspell *gtkaspell; 264 GtkWidget *aspell_options_menu; 265 #endif 266 267 #ifdef USE_LDAP 268 /* List of addressbook ifaces which we disabled, and will 269 * enable in compose_destroy. */ 270 GSList *passworded_ldap_servers; 271 #endif 272 }; 273 274 struct _AttachInfo 275 { 276 gchar *file; 277 gchar *content_type; 278 EncodingType encoding; 279 gchar *name; 280 goffset size; 281 gchar *charset; 282 gboolean insert; 283 }; 284 285 typedef enum 286 { 287 COMPOSE_QUIT_EDITING, 288 COMPOSE_KEEP_EDITING, 289 COMPOSE_AUTO_SAVE, 290 COMPOSE_DRAFT_FOR_EXIT 291 } ComposeDraftAction; 292 293 /*#warning FIXME_GTK2 */ 294 /* attach_files will be locale encode */ 295 Compose *compose_new (PrefsAccount *account, 296 const gchar *mailto, 297 GList *attach_files); 298 299 Compose *compose_new_with_folderitem (PrefsAccount *account, 300 FolderItem *item, 301 const gchar *mailto); 302 303 Compose *compose_new_with_list (PrefsAccount *account, 304 GList *listAddress); 305 306 Compose *compose_forward (PrefsAccount *account, 307 MsgInfo *msginfo, 308 gboolean as_attach, 309 const gchar *body, 310 gboolean no_extedit, 311 gboolean batch); 312 313 Compose *compose_redirect (PrefsAccount *account, 314 MsgInfo *msginfo, 315 gboolean batch); 316 Compose *compose_reedit (MsgInfo *msginfo, 317 gboolean batch); 318 319 const GList *compose_get_compose_list (void); 320 321 void compose_entry_append (Compose *compose, 322 const gchar *address, 323 ComposeEntryType type, 324 ComposePrefType pref_type); 325 326 327 gint compose_send (Compose *compose); 328 329 void compose_update_actions_menu (Compose *compose); 330 void compose_reflect_prefs_all (void); 331 void compose_reflect_prefs_pixmap_theme (void); 332 333 void compose_destroy_all (void); 334 gboolean compose_draft (gpointer data, guint action); 335 void compose_toolbar_cb (gint action, 336 gpointer data); 337 void compose_reply_to_address (MessageView *msgview, 338 MsgInfo *msginfo, 339 const gchar *address); 340 void compose_reply_from_messageview (MessageView *msgview, 341 GSList *msginfo_list, 342 guint action); 343 void compose_action_cb (void *data); 344 345 void compose_set_position (Compose *compose, 346 gint pos); 347 gboolean compose_search_string (Compose *compose, 348 const gchar *str, 349 gboolean case_sens); 350 gboolean compose_search_string_backward (Compose *compose, 351 const gchar *str, 352 gboolean case_sens); 353 ComposeQueueResult compose_queue (Compose *compose, 354 gint *msgnum, 355 FolderItem **item, 356 gchar **msgpath, 357 gboolean remove_reedit_target); 358 gboolean compose_close (Compose *compose); 359 void compose_close_toolbar (Compose *compose); 360 void compose_clear_exit_drafts (void); 361 void compose_reopen_exit_drafts (void); 362 void compose_attach_from_list (Compose *compose, GList *file_list, gboolean free_data); 363 void compose_check_for_email_account(Compose *compose); 364 365 void compose_use_signing(Compose *compose, gboolean use_signing); 366 void compose_use_encryption(Compose *compose, gboolean use_encryption); 367 368 #endif /* __COMPOSE_H__ */ 369