From 76bbd700763e4b45614df6ad6174fe831ddb932e Mon Sep 17 00:00:00 2001 From: nobody Date: Thu, 24 Jan 2002 19:01:46 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'EVOLUTION_1_0_2'. svn path=/tags/EVOLUTION_1_0_2/; revision=15455 --- mail/ChangeLog | 406 ++++++------------------------------- mail/folder-browser-ui.c | 3 +- mail/folder-browser.c | 150 ++++---------- mail/mail-account-gui.c | 21 +- mail/mail-accounts.c | 49 +---- mail/mail-callbacks.c | 492 +++++++++++++-------------------------------- mail/mail-callbacks.h | 29 ++- mail/mail-config.c | 141 +++---------- mail/mail-display.c | 243 ++++++++--------------- mail/mail-folder-cache.c | 2 +- mail/mail-format.c | 506 +++++++++++++++++++++++++---------------------- mail/mail-ops.c | 71 +------ mail/mail-send-recv.c | 20 +- mail/main.c | 8 +- mail/message-list.c | 37 +--- 15 files changed, 650 insertions(+), 1528 deletions(-) (limited to 'mail') diff --git a/mail/ChangeLog b/mail/ChangeLog index e290338c9b..e5846acae1 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,135 +1,23 @@ -2002-01-23 Ettore Perazzoli - - * component-factory.c (create_component): Pass a NULL icon to - `evolution_shell_component_add_user_creatable_item()'. - -2002-01-23 Jeffrey Stedfast - - Implements bug #15692 - - * folder-browser.c (html_button_press_event): New callback that - checks to make sure that the mouse isn't over a link or image in - the html view and then calls the on_right_click handler after - getting the appropriate args. - (my_folder_browser_init): Connect to the button_press_event here. - 2002-01-23 Dan Winship - * Makefile.am (INCLUDES): Define CAMEL_PROVIDERDIR to be the - configure.in-defined camel_providerdir. (Was supposed to have been - committed a month ago... oops.) - -2002-01-22 Jeffrey Stedfast - - * mail-ops.c (mail_filter_folder): Now takes a boolean notify - argument. If this is *not* set, then remove the sound-notify - filter rule that mail-session adds. Kinda kludgy, but good enough - for the moment. - - * mail-callbacks.c (guess_me): Simplified. - -2002-01-21 Jeffrey Stedfast + * mail-folder-cache.c (mail_note_store): Allow this to be called + with both storage and corba_storage NULL. - * mail-format.c (handle_text_plain): If the first "token" in the - body is "", then treat this as a text/html part rather than - a text/plain part. Fixes bug #16817. - - * component-factory.c (destination_folder_handle_drop): Removed - some unused variables. - -2002-01-17 Jeffrey Stedfast - - * mail-format.c (try_uudecoding): Update to match new uudecode - interface (ie, no longer need a uulen state variable). - -2002-01-15 Jeffrey Stedfast - - * mail-display.c (on_set_base): New callback to handle the - set_base signal. - (on_url_requested): If the base_url is set, prepend it to the data - url (we don't want to do this for cid urls or part urls tho). - (mail_display_init): Initialize md->base_url to NULL. - (mail_display_destroy): Free the base_url. - (mail_display_initialize_gtkhtml): Connect to the set_base signal. - (on_link_clicked): If the base_url is set, prepend it to the url - string passed to us from gtkhtml. - -2002-01-10 Jeffrey Stedfast - - * mail-callbacks.c (do_edit_messages): Don't remove any - X-Evolution* headers here, the composer already knows to ignore - these. Besides, it needs to know the X-Evolution-Format header. + * mail-send-recv.c (receive_update_got_store): Remove the + 2001-12-07 hack since it's no longer needed. 2002-01-08 Jeffrey Stedfast - * mail-callbacks.c (composer_save_draft_cb): Do proper refcounting - on the draft folder. - * message-list.c (message_list_select): When performing a - wraparound, check to see if the first (or last depending on - direction) message fits the selection criteria before telling - etable to find the next/previous matching node. + wraparound, check to see if the first message fits the selection + criteria before telling etable to find the next node. + +2002-01-08 Jeffrey Stedfast * mail-account-gui.c (mail_account_gui_new): When connecting to the transport username changed event, pass the gui->transport not the gui->source. -2002-01-08 Iain Holmes - - * importers/evolution-mbox-importer.c (string_to_int): Takes a hex - string and converts it to an int. - (get_info_from_mozilla): Creates a CamelMessageInfo structure from - the X-Mozilla-Status header. - (process_item_fn): Check for the X-Mozilla-Status header and if it - is present call get_info_from_mozilla. If get_info_from_mozilla - returns that the message was marked as deleted but never expunged - it isn't imported. - - * importers/mozilla-status-headers.h: Stuff Evolution cares about - from the mozilla header. - -2002-01-07 Jeffrey Stedfast - - * mail-config.c (mail_config_set_new_mail_notify_sound_file): Renamed. - (mail_config_get_new_mail_notify_sound_file): Renamed. - - * mail-accounts.c (notify_radio_toggled): Replace EXEC with - PLAY_SOUND. - (construct): renamed the exec_command stuff to play_sound. - - * main.c (main): Init and shutdown gnome_sound. - - * mail-ops.c (fetch_mail_fetch): Don't do any new-mail - notification here. - (filter_folder_filter): call camel_filter_driver_flush. - - * mail-session.c (main_get_filter_driver): Set the filter-driver - exec_func here instead. - - * mail-ops.c (mail_fetch_mail): Don't set the filter-driver - exec_func here. - -2002-01-03 Jeffrey Stedfast - - * mail-callbacks.c (composer_get_message): Add an Organization - header. - -2002-01-02 Jeffrey Stedfast - - * mail-callbacks.c (list_add_addresses): Simplified. Also no - longer needs an "ignore_addr" argument as far as I can tell so - that has been removed. - (mail_generate_reply): Don't pass an ignore_addr argument to - list_add_addresses and also change to use g_strcase_hash and - g_strcase_equal since addresses are not case snesitive - (mostly). Also, Reply-To can contain multiple addresses, so handle - this case too. - -2002-01-02 JP Rosevear - - * mail-callbacks.c: remove e_gnome_dialog util functions and use - e-util ones instead - 2001-12-21 Jeffrey Stedfast The idea here is that if we consistantly name the movemail file @@ -147,84 +35,21 @@ provided. (mail_tool_do_movemail): Pass along the source_uri. -2001-12-20 Jon Trowbridge +2001-12-21 Jon Trowbridge * message-list.c (on_click): Makes the auto-undelete behavior when changing message flags a bit more sane. (Fixes #17634) -2001-12-20 Ettore Perazzoli - - [Fixes #17377, Evolution doesn't work on multi-depth displays.] - - * main.c (main): Push GdkRGB visual and colormap. - -2001-12-19 Jeffrey Stedfast - - * mail-callbacks.c (composer_get_message): Add the auto-cc/bcc - recipients here. The problem with setting them in the composer is - that what if the user changes which account he wants to use? We'd - either have to clear the cc/bcc lists *or* we'd have to leave them - alone. Either way is bad. We can't just clear the entries because - the user may have added addresses since the composer was - opened. We don't want to leave any old auto-cc/bcc addresses there - because that isn't desirable either. So we give up and add them - here after the user has already hit the send button. - - * mail-config.c (account_copy): Update to copy the always-[b]cc - options. - (account_destroy): Update to destroy the above options. - (config_read): Update to read in those values. - (mail_config_write): Save those options. - - * mail-account-gui.c (mail_account_gui_new): Setup Always Cc/Bcc - widgets. - (mail_account_gui_save): Get the user-entered values for the - always-cc/bcc stuff. - -2001-12-19 Jeffrey Stedfast +2001-12-17 Dan Winship - * mail-account-gui.c (setup_service): If the provider is NULL, - don't do anything. - - * mail-accounts.c (construct): Oops, no wonder the exec command - thing never stuck around... I wasn't getting the right widget from - libglade. Also connect to the GtkEntry's changed event since a - GnomeFileEntry doesn't have that signal in its ancestry. - -2001-12-18 Jeffrey Stedfast - - * mail-ops.c (filter_folder_free): Argh, don't notify about new - mail here. - (fetch_mail_fetch): Notify about new mail here instead. - - * mail-accounts.c (construct): Setup the new-mail-notification - widgets. - (notify_command_changed): Update the command-line for new mail - notification. - (notify_radio_toggled): Update the new-mail-notification type. - - * mail-ops.c (filter_folder_free): See if we got any new mail and - "sound the alarm" if we did. - -2001-12-17 Jon Trowbridge - - * mail-format.c (handle_text_plain_flowed): Set citation color to - black when we are printing. - - * mail-format.c (attachment_header): Avoid embedding tags - when we are printing. - (handle_multipart_signed): Don't do the click-for-info signature - stuff when we are printing. - (handle_via_bonobo): Don't embed an tag if we are - printing. + * Makefile.am (INCLUDES): Define CAMEL_PROVIDERDIR to be the + configure.in-defined camel_providerdir. - * folder-browser.c: Changed context_menu[] array so that we can - print when the preview pane is closed. +2001-12-17 Ettore Perazzoli -2001-12-14 Jeffrey Stedfast + [Fixes #17377, Evolution doesn't work on multi-depth displays.] - * mail-ops.c (mail_fetch_mail): Set the filter driver's shell-exec - callback. + * main.c (main): Push GdkRGB visual and colormap. 2001-12-12 Jeffrey Stedfast @@ -236,123 +61,6 @@ * mail-format.c (handle_text_plain): Make sure i != num_specials after we check for any special text markers. Fixes bug #12265. -2001-12-14 Jeffrey Stedfast - - * mail-callbacks.c (compose_msg): Connect to the save-draft signal. - (send_to_url): Here too. - (mail_reply): And here... - (forward_get_composer): Same. - (do_edit_messages): And finally here. - - * mail-format.c (try_inline_pgp): - (try_inline_pgp_sig): Start reiplementing The Right Way and not - danw's fucking half-assed kludge that doesn't work. - -2001-12-12 Jeffrey Stedfast - - * mail-config.c (mail_config_set_new_mail_notification_command): - set the new-mail-notify command. - (mail_config_get_new_mail_notification_command): get the - new-mail-notify command. - (mail_config_set_new_mail_notification): set the - new-mail-notification action. - (mail_config_get_new_mail_notification): get the - new-mail-notification action. - (mail_config_write_on_exit): save the new-mail-notification - settings. - (config_read): Read in the new-mail-notification settings. - - * mail-ops.c (mail_execute_shell_command): New function to execute - a shell command async. Will be used for playing sounds on new mail - or whatever. - -2001-12-11 Jon Trowbridge - - * mail-identify.c (mail_identify_mime_part): Fixed for - mail_content_loaded's new signature. - - * mail-format.c (attachment_header): Don't convert URLs, etc. if - we are printing. - (write_address): Don't convert addresses to mailto: links if we - are printing. - (write_one_text_plain_chunk): Add a printing flag, that we pass - along to mail_text_write. - (handle_text_plain): Pass our printing flag to - write_one_text_plain_chunk. - (mail_get_message_rfc822): Don't unneccesarily convert URLs. - (mail_content_loaded): Add a GtkHTML parameter. - - * mail-display.c (mail_display_initialize_gtkhtml): Added. Breaks - all of the signal hookups out of mail_display_new. - (mail_display_new): Call mail_display_initialize_gtkhtml. - (mail_text_write): Don't convert URLs, etc., if we are printing. - Lots of other changes to pass around GtkHTML/GtkHTMLStream objects. - - * mail-callbacks.c (do_mail_print): Call - mail_display_initialize_gtkhtml on our GtkHTML object. - - * folder-browser.c (update_status_bar): Make the status bar more - useful when you have a large number of hidden messages. - - * message-list.etspec: Add ETable magic for our new "Needs Reply" - column. (The next few entries are for bug #90) - - * message-list.h: Add COL_NEED_REPLY. - - * message-list.c: Move mail_need_reply_xpm to the end of - states_pixmaps. - (ml_duplicate_value): Handle COL_NEED_REPLY. - (ml_free_value): Handle COL_NEED_REPLY. - (ml_initialize_value): Handle COL_NEED_REPLY. - (ml_value_is_empty): Handle COL_NEED_REPLY. Added - needs_reply_map[] array. - (ml_value_to_string): Handle COL_NEED_REPLY. - (ml_tree_value_at): Fix magic numbers, undoing my changes from the - otehr day. Add handler for COL_NEED_REPLY. - (message_list_create_extras): Attach icons for COL_NEED_REPLY. - (on_click): Undo my previous changes to display need-reply status - in COL_MESSAGE_STATUS. Add handing for COL_NEED_REPLY. - - * mail.h: Change mail_format_mime_message, mail_format_raw_message - and the MailMimeHandlerFn typedef to take GtkHTML and - GtkHTMLStream args, as per our changes in mail-format.c. - - * mail-format.c: Giant refactoring. Remove the assumption - throughout that we will always want to render into the GtkHTML - object contained in the MailDisplay. Instead, always pass in the - GtkHTML and GtkHTMLStream that we want to write to. Also, ignore - theme work-arounds if the printing flag is set. (This and what - follows fixes bug #82) - - * mail-display.h: Remove GtkHTMLStream *stream from MailDisplay. - We don't need it anymore. - - * mail-display.c (mail_display_render): Added. Breaks the code - that renders the message into the GtkHTML object out of - mail_display_redisplay. - (mail_display_redisplay): Call mail_display_render. - (mail_display_init): Remove reference to ->stream. - (mail_display_new): Remove reference to ->stream. - - * mail-callbacks.c (do_mail_print): Create a new GtkHTML to render - our printed version into (via the new function - mail_display_render. Set the MailDisplay's printing flag to TRUE - before we render, and set it back to FALSE afterwards. - (do_mail_fetch_and_print): If the preview pane isn't open when we - try to print, fetch the message before printing. - (print_msg): Call do_mail_fetch_and_print. - (print_preview_msg): Call do_mail_fetch_and_print. - - * folder-browser-ui.c: Remove "PrintMessage" and - "PrintPreviewMessage" from message_pane_enables... these now work - when the preview pane is closed. Disable printing if multiple - messages are selected. - -2001-12-10 Jeffrey Stedfast - - * mail-ops.c (filter_folder_filter): Don't expunge when we sync - anymore, this fixes bug #4472. - 2001-12-04 Jeffrey Stedfast * mail-autofilter.c (rule_from_message): Make sure that the @@ -15549,48 +15257,48 @@ End of branch current_message = NULL, which shouldn't happen, but has happened to me. -2000-07-25 Dan Winship - - * message-thread.c (group_root_set): Don't group together messages - with the same non-Re: subject and no References/In-Reply-To. More - often than not, they're unrelated. (eg, "[No subject]".) - (thread_messages): Handle messages with no Message-Id. "This - shouldn't happen", but it does sometimes, and it's not much code - to make it just work. - -2000-07-25 Ettore Perazzoli - - * mail-config.c (create_service_page): Call - `gtk_option_menu_set_menu()' as the last thing, as `GtkOptionMenu' - is fscking broken. Also, `gtk_widget_show()' the individual menu - items. - -2000-07-24 Dan Winship - - * message-list.c (mark_msg_seen, ml_tree_set_value_at, - message_list_regenerate): Update for CamelFolder API changes. - (Certain functions no longer take a CamelException.) - - * mail-ops.c (real_fetch_mail, real_send_mail, real_delete_msg): - ditto - - * component-factory.c (real_create_imap_storage, - real_create_news_storage): ditto - -2000-07-24 Dan Winship - - * component-factory.c, folder-browser-factory.c, test-mail.c: - Remove GOAD support. - - * main.c: Remove GOAD support. - (main): More "guess the build mistake" fun, this time for the - failure to initialize Bonobo case. - -2000-07-24 Peter Williams - - * mail-tools.c (mail_tool_set_uid_flags): Change - function to faithfully pass parameters to - camel_folder_set_message_flags; this function is +2000-07-25 Dan Wnihspi dm + +* m seasegt-rhae.d cg(orpur_oo_tes)t :oD'n trguo poteghtrem seaseg +sw ti hht easemn noR-:es buejtca dnn oeRefercnseI/-neRlp-yoT .oMer +foet nhtnan to ,htyer' enueralet.d( ge ,["oNs buejtc"]). +t(rhae_demssgase:)H nald eemssgasew ti honM seasegI-.d" hTsi +hsuodl'n tahppne,"b tui todses motemise ,na dtis'n tom cu hoced +otm ka etij su towkr +.2 +00-0702- 5E ttro eeParzzlo i< teoterh@lexiocedc.mo +> + *amlic-noif.g cc(erta_eesvrci_eapeg:)C la +l` tg_kpoitnom_ne_ues_temun)( 'sat ehl sa thtni,ga sG`ktpOitnoeMun +'i ssfkcni grbkone .A sl,o` tg_kiwgdtes_oh(w')t ehi dnvidiau lemun +time.s + +02000--742 aD niWsnih p< adwnh@lexiocedc.mo +> + *emssga-eiltsc.( amkrm_gss_ee,nm _lrtees_tev_laeua_,t +emssga_eiltsr_genereta)e :pUadetf roC maleoFdlreA IPc ahgnse +.( eCtria nufcnitno sonl noeg rateka C malexEectpoi.n +) + *amlio-spc.( erlaf_tehcm_ia,lr ae_lesdnm_ia,lr ae_ledeletm_gs:) +idtt +o + *ocpmnone-taftcro.y cr(ae_lrcaeeti_am_ptsroga,e +erlac_erta_eensws_otareg:)d tiot + +02000--742 aD niWsnih p< adwnh@lexiocedc.mo +> + *ocpmnone-taftcro.y,cf loed-rrbwoes-raftcro.y,ct se-tamlic. +:R mevo eOGDAs puoptr +. + *amnic. :eRomevG AO Dusppro.t +m(ia)n :oMer" ugse sht eubli dimtska"ef nu ,htsit mi eof rht +ef iaulert onitiaiilezB nobo oaces +.2 +00-0702- 4P tereW liilma s< epetwrh@lexiocedc.mo +> + *amlit-ooslc.( amlit_oo_les_tiu_dlfga)s :hCnaeg +ufcnitnot oaftifhluylp sa saparemetsrt +oc malef_loed_res_temssga_elfga;st ih sufnction is somewhat useless now. Other files synced with API change. diff --git a/mail/folder-browser-ui.c b/mail/folder-browser-ui.c index 0960bd1bc4..e2b718c191 100644 --- a/mail/folder-browser-ui.c +++ b/mail/folder-browser-ui.c @@ -520,6 +520,7 @@ static const char *message_pane_enables[] = { /* these only work if there's a message in the message pane * (preview pane). This state is independent of how many are * selected. */ + "PrintMessage", "PrintPreviewMessage", "ViewFullHeaders", "ViewLoadImages", "ViewNormal", "ViewSource", "MessageSearch", "AddSenderToAddressbook", NULL @@ -563,8 +564,6 @@ folder_browser_ui_set_selection_state (FolderBrowser *fb, FolderBrowserSelection "MessageReplyAll", "MessageReplyList", "MessageReplySender", "MessageResend", "MessageForwardInline", "MessageForwardQuoted", "MessageSearch", - "PrintMessage", "PrintPreviewMessage", - "ToolsFilterMailingList", "ToolsFilterRecipient", "ToolsFilterSender", "ToolsFilterSubject", "ToolsVFolderMailingList", "ToolsVFolderRecipient", "ToolsVFolderSender", "ToolsVFolderSubject", diff --git a/mail/folder-browser.c b/mail/folder-browser.c index a7213a55ff..ddcc305fe6 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -40,8 +40,6 @@ #include #include -#include -#include #include #include "filter/vfolder-rule.h" @@ -57,6 +55,7 @@ #include "mail.h" #include "mail-callbacks.h" #include "mail-tools.h" +#include "message-list.h" #include "mail-ops.h" #include "mail-vfolder.h" #include "mail-autofilter.h" @@ -719,7 +718,7 @@ static void update_status_bar(FolderBrowser *fb) { CORBA_Environment ev; - int tmp, total; + int tmp; GString *work; extern CamelFolder *outbox_folder, *sent_folder; @@ -728,49 +727,44 @@ update_status_bar(FolderBrowser *fb) || fb->shell_view == CORBA_OBJECT_NIL) return; + work = g_string_new(""); + g_string_sprintfa(work, _("%d new"), camel_folder_get_unread_message_count(fb->folder)); + tmp = message_list_hidden(fb->message_list); + if (tmp) { + g_string_append(work, _(", ")); + g_string_sprintfa(work, _("%d hidden"), tmp); + } + tmp = e_selection_model_selected_count(e_tree_get_selection_model(fb->message_list->tree)); + if (tmp) { + g_string_append(work, _(", ")); + g_string_sprintfa(work, _("%d selected"), tmp); + } if (!fb->message_list->hidedeleted || !camel_folder_has_summary_capability(fb->folder)) { - total = camel_folder_get_message_count(fb->folder); + tmp = camel_folder_get_message_count(fb->folder); } else { GPtrArray *sum = camel_folder_get_summary(fb->folder); int i; if (sum) { - total = 0; + tmp = 0; for (i=0;ilen;i++) { CamelMessageInfo *info = sum->pdata[i]; if ((info->flags & CAMEL_MESSAGE_DELETED) == 0) - total++; + tmp++; } camel_folder_free_summary(fb->folder, sum); } else { - total = camel_folder_get_message_count(fb->folder); + tmp = camel_folder_get_message_count(fb->folder); } } - - work = g_string_new(""); - g_string_sprintfa(work, _("%d new"), camel_folder_get_unread_message_count(fb->folder)); - tmp = message_list_hidden(fb->message_list); - if (0 < tmp && tmp < total) { - g_string_append(work, _(", ")); - if (tmp < total / 2) - g_string_sprintfa(work, _("%d hidden"), tmp); - else - g_string_sprintfa(work, _("%d visible"), total - tmp); - } - tmp = e_selection_model_selected_count(e_tree_get_selection_model(fb->message_list->tree)); - if (tmp) { - g_string_append(work, _(", ")); - g_string_sprintfa(work, _("%d selected"), tmp); - } g_string_append(work, _(", ")); - if (fb->folder == outbox_folder) - g_string_sprintfa(work, _("%d unsent"), total); + g_string_sprintfa(work, _("%d unsent"), tmp); else if (fb->folder == sent_folder) - g_string_sprintfa(work, _("%d sent"), total); + g_string_sprintfa(work, _("%d sent"), tmp); else - g_string_sprintfa(work, _("%d total"), total); + g_string_sprintfa(work, _("%d total"), tmp); CORBA_exception_init(&ev); GNOME_Evolution_ShellView_setFolderBarLabel(fb->shell_view, work->str, &ev); @@ -1418,17 +1412,15 @@ hide_sender(GtkWidget *w, FolderBrowser *fb) } enum { - SELECTION_SET = 1<<1, - CAN_MARK_READ = 1<<2, - CAN_MARK_UNREAD = 1<<3, - CAN_DELETE = 1<<4, - CAN_UNDELETE = 1<<5, - IS_MAILING_LIST = 1<<6, - CAN_RESEND = 1<<7, - CAN_MARK_IMPORTANT = 1<<8, - CAN_MARK_UNIMPORTANT = 1<<9, - CAN_MARK_NEEDS_REPLY = 1<<10, - CAN_MARK_DOESNT_NEED_REPLY = 1<<11 + SELECTION_SET = 2, + CAN_MARK_READ = 4, + CAN_MARK_UNREAD = 8, + CAN_DELETE = 16, + CAN_UNDELETE = 32, + IS_MAILING_LIST = 64, + CAN_RESEND = 128, + CAN_MARK_IMPORTANT = 256, + CAN_MARK_UNIMPORTANT = 512 }; #define MLIST_VFOLDER (3) @@ -1455,7 +1447,7 @@ static EPopupMenu context_menu[] = { { N_("_Open"), NULL, GTK_SIGNAL_FUNC (open_msg), NULL, 0 }, { N_("_Edit as New Message..."), NULL, GTK_SIGNAL_FUNC (resend_msg), NULL, CAN_RESEND }, { N_("_Save As..."), NULL, GTK_SIGNAL_FUNC (save_msg), NULL, 0 }, - { N_("_Print"), NULL, GTK_SIGNAL_FUNC (print_msg), NULL, 0 }, + { N_("_Print"), NULL, GTK_SIGNAL_FUNC (print_msg), NULL, SELECTION_SET }, E_POPUP_SEPARATOR, @@ -1468,8 +1460,6 @@ static EPopupMenu context_menu[] = { { N_("Mark as U_nread"), NULL, GTK_SIGNAL_FUNC (mark_as_unseen), NULL, CAN_MARK_UNREAD }, { N_("Mark as _Important"), NULL, GTK_SIGNAL_FUNC (mark_as_important), NULL, CAN_MARK_IMPORTANT }, { N_("Mark as Unim_portant"), NULL, GTK_SIGNAL_FUNC (mark_as_unimportant), NULL, CAN_MARK_UNIMPORTANT }, - { N_("Mark as Needing Reply"), NULL, GTK_SIGNAL_FUNC (mark_as_needing_reply), NULL, CAN_MARK_NEEDS_REPLY }, - { N_("Mark as Not Needing Reply"), NULL, GTK_SIGNAL_FUNC (mark_as_not_needing_reply), NULL, CAN_MARK_DOESNT_NEED_REPLY }, E_POPUP_SEPARATOR, @@ -1511,7 +1501,7 @@ context_menu_position_func (GtkMenu *menu, gint *x, gint *y, } /* handle context menu over message-list */ -static int +static gint on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event, FolderBrowser *fb) { extern CamelFolder *sent_folder; @@ -1560,8 +1550,6 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event gboolean have_unseen = FALSE; gboolean have_important = FALSE; gboolean have_unimportant = FALSE; - gboolean have_needs_reply = FALSE; - gboolean have_doesnt_need_reply = FALSE; for (i = 0; i < uids->len; i++) { info = camel_folder_get_message_info (fb->folder, uids->pdata[i]); @@ -1583,11 +1571,6 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event else have_unimportant = TRUE; - if (info->flags & CAMEL_MESSAGE_NEEDS_REPLY) - have_needs_reply = TRUE; - else - have_doesnt_need_reply = TRUE; - camel_folder_free_message_info (fb->folder, info); if (have_seen && have_unseen && have_deleted && have_undeleted) @@ -1609,11 +1592,6 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event if (!have_important) enable_mask |= CAN_MARK_UNIMPORTANT; - if (!have_needs_reply) - enable_mask |= CAN_MARK_DOESNT_NEED_REPLY; - if (!have_doesnt_need_reply) - enable_mask |= CAN_MARK_NEEDS_REPLY; - /* * Hide items that wont get used. */ @@ -1637,13 +1615,6 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event else hide_mask |= CAN_MARK_UNIMPORTANT; } - - if (!(have_needs_reply && have_doesnt_need_reply)) { - if (have_needs_reply) - hide_mask |= CAN_MARK_NEEDS_REPLY; - else - hide_mask |= CAN_MARK_DOESNT_NEED_REPLY; - } } /* free uids */ @@ -1683,68 +1654,25 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event return TRUE; } -static int -html_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer data) -{ - FolderBrowser *fb = data; - HTMLEngine *engine; - HTMLPoint *point; - ETreePath *path; - int row; - - if (event->type != GDK_BUTTON_PRESS || event->button != 3) - return FALSE; - - engine = GTK_HTML (widget)->engine; - point = html_engine_get_point_at (engine, event->x + engine->x_offset, - event->y + engine->y_offset, FALSE); - - if (point) { - /* don't popup a menu if the mouse is hovering over a - url or a source image because those situations are - handled in mail-display.c's button_press_event - callback */ - const char *src, *url; - - url = html_object_get_url (point->object); - src = html_object_get_src (point->object); - - if (url || src) { - html_point_destroy (point); - return FALSE; - } - - html_point_destroy (point); - } - - path = e_tree_get_cursor (fb->message_list->tree); - row = e_tree_row_of_node (fb->message_list->tree, path); - - on_right_click (fb->message_list->tree, row, path, 2, - (GdkEvent *) event, fb); - - return TRUE; -} - -static int +static gint on_key_press (GtkWidget *widget, GdkEventKey *key, gpointer data) { FolderBrowser *fb = data; ETreePath *path; int row; - + if (key->state & GDK_CONTROL_MASK) return FALSE; - + path = e_tree_get_cursor (fb->message_list->tree); row = e_tree_row_of_node (fb->message_list->tree, path); - + switch (key->keyval) { case GDK_Delete: case GDK_KP_Delete: delete_msg (NULL, fb); return TRUE; - + case GDK_Menu: on_right_click (fb->message_list->tree, row, path, 2, (GdkEvent *)key, fb); @@ -1753,7 +1681,7 @@ on_key_press (GtkWidget *widget, GdkEventKey *key, gpointer data) toggle_as_important (NULL, fb, NULL); return TRUE; } - + return FALSE; } @@ -2037,8 +1965,6 @@ my_folder_browser_init (GtkObject *object) gtk_signal_connect (GTK_OBJECT (fb->mail_display->html), "key_press_event", GTK_SIGNAL_FUNC (on_key_press), fb); - gtk_signal_connect (GTK_OBJECT (fb->mail_display->html), - "button_press_event", GTK_SIGNAL_FUNC (html_button_press_event), fb); gtk_signal_connect (GTK_OBJECT (fb->message_list->tree), "key_press", GTK_SIGNAL_FUNC (etree_key), fb); diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c index 3009b7666c..514ffd717d 100644 --- a/mail/mail-account-gui.c +++ b/mail/mail-account-gui.c @@ -857,7 +857,7 @@ setup_service (MailAccountGuiService *gsvc, MailConfigService *service) CamelURL *url = camel_url_new (service->url, NULL); gboolean has_auth = FALSE; - if (url == NULL || gsvc->provider == NULL) + if (url == NULL) return FALSE; if (url->user && CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_USER)) @@ -1347,18 +1347,6 @@ mail_account_gui_new (MailConfigAccount *account) } set_folder_picker_label (gui->sent_folder_button, gui->sent_folder.name); - /* Always Cc */ - gui->always_cc = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "always_cc")); - gtk_toggle_button_set_active (gui->always_cc, account->always_cc); - gui->cc_addrs = GTK_ENTRY (glade_xml_get_widget (gui->xml, "cc_addrs")); - e_utf8_gtk_entry_set_text (gui->cc_addrs, account->cc_addrs); - - /* Always Bcc */ - gui->always_bcc = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "always_bcc")); - gtk_toggle_button_set_active (gui->always_bcc, account->always_bcc); - gui->bcc_addrs = GTK_ENTRY (glade_xml_get_widget (gui->xml, "bcc_addrs")); - e_utf8_gtk_entry_set_text (gui->bcc_addrs, account->bcc_addrs); - /* Security */ gui->pgp_key = GTK_ENTRY (glade_xml_get_widget (gui->xml, "pgp_key")); if (account->pgp_key) @@ -1645,7 +1633,7 @@ mail_account_gui_save (MailAccountGui *gui) const MailConfigAccount *old_account; CamelProvider *provider = NULL; CamelURL *source_url = NULL, *url; - char *new_name; + gchar *new_name; gboolean old_enabled; if (!mail_account_gui_identity_complete (gui, NULL) || @@ -1740,11 +1728,6 @@ mail_account_gui_save (MailAccountGui *gui) if (source_url) camel_url_free (source_url); - account->always_cc = gtk_toggle_button_get_active (gui->always_cc); - account->cc_addrs = e_utf8_gtk_entry_get_text (gui->cc_addrs); - account->always_bcc = gtk_toggle_button_get_active (gui->always_bcc); - account->bcc_addrs = e_utf8_gtk_entry_get_text (gui->bcc_addrs); - g_free (account->pgp_key); account->pgp_key = e_utf8_gtk_entry_get_text (gui->pgp_key); account->pgp_encrypt_to_self = gtk_toggle_button_get_active (gui->pgp_encrypt_to_self); diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c index f00be07739..2b386e1b11 100644 --- a/mail/mail-accounts.c +++ b/mail/mail-accounts.c @@ -682,31 +682,6 @@ images_radio_toggled (GtkWidget *radio, gpointer data) mail_config_set_http_mode (MAIL_CONFIG_HTTP_NEVER); } -static void -notify_radio_toggled (GtkWidget *radio, gpointer data) -{ - MailAccountsDialog *dialog = data; - - if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio))) - return; - - if (radio == (GtkWidget *) dialog->notify_not) - mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_NOT); - else if (radio == (GtkWidget *) dialog->notify_beep) - mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_BEEP); - else - mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_PLAY_SOUND); -} - -static void -notify_sound_file_changed (GtkWidget *entry, gpointer data) -{ - char *filename; - - filename = gtk_entry_get_text (GTK_ENTRY (entry)); - mail_config_set_new_mail_notify_sound_file (filename); -} - static void empty_trash_toggled (GtkWidget *toggle, gpointer data) { @@ -939,7 +914,7 @@ construct (MailAccountsDialog *dialog) gtk_toggle_button_set_active (dialog->prompt_bcc_only, mail_config_get_prompt_only_bcc ()); gtk_signal_connect (GTK_OBJECT (dialog->prompt_bcc_only), "toggled", GTK_SIGNAL_FUNC (prompt_bcc_only_toggled), dialog); - + dialog->prompt_unwanted_html = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptWantHTML")); gtk_toggle_button_set_active (dialog->prompt_unwanted_html, mail_config_get_confirm_unwanted_html ()); gtk_signal_connect (GTK_OBJECT (dialog->prompt_unwanted_html), "toggled", @@ -981,28 +956,6 @@ construct (MailAccountsDialog *dialog) gtk_signal_connect (GTK_OBJECT (dialog->confirm_expunge), "toggled", GTK_SIGNAL_FUNC (confirm_expunge_toggled), dialog); - dialog->notify_not = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radioNotifyNot")); - gtk_toggle_button_set_active (dialog->notify_not, mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_NOT); - gtk_signal_connect (GTK_OBJECT (dialog->notify_not), "toggled", - GTK_SIGNAL_FUNC (notify_radio_toggled), dialog); - - dialog->notify_beep = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radioNotifyBeep")); - gtk_toggle_button_set_active (dialog->notify_beep, mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_BEEP); - gtk_signal_connect (GTK_OBJECT (dialog->notify_beep), "toggled", - GTK_SIGNAL_FUNC (notify_radio_toggled), dialog); - - dialog->notify_play_sound = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radioNotifyPlaySound")); - gtk_toggle_button_set_active (dialog->notify_play_sound, - mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_PLAY_SOUND); - gtk_signal_connect (GTK_OBJECT (dialog->notify_play_sound), "toggled", - GTK_SIGNAL_FUNC (notify_radio_toggled), dialog); - - dialog->notify_sound_file = GNOME_FILE_ENTRY (glade_xml_get_widget (gui, "fileNotifyPlaySound")); - gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (dialog->notify_sound_file)), - mail_config_get_new_mail_notify_sound_file ()); - gtk_signal_connect (GTK_OBJECT (gnome_file_entry_gtk_entry (dialog->notify_sound_file)), - "changed", GTK_SIGNAL_FUNC (notify_sound_file_changed), dialog); - /* now to fill in the clists */ dialog->accounts_row = -1; dialog->accounts = mail_config_get_accounts (); diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index e367ab4638..aee311b88d 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -31,6 +31,8 @@ #include #include #include +#include +#include #include #include #include @@ -40,7 +42,6 @@ #include #include #include -#include #include #include "mail.h" #include "message-browser.h" @@ -72,10 +73,52 @@ #define FB_WINDOW(fb) GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (fb), GTK_TYPE_WINDOW)) +/* These e_gnome_dialog* functions are to handle the brokenness that is gnome-dialog */ +static void +e_gnome_dialog_parent_destroyed (GtkWidget *parent, GtkWidget *dialog) +{ + gnome_dialog_close (GNOME_DIALOG (dialog)); +} + +static void +e_gnome_dialog_set_parent (GnomeDialog *dialog, GtkWindow *parent) +{ + gnome_dialog_set_parent (dialog, parent); + gtk_signal_connect_while_alive (GTK_OBJECT (parent), "destroy", + e_gnome_dialog_parent_destroyed, + dialog, GTK_OBJECT (dialog)); +} + +static GtkWidget * +e_gnome_warning_dialog_parented (const char *warning, GtkWindow *parent) +{ + GtkWidget *dialog; + + dialog = gnome_warning_dialog_parented (warning, parent); + gtk_signal_connect (GTK_OBJECT (parent), "destroy", + e_gnome_dialog_parent_destroyed, dialog); + + return dialog; +} + +static GtkWidget * +e_gnome_ok_cancel_dialog_parented (const char *message, GnomeReplyCallback callback, + gpointer data, GtkWindow *parent) +{ + GtkWidget *dialog; + + dialog = gnome_ok_cancel_dialog_parented (message, callback, data, parent); + gtk_signal_connect (GTK_OBJECT (parent), "destroy", + e_gnome_dialog_parent_destroyed, dialog); + + return dialog; +} + + struct post_send_data { CamelFolder *folder; gchar *uid; - guint32 flags, set; + guint32 flags; }; static void @@ -377,11 +420,11 @@ composer_sent_cb (char *uri, CamelMimeMessage *message, gboolean sent, void *dat if (sent) { if (send->psd) { camel_folder_set_message_flags (send->psd->folder, send->psd->uid, - send->psd->flags, send->psd->set); + send->psd->flags, send->psd->flags); } gtk_widget_destroy (GTK_WIDGET (send->composer)); } else { - e_msg_composer_set_enable_autosave(send->composer, TRUE); + e_msg_composer_set_enable_autosave (send->composer, TRUE); gtk_widget_show (GTK_WIDGET (send->composer)); gtk_object_unref (GTK_OBJECT (send->composer)); } @@ -409,47 +452,12 @@ composer_get_message (EMsgComposer *composer) if (message == NULL) return NULL; - /* Add info about the sending account */ - account = e_msg_composer_get_preferred_account (composer); - if (account) { - camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Account", account->name); - camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Transport", account->transport->url); - camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Fcc", account->sent_folder_uri); - if (account->id->organization) - camel_medium_set_header (CAMEL_MEDIUM (message), "Organization", account->id->organization); - - /* add the always-cc/bcc addresses */ - if (account->always_cc && account->cc_addrs) { - CamelInternetAddress *addrs; - - addrs = camel_internet_address_new (); - camel_address_decode (CAMEL_ADDRESS (addrs), account->cc_addrs); - iaddr = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC); - if (iaddr) - camel_address_cat (CAMEL_ADDRESS (addrs), CAMEL_ADDRESS (iaddr)); - camel_mime_message_set_recipients (message, CAMEL_RECIPIENT_TYPE_CC, addrs); - camel_object_unref (CAMEL_OBJECT (addrs)); - } - - if (account->always_bcc && account->bcc_addrs) { - CamelInternetAddress *addrs; - - addrs = camel_internet_address_new (); - camel_address_decode (CAMEL_ADDRESS (addrs), account->bcc_addrs); - iaddr = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_BCC); - if (iaddr) - camel_address_cat (CAMEL_ADDRESS (addrs), CAMEL_ADDRESS (iaddr)); - camel_mime_message_set_recipients (message, CAMEL_RECIPIENT_TYPE_BCC, addrs); - camel_object_unref (CAMEL_OBJECT (addrs)); - } - } - recipients = e_msg_composer_get_recipients (composer); /* Check for invalid recipients */ if (recipients) { gboolean have_invalid = FALSE; - char *msg, *new_msg; + gchar *msg, *new_msg; GtkWidget *message_box; for (i = 0; recipients[i] && !have_invalid; ++i) { @@ -516,7 +524,7 @@ composer_get_message (EMsgComposer *composer) so that it can present the user with a dialog whose text has been modified to reflect this situation. */ - const char *to_header = camel_medium_get_header (CAMEL_MEDIUM (message), CAMEL_RECIPIENT_TYPE_TO); + const gchar *to_header = camel_medium_get_header (CAMEL_MEDIUM (message), CAMEL_RECIPIENT_TYPE_TO); gboolean hidden_list_case = FALSE; if (to_header && !strcmp (to_header, "Undisclosed-Recipient:;")) @@ -561,6 +569,14 @@ composer_get_message (EMsgComposer *composer) } } + /* Add info about the sending account */ + account = e_msg_composer_get_preferred_account (composer); + if (account) { + camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Account", account->name); + camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Transport", account->transport->url); + camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Fcc", account->sent_folder_uri); + } + /* Get the message recipients and 'touch' them, boosting their use scores */ recipients = e_msg_composer_get_recipients (composer); e_destination_touchv (recipients); @@ -623,7 +639,6 @@ composer_postpone_cb (EMsgComposer *composer, gpointer data) message = composer_get_message (composer); if (message == NULL) return; - info = camel_message_info_new (); info->flags = CAMEL_MESSAGE_SEEN; @@ -631,102 +646,11 @@ composer_postpone_cb (EMsgComposer *composer, gpointer data) camel_object_unref (CAMEL_OBJECT (message)); if (psd) - camel_folder_set_message_flags (psd->folder, psd->uid, psd->flags, psd->set); + camel_folder_set_message_flags (psd->folder, psd->uid, psd->flags, psd->flags); gtk_widget_destroy (GTK_WIDGET (composer)); } -struct _save_draft_info { - EMsgComposer *composer; - int quit; -}; - -static void -save_draft_done (CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *info, int ok, void *data) -{ - struct _save_draft_info *sdi = data; - - if (ok && sdi->quit) - gtk_widget_destroy (GTK_WIDGET (sdi->composer)); - else - gtk_object_unref (GTK_OBJECT (sdi->composer)); - - g_free (info); - g_free (sdi); -} - -static void -use_default_drafts_cb (int reply, gpointer data) -{ - extern CamelFolder *drafts_folder; - CamelFolder **folder = data; - - if (reply == 0) { - *folder = drafts_folder; - camel_object_ref (CAMEL_OBJECT (*folder)); - } -} - -static void -save_draft_folder (char *uri, CamelFolder *folder, gpointer data) -{ - CamelFolder **save = data; - - if (folder) { - *save = folder; - camel_object_ref (CAMEL_OBJECT (folder)); - } -} - -void -composer_save_draft_cb (EMsgComposer *composer, int quit, gpointer data) -{ - extern char *default_drafts_folder_uri; - extern CamelFolder *drafts_folder; - CamelMimeMessage *msg; - CamelMessageInfo *info; - const MailConfigAccount *account; - struct _save_draft_info *sdi; - CamelFolder *folder = NULL; - - account = e_msg_composer_get_preferred_account (composer); - if (account && account->drafts_folder_uri && - strcmp (account->drafts_folder_uri, default_drafts_folder_uri) != 0) { - int id; - - id = mail_get_folder (account->drafts_folder_uri, 0, save_draft_folder, &folder, mail_thread_new); - mail_msg_wait (id); - - if (!folder) { - GtkWidget *dialog; - - dialog = gnome_ok_cancel_dialog_parented (_("Unable to open the drafts folder for this account.\n" - "Would you like to use the default drafts folder?"), - use_default_drafts_cb, &folder, GTK_WINDOW (composer)); - gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - if (!folder) - return; - } - } else { - folder = drafts_folder; - camel_object_ref (CAMEL_OBJECT (folder)); - } - - msg = e_msg_composer_get_message_draft (composer); - - info = g_new0 (CamelMessageInfo, 1); - info->flags = CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_SEEN; - - sdi = g_malloc (sizeof (struct _save_draft_info)); - sdi->composer = composer; - gtk_object_ref (GTK_OBJECT (composer)); - sdi->quit = quit; - - mail_append_mail (folder, msg, info, save_draft_done, sdi); - camel_object_unref (CAMEL_OBJECT (folder)); - camel_object_unref (CAMEL_OBJECT (msg)); -} - static GtkWidget * create_msg_composer (const char *url) { @@ -765,8 +689,6 @@ compose_msg (GtkWidget *widget, gpointer user_data) GTK_SIGNAL_FUNC (composer_send_cb), NULL); gtk_signal_connect (GTK_OBJECT (composer), "postpone", GTK_SIGNAL_FUNC (composer_postpone_cb), NULL); - gtk_signal_connect (GTK_OBJECT (composer), "save-draft", - GTK_SIGNAL_FUNC (composer_save_draft_cb), NULL); gtk_widget_show (composer); } @@ -790,99 +712,102 @@ send_to_url (const char *url) GTK_SIGNAL_FUNC (composer_send_cb), NULL); gtk_signal_connect (GTK_OBJECT (composer), "postpone", GTK_SIGNAL_FUNC (composer_postpone_cb), NULL); - gtk_signal_connect (GTK_OBJECT (composer), "save-draft", - GTK_SIGNAL_FUNC (composer_save_draft_cb), NULL); - + gtk_widget_show (composer); } static GList * list_add_addresses (GList *list, const CamelInternetAddress *cia, const GSList *accounts, - GHashTable *rcpt_hash, const MailConfigAccount **me) + GHashTable *rcpt_hash, const MailConfigAccount **me, + const char *ignore_addr) { - const MailConfigAccount *account; - GHashTable *account_hash; const char *name, *addr; const GSList *l; + gboolean notme; int i; - account_hash = g_hash_table_new (g_strcase_hash, g_strcase_equal); - l = accounts; - while (l) { - account = l->data; - g_hash_table_insert (account_hash, (char *) account->id->address, (void *) account); - l = l->next; - } - for (i = 0; camel_internet_address_get (cia, i, &name, &addr); i++) { - /* Here I'll check to see if the cc:'d address is the address - of the sender, and if so, don't add it to the cc: list; this - is to fix Bugzilla bug #455. */ - account = g_hash_table_lookup (account_hash, addr); - if (account && me && !*me) - *me = account; - - if (!account && !g_hash_table_lookup (rcpt_hash, addr)) { - EDestination *dest; + /* Make sure we don't want to ignore this address */ + if (!ignore_addr || g_strcasecmp (ignore_addr, addr)) { - dest = e_destination_new (); - e_destination_set_name (dest, name); - e_destination_set_email (dest, addr); + /* Here I'll check to see if the cc:'d address is the address + of the sender, and if so, don't add it to the cc: list; this + is to fix Bugzilla bug #455. */ + notme = TRUE; + l = accounts; + while (l) { + const MailConfigAccount *acnt = l->data; + + if (!g_strcasecmp (acnt->id->address, addr)) { + notme = FALSE; + if (me && !*me) + *me = acnt; + break; + } + + l = l->next; + } - list = g_list_append (list, dest); - g_hash_table_insert (rcpt_hash, (char *) addr, GINT_TO_POINTER (1)); - } + if (notme && !g_hash_table_lookup (rcpt_hash, addr)) { + EDestination *dest; + + dest = e_destination_new (); + e_destination_set_name (dest, name); + e_destination_set_email (dest, addr); + + list = g_list_append (list, dest); + g_hash_table_insert (rcpt_hash, (char *) addr, GINT_TO_POINTER (1)); + } + } } - g_hash_table_destroy (account_hash); - return list; } static const MailConfigAccount * guess_me (const CamelInternetAddress *to, const CamelInternetAddress *cc, const GSList *accounts) { - const MailConfigAccount *account; - GHashTable *account_hash; - const char *addr; + const char *name, *addr; const GSList *l; + gboolean notme; + char *full; int i; - /* "optimization" */ - if (!to && !cc) - return NULL; - - account_hash = g_hash_table_new (g_strcase_hash, g_strcase_equal); - l = accounts; - while (l) { - account = l->data; - g_hash_table_insert (account_hash, (char *) account->id->address, (void *) account); - l = l->next; - } - if (to) { - for (i = 0; camel_internet_address_get (to, i, NULL, &addr); i++) { - account = g_hash_table_lookup (account_hash, addr); - if (account) - goto found; + for (i = 0; camel_internet_address_get (to, i, &name, &addr); i++) { + full = camel_internet_address_format_address (name, addr); + l = accounts; + while (l) { + const MailConfigAccount *acnt = l->data; + + if (!g_strcasecmp (acnt->id->address, addr)) { + notme = FALSE; + return acnt; + } + + l = l->next; + } } } if (cc) { - for (i = 0; camel_internet_address_get (cc, i, NULL, &addr); i++) { - account = g_hash_table_lookup (account_hash, addr); - if (account) - goto found; + for (i = 0; camel_internet_address_get (cc, i, &name, &addr); i++) { + full = camel_internet_address_format_address (name, addr); + l = accounts; + while (l) { + const MailConfigAccount *acnt = l->data; + + if (!g_strcasecmp (acnt->id->address, addr)) { + notme = FALSE; + return acnt; + } + + l = l->next; + } } } - account = NULL; - - found: - - g_hash_table_destroy (account_hash); - - return account; + return NULL; } static EMsgComposer * @@ -977,16 +902,14 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char } else { GHashTable *rcpt_hash; - rcpt_hash = g_hash_table_new (g_strcase_hash, g_strcase_equal); + rcpt_hash = g_hash_table_new (g_str_hash, g_str_equal); reply_to = camel_mime_message_get_reply_to (message); if (!reply_to) reply_to = camel_mime_message_get_from (message); if (reply_to) { - int i; - - for (i = 0; camel_internet_address_get (reply_to, i, &name, &reply_addr); i++) { - /* Get the Reply-To address so we can ignore references to it in the Cc: list */ + /* Get the Reply-To address so we can ignore references to it in the Cc: list */ + if (camel_internet_address_get (reply_to, 0, &name, &reply_addr)) { EDestination *dest; dest = e_destination_new (); @@ -998,8 +921,8 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char } if (mode == REPLY_ALL) { - cc = list_add_addresses (cc, to_addrs, accounts, rcpt_hash, &me); - cc = list_add_addresses (cc, cc_addrs, accounts, rcpt_hash, me ? NULL : &me); + cc = list_add_addresses (cc, to_addrs, accounts, rcpt_hash, &me, NULL); + cc = list_add_addresses (cc, cc_addrs, accounts, rcpt_hash, me ? NULL : &me, reply_addr); } else { me = guess_me (to_addrs, cc_addrs, accounts); } @@ -1101,8 +1024,7 @@ mail_reply (CamelFolder *folder, CamelMimeMessage *msg, const char *uid, int mod psd->folder = folder; camel_object_ref (CAMEL_OBJECT (psd->folder)); psd->uid = g_strdup (uid); - psd->flags = CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_NEEDS_REPLY; - psd->set = CAMEL_MESSAGE_ANSWERED; + psd->flags = CAMEL_MESSAGE_ANSWERED; composer = mail_generate_reply (folder, msg, uid, mode); if (!composer) @@ -1112,8 +1034,6 @@ mail_reply (CamelFolder *folder, CamelMimeMessage *msg, const char *uid, int mod GTK_SIGNAL_FUNC (composer_send_cb), psd); gtk_signal_connect (GTK_OBJECT (composer), "postpone", GTK_SIGNAL_FUNC (composer_postpone_cb), psd); - gtk_signal_connect (GTK_OBJECT (composer), "save-draft", - GTK_SIGNAL_FUNC (composer_save_draft_cb), NULL); gtk_signal_connect (GTK_OBJECT (composer), "destroy", GTK_SIGNAL_FUNC (free_psd), psd); @@ -1205,8 +1125,6 @@ forward_get_composer (CamelMimeMessage *message, const char *subject) GTK_SIGNAL_FUNC (composer_send_cb), NULL); gtk_signal_connect (GTK_OBJECT (composer), "postpone", GTK_SIGNAL_FUNC (composer_postpone_cb), NULL); - gtk_signal_connect (GTK_OBJECT (composer), "save-draft", - GTK_SIGNAL_FUNC (composer_save_draft_cb), NULL); e_msg_composer_set_headers (composer, account->name, NULL, NULL, NULL, subject); } else { g_warning ("Could not create composer"); @@ -1745,25 +1663,6 @@ toggle_as_important (BonoboUIComponent *uih, void *user_data, const char *path) toggle_flags (FOLDER_BROWSER (user_data), CAMEL_MESSAGE_FLAGGED); } -void -mark_as_needing_reply (BonoboUIComponent *uih, void *user_data, const char *path) -{ - flag_messages (FOLDER_BROWSER (user_data), CAMEL_MESSAGE_DELETED, 0); - flag_messages (FOLDER_BROWSER (user_data), CAMEL_MESSAGE_NEEDS_REPLY, CAMEL_MESSAGE_NEEDS_REPLY); -} - -void -mark_as_not_needing_reply (BonoboUIComponent *uih, void *user_data, const char *path) -{ - flag_messages (FOLDER_BROWSER (user_data), CAMEL_MESSAGE_NEEDS_REPLY, 0); -} - -void -toggle_need_reply (BonoboUIComponent *uih, void *user_data, const char *path) -{ - toggle_flags (FOLDER_BROWSER (user_data), CAMEL_MESSAGE_NEEDS_REPLY); -} - void zoom_in (BonoboUIComponent *uih, void *user_data, const char *path) { @@ -1808,7 +1707,10 @@ do_edit_messages (CamelFolder *folder, GPtrArray *uids, GPtrArray *messages, voi for (i = 0; i < messages->len; i++) { EMsgComposer *composer; + XEvolution *hdrs; + hdrs = mail_tool_remove_xevolution_headers (messages->pdata[i]); + mail_tool_destroy_xevolution (hdrs); camel_medium_remove_header (CAMEL_MEDIUM (messages->pdata[i]), "X-Mailer"); composer = e_msg_composer_new_with_message (messages->pdata[i]); @@ -1819,11 +1721,6 @@ do_edit_messages (CamelFolder *folder, GPtrArray *uids, GPtrArray *messages, voi gtk_signal_connect (GTK_OBJECT (composer), "postpone", composer_postpone_cb, NULL); - /* FIXME: we want to pass data to this callback so - we can remove the old draft when they save again */ - gtk_signal_connect (GTK_OBJECT (composer), "save-draft", - composer_save_draft_cb, NULL); - gtk_widget_show (GTK_WIDGET (composer)); } } @@ -2409,42 +2306,21 @@ providers_config (BonoboUIComponent *uih, void *user_data, const char *path) } } -#define HEADER_HEIGHT 1.1 -#define FOOTER_HEIGHT 1.1 - -static void -header_print_cb (GtkHTML *html, GnomePrintContext *print_context, - double x, double y, double width, double height, gpointer user_data) -{ -#if 0 - gnome_print_setlinewidth (print_context, 12); - gnome_print_setrgbcolor (print_context, 1.0, 0.0, 0.0); - - gnome_print_newpath (print_context); - gnome_print_moveto (print_context, x, y); - gnome_print_lineto (print_context, x+width, y+height); - gnome_print_strokepath (print_context); -#endif -} - -static void -footer_print_cb (GtkHTML *html, GnomePrintContext *print_context, - double x, double y, double width, double height, gpointer user_data) -{ - -} - +/* + * FIXME: This routine could be made generic, by having a closure + * function plus data, and having the whole process be taken care + * of for you + */ static void do_mail_print (FolderBrowser *fb, gboolean preview) { - GtkHTML *html; GnomePrintContext *print_context; GnomePrintMaster *print_master; GnomePrintDialog *dialog; GnomePrinter *printer = NULL; int copies = 1; int collate = FALSE; - + if (!preview) { dialog = GNOME_PRINT_DIALOG (gnome_print_dialog_new (_("Print Message"), GNOME_PRINT_DIALOG_COPIES)); @@ -2476,28 +2352,8 @@ do_mail_print (FolderBrowser *fb, gboolean preview) gnome_print_master_set_paper (print_master, gnome_paper_with_name (_("US-Letter"))); gnome_print_master_set_copies (print_master, copies, collate); print_context = gnome_print_master_get_context (print_master); - - html = GTK_HTML (gtk_html_new ()); - mail_display_initialize_gtkhtml (fb->mail_display, html); - - /* Set our 'printing' flag to true and render. This causes us - to ignoring any adjustments we made to accomodate the - user's theme. */ - fb->mail_display->printing = TRUE; - - mail_display_render (fb->mail_display, html); - gtk_html_print_set_master (html, print_master); - -#if 0 - gtk_html_print_with_header_footer (html, print_context, - HEADER_HEIGHT, FOOTER_HEIGHT, - header_print_cb, footer_print_cb, - NULL); -#endif - gtk_html_print (html, print_context); - - fb->mail_display->printing = FALSE; - + gtk_html_print_set_master (fb->mail_display->html, print_master); + gtk_html_print (fb->mail_display->html, print_context); gnome_print_master_close (print_master); if (preview){ @@ -2515,73 +2371,9 @@ do_mail_print (FolderBrowser *fb, gboolean preview) _("Printing of message failed")); } } - - /* FIXME: We are leaking the GtkHTML object */ + gtk_object_unref (GTK_OBJECT (print_master)); } -/* This is pretty evil. FolderBrowser's API should be extended to allow these sorts of - things to be done in a more natural way. */ - -/* */ - -struct blarg_this_sucks { - FolderBrowser *fb; - gboolean preview; -}; - -static void -done_message_selected (CamelFolder *folder, char *uid, CamelMimeMessage *msg, void *data) -{ - struct blarg_this_sucks *blarg = data; - FolderBrowser *fb = blarg->fb; - gboolean preview = blarg->preview; - - g_free (blarg); - - mail_display_set_message (fb->mail_display, (CamelMedium *)msg); - - g_free (fb->loaded_uid); - fb->loaded_uid = fb->loading_uid; - fb->loading_uid = NULL; - - do_mail_print (fb, preview); -} - -/* Ack! Most of this is copied from folder-browser.c */ -static void -do_mail_fetch_and_print (FolderBrowser *fb, gboolean preview) -{ - if (! fb->preview_shown) { - /* If the preview pane is closed, we have to do some - extra magic to load the message. */ - struct blarg_this_sucks *blarg = g_new (struct blarg_this_sucks, 1); - - blarg->fb = fb; - blarg->preview = preview; - - fb->loading_id = 0; - - /* if we are loading, then set a pending, but leave the loading, coudl cancel here (?) */ - if (fb->loading_uid) { - g_free (fb->pending_uid); - fb->pending_uid = g_strdup (fb->new_uid); - } else { - if (fb->new_uid) { - fb->loading_uid = g_strdup (fb->new_uid); - mail_get_message (fb->folder, fb->loading_uid, done_message_selected, blarg, mail_thread_new); - } else { - mail_display_set_message (fb->mail_display, NULL); - g_free (blarg); - } - } - - } else { - do_mail_print (fb, preview); - } -} - -/* */ - void print_msg (GtkWidget *button, gpointer user_data) { @@ -2590,7 +2382,7 @@ print_msg (GtkWidget *button, gpointer user_data) if (FOLDER_BROWSER_IS_DESTROYED (fb)) return; - do_mail_fetch_and_print (fb, FALSE); + do_mail_print (fb, FALSE); } void @@ -2601,7 +2393,7 @@ print_preview_msg (GtkWidget *button, gpointer user_data) if (FOLDER_BROWSER_IS_DESTROYED (fb)) return; - do_mail_fetch_and_print (fb, TRUE); + do_mail_print (fb, TRUE); } /******************** Begin Subscription Dialog ***************************/ diff --git a/mail/mail-callbacks.h b/mail/mail-callbacks.h index 9a82884640..f2bee415cf 100644 --- a/mail/mail-callbacks.h +++ b/mail/mail-callbacks.h @@ -81,21 +81,19 @@ void resend_msg (GtkWidget *widget, gpointer user_data); void search_msg (GtkWidget *widget, gpointer user_data); void load_images (GtkWidget *widget, gpointer user_data); -void add_sender_to_addrbook (BonoboUIComponent *uih, void *user_data, const char *path); -void move_msg (BonoboUIComponent *uih, void *user_data, const char *path); -void copy_msg (BonoboUIComponent *uih, void *user_data, const char *path); -void select_all (BonoboUIComponent *uih, void *user_data, const char *path); -void select_thread (BonoboUIComponent *uih, void *user_data, const char *path); -void invert_selection (BonoboUIComponent *uih, void *user_data, const char *path); -void mark_as_seen (BonoboUIComponent *uih, void *user_data, const char *path); -void mark_all_as_seen (BonoboUIComponent *uih, void *user_data, const char *path); -void mark_as_unseen (BonoboUIComponent *uih, void *user_data, const char *path); -void mark_as_important (BonoboUIComponent *uih, void *user_data, const char *path); -void mark_as_unimportant (BonoboUIComponent *uih, void *user_data, const char *path); -void toggle_as_important (BonoboUIComponent *uih, void *user_data, const char *path); -void mark_as_needing_reply (BonoboUIComponent *uih, void *user_data, const char *path); -void mark_as_not_needing_reply (BonoboUIComponent *uih, void *user_data, const char *path); -void toggle_need_reply (BonoboUIComponent *uih, void *user_data, const char *path); +void add_sender_to_addrbook (BonoboUIComponent *uih, void *user_data, const char *path); +void move_msg (BonoboUIComponent *uih, void *user_data, const char *path); +void copy_msg (BonoboUIComponent *uih, void *user_data, const char *path); +void add_sender_to_addrbook(BonoboUIComponent *uih, void *user_data, const char *path); +void select_all (BonoboUIComponent *uih, void *user_data, const char *path); +void select_thread (BonoboUIComponent *uih, void *user_data, const char *path); +void invert_selection (BonoboUIComponent *uih, void *user_data, const char *path); +void mark_as_seen (BonoboUIComponent *uih, void *user_data, const char *path); +void mark_all_as_seen (BonoboUIComponent *uih, void *user_data, const char *path); +void mark_as_unseen (BonoboUIComponent *uih, void *user_data, const char *path); +void mark_as_important (BonoboUIComponent *uih, void *user_data, const char *path); +void mark_as_unimportant (BonoboUIComponent *uih, void *user_data, const char *path); +void toggle_as_important (BonoboUIComponent *uih, void *user_data, const char *path); void zoom_in (BonoboUIComponent *uih, void *user_data, const char *path); void zoom_out (BonoboUIComponent *uih, void *user_data, const char *path); @@ -119,7 +117,6 @@ void mail_reply (CamelFolder *folder, CamelMimeMessage *msg, const ch void composer_send_cb (EMsgComposer *composer, gpointer data); void composer_postpone_cb (EMsgComposer *composer, gpointer data); -void composer_save_draft_cb (EMsgComposer *composer, int quit, gpointer data); void forward_messages (CamelFolder *folder, GPtrArray *uids, gboolean inline); diff --git a/mail/mail-config.c b/mail/mail-config.c index d1e322bb0b..aa64ee2e61 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -76,7 +76,7 @@ typedef struct { gboolean show_preview; gboolean thread_list; gboolean hide_deleted; - int paned_size; + gint paned_size; gboolean send_html; gboolean confirm_unwanted_html; gboolean citation_highlight; @@ -85,11 +85,11 @@ typedef struct { gboolean prompt_only_bcc; gboolean confirm_expunge; gboolean do_seen_timeout; - int seen_timeout; + gint seen_timeout; gboolean empty_trash_on_exit; GSList *accounts; - int default_account; + gint default_account; GSList *news; @@ -106,9 +106,6 @@ typedef struct { gboolean filter_log; char *filter_log_path; - - MailConfigNewMailNotify notify; - char *notify_filename; } MailConfig; static MailConfig *config = NULL; @@ -117,7 +114,7 @@ static MailConfig *config = NULL; /* Prototypes */ static void config_read (void); -static void mail_config_set_default_account_num (int new_default); +static void mail_config_set_default_account_num (gint new_default); /* Identity */ @@ -210,11 +207,6 @@ account_copy (const MailConfigAccount *account) new->sent_folder_name = g_strdup (account->sent_folder_name); new->sent_folder_uri = g_strdup (account->sent_folder_uri); - new->always_cc = account->always_cc; - new->cc_addrs = g_strdup (account->cc_addrs); - new->always_bcc = account->always_bcc; - new->bcc_addrs = g_strdup (account->bcc_addrs); - new->pgp_key = g_strdup (account->pgp_key); new->pgp_encrypt_to_self = account->pgp_encrypt_to_self; new->pgp_always_sign = account->pgp_always_sign; @@ -243,9 +235,6 @@ account_destroy (MailConfigAccount *account) g_free (account->sent_folder_name); g_free (account->sent_folder_uri); - g_free (account->cc_addrs); - g_free (account->bcc_addrs); - g_free (account->pgp_key); g_free (account->smime_key); @@ -370,32 +359,6 @@ config_read (void) else g_free (val); - path = g_strdup_printf ("/Mail/Accounts/account_always_cc_%d", i); - account->always_cc = bonobo_config_get_boolean_with_default ( - config->db, path, FALSE, NULL); - g_free (path); - - path = g_strdup_printf ("/Mail/Accounts/account_always_cc_addrs_%d", i); - val = bonobo_config_get_string (config->db, path, NULL); - g_free (path); - if (val && *val) - account->cc_addrs = val; - else - g_free (val); - - path = g_strdup_printf ("/Mail/Accounts/account_always_bcc_%d", i); - account->always_bcc = bonobo_config_get_boolean_with_default ( - config->db, path, FALSE, NULL); - g_free (path); - - path = g_strdup_printf ("/Mail/Accounts/account_always_bcc_addrs_%d", i); - val = bonobo_config_get_string (config->db, path, NULL); - g_free (path); - if (val && *val) - account->bcc_addrs = val; - else - g_free (val); - /* get the pgp info */ path = g_strdup_printf ("/Mail/Accounts/account_pgp_key_%d", i); val = bonobo_config_get_string (config->db, path, NULL); @@ -534,14 +497,13 @@ config_read (void) "/News/Sources/num", 0, NULL); for (i = 0; i < len; i++) { MailConfigService *n; - char *path, *r; + gchar *path, *r; path = g_strdup_printf ("/News/Sources/url_%d", i); if ((r = bonobo_config_get_string (config->db, path, NULL))) { n = g_new0 (MailConfigService, 1); n->url = r; - n->enabled = TRUE; config->news = g_slist_append (config->news, n); } @@ -644,14 +606,6 @@ config_read (void) config->filter_log_path = bonobo_config_get_string ( config->db, "/Mail/Filters/log_path", NULL); - - /* New Mail Notification */ - config->notify = bonobo_config_get_long_with_default ( - config->db, "/Mail/Notify/new_mail_notification", - MAIL_CONFIG_NOTIFY_NOT, NULL); - - config->notify_filename = bonobo_config_get_string ( - config->db, "/Mail/Notify/new_mail_notification_sound_file", NULL); } #define bonobo_config_set_string_wrapper(db, path, val, ev) bonobo_config_set_string (db, path, val ? val : "", ev) @@ -713,24 +667,6 @@ mail_config_write (void) account->sent_folder_uri, NULL); g_free (path); - path = g_strdup_printf ("/Mail/Accounts/account_always_cc_%d", i); - bonobo_config_set_boolean (config->db, path, account->always_cc, NULL); - g_free (path); - - path = g_strdup_printf ("/Mail/Accounts/account_always_cc_addrs_%d", i); - bonobo_config_set_string_wrapper (config->db, path, - account->cc_addrs, NULL); - g_free (path); - - path = g_strdup_printf ("/Mail/Accounts/account_always_bcc_%d", i); - bonobo_config_set_boolean (config->db, path, account->always_bcc, NULL); - g_free (path); - - path = g_strdup_printf ("/Mail/Accounts/account_always_bcc_addrs_%d", i); - bonobo_config_set_string_wrapper (config->db, path, - account->bcc_addrs, NULL); - g_free (path); - /* account pgp options */ path = g_strdup_printf ("/Mail/Accounts/account_pgp_key_%d", i); bonobo_config_set_string_wrapper (config->db, path, account->pgp_key, NULL); @@ -825,7 +761,7 @@ mail_config_write (void) bonobo_config_set_long (config->db, "/News/Sources/num", len, NULL); for (i = 0; i < len; i++) { MailConfigService *n; - char *path; + gchar *path; n = g_slist_nth_data (config->news, i); @@ -949,14 +885,7 @@ mail_config_write_on_exit (void) bonobo_config_set_string_wrapper (config->db, "/Mail/Filters/log_path", config->filter_log_path, NULL); - - /* New Mail Notification */ - bonobo_config_set_long (config->db, "/Mail/Notify/new_mail_notification", - config->notify, NULL); - - bonobo_config_set_string_wrapper (config->db, "/Mail/Notify/new_mail_notification_sound_file", - config->notify_filename, NULL); - + if (config->threaded_hash) g_hash_table_foreach_remove (config->threaded_hash, hash_save_state, "Threads"); @@ -968,7 +897,7 @@ mail_config_write_on_exit (void) CORBA_exception_free (&ev); /* Passwords */ - + /* then we make sure the ones we want to remember are in the session cache */ accounts = mail_config_get_accounts (); @@ -989,21 +918,21 @@ mail_config_write_on_exit (void) g_free (passwd); } } - + /* then we clear out our component passwords */ e_passwords_clear_component_passwords (); - + /* then we remember them */ accounts = mail_config_get_accounts (); for ( ; accounts; accounts = accounts->next) { account = accounts->data; if (account->source->save_passwd && account->source->url) mail_session_remember_password (account->source->url); - + if (account->transport->save_passwd && account->transport->url) mail_session_remember_password (account->transport->url); } - + /* now do cleanup */ mail_config_clear (); } @@ -1201,14 +1130,14 @@ mail_config_set_hide_deleted (gboolean value) config->hide_deleted = value; } -int +gint mail_config_get_paned_size (void) { return config->paned_size; } void -mail_config_set_paned_size (int value) +mail_config_set_paned_size (gint value) { config->paned_size = value; } @@ -1273,14 +1202,14 @@ mail_config_set_do_seen_timeout (gboolean do_seen_timeout) config->do_seen_timeout = do_seen_timeout; } -int +gint mail_config_get_mark_as_seen_timeout (void) { return config->seen_timeout; } void -mail_config_set_mark_as_seen_timeout (int timeout) +mail_config_set_mark_as_seen_timeout (gint timeout) { config->seen_timeout = timeout; } @@ -1680,30 +1609,6 @@ mail_config_set_default_charset (const char *charset) config->default_charset = g_strdup (charset); } -MailConfigNewMailNotify -mail_config_get_new_mail_notify (void) -{ - return config->notify; -} - -void -mail_config_set_new_mail_notify (MailConfigNewMailNotify type) -{ - config->notify = type; -} - -const char * -mail_config_get_new_mail_notify_sound_file (void) -{ - return config->notify_filename; -} - -void -mail_config_set_new_mail_notify_sound_file (const char *filename) -{ - g_free (config->notify_filename); - config->notify_filename = g_strdup (filename); -} gboolean mail_config_find_account (const MailConfigAccount *account) @@ -1928,8 +1833,8 @@ new_source_created (MailConfigAccount *account) CamelProvider *prov; CamelFolder *inbox; CamelException ex; - char *name; - char *url; + gchar *name; + gchar *url; /* no source, don't bother. */ if (!account->source || !account->source->url) @@ -2067,14 +1972,14 @@ mail_config_remove_account (MailConfigAccount *account) return config->accounts; } -int +gint mail_config_get_default_account_num (void) { return config->default_account; } static void -mail_config_set_default_account_num (int new_default) +mail_config_set_default_account_num (gint new_default) { config->default_account = new_default; } @@ -2281,7 +2186,7 @@ mail_config_check_service (const char *url, CamelProviderType type, GList **auth id = m->msg.seq; e_thread_put(mail_thread_queued, (EMsg *)m); - + dialog = gnome_dialog_new (_("Connecting to server..."), GNOME_STOCK_BUTTON_CANCEL, NULL); @@ -2296,9 +2201,9 @@ mail_config_check_service (const char *url, CamelProviderType type, GList **auth GTK_SIGNAL_FUNC (check_cancelled), &id); gtk_window_set_modal (GTK_WINDOW (dialog), FALSE); gtk_widget_show_all (dialog); - + mail_msg_wait(id); - + gtk_widget_destroy (dialog); dialog = NULL; diff --git a/mail/mail-display.c b/mail/mail-display.c index 15cd27809c..4746c348aa 100644 --- a/mail/mail-display.c +++ b/mail/mail-display.c @@ -71,7 +71,7 @@ struct _PixbufLoader { }; static GHashTable *thumbnail_cache = NULL; -static char *save_pathname = NULL; /* preserves last directory in save dialog */ +static gchar *save_pathname = NULL; /* preserves last directory in save dialog */ /*----------------------------------------------------------------------* * Callbacks @@ -126,7 +126,7 @@ make_safe_filename (const char *prefix,CamelMimePart *part) { const char *name = NULL; char *safe, *p; - + if (part) { name = camel_mime_part_get_filename (part); } @@ -135,7 +135,7 @@ make_safe_filename (const char *prefix,CamelMimePart *part) /* This is a filename. Translators take note. */ name = _("attachment"); } - + p = strrchr (name, '/'); if (p) safe = g_strdup_printf ("%s%s", prefix, p); @@ -154,23 +154,24 @@ save_data_cb (GtkWidget *widget, gpointer user_data) { GtkFileSelection *file_select = (GtkFileSelection *) gtk_widget_get_ancestor (widget, GTK_TYPE_FILE_SELECTION); - char *p; - + gchar *p; + /* uh, this doesn't really feel right, but i dont know what to do better */ gtk_widget_hide (GTK_WIDGET (file_select)); - write_data_to_file (user_data, gtk_file_selection_get_filename (file_select), + write_data_to_file (user_data, + gtk_file_selection_get_filename (file_select), FALSE); - + /* preserve the pathname */ - g_free (save_pathname); - save_pathname = g_strdup (gtk_file_selection_get_filename (file_select)); - if((p = strrchr (save_pathname, '/')) != NULL) + g_free(save_pathname); + save_pathname = g_strdup(gtk_file_selection_get_filename(file_select)); + if((p = strrchr(save_pathname, '/')) != NULL) p[0] = 0; else { - g_free (save_pathname); + g_free(save_pathname); save_pathname = NULL; } - + gtk_widget_destroy (GTK_WIDGET (file_select)); } @@ -213,16 +214,6 @@ mail_display_jump_to_anchor (MailDisplay *md, const char *url) static void on_link_clicked (GtkHTML *html, const char *url, MailDisplay *md) { - char *full_url; - - if (md->base_url) { - full_url = alloca (strlen (md->base_url) + strlen (url) + 2); - sprintf (full_url, "%s%s%s", md->base_url, - *url == '/' ? "" : "/", url); - - url = full_url; - } - if (!g_strncasecmp (url, "news:", 5) || !g_strncasecmp (url, "nntp:", 5)) g_warning ("Can't handle news URLs yet."); @@ -770,7 +761,7 @@ save_url (MailDisplay *md, const char *url) g_return_val_if_fail (CAMEL_IS_MIME_PART (part), NULL); data = camel_medium_get_content_object ((CamelMedium *)part); - if (!mail_content_loaded (data, md, TRUE, NULL, NULL, NULL)) { + if (!mail_content_loaded (data, md, TRUE, NULL, NULL)) { return NULL; } @@ -967,7 +958,7 @@ on_object_requested (GtkHTML *html, GtkHTMLEmbedded *eb, gpointer data) urls = g_datalist_get_data (md->data, "part_urls"); if (!urls) return FALSE; - + if (!strncmp (eb->classid, "popup:", 6) && eb->type) { part = g_hash_table_lookup (urls, eb->classid + 6); if (!CAMEL_IS_MIME_PART (part)) @@ -1040,22 +1031,6 @@ ebook_callback (EBook *book, const gchar *addr, ECard *card, gpointer data) } } -static void -on_set_base (GtkHTML *html, const char *base_url, gpointer user_data) -{ - MailDisplay *md = user_data; - size_t len; - - g_free (md->base_url); - - /* strip the trailing '/' if there is one */ - len = strlen (base_url); - if (base_url[len - 1] == '/') - md->base_url = g_strndup (base_url, len - 1); - else - md->base_url = g_strdup (base_url); -} - static void on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle, gpointer user_data) @@ -1064,7 +1039,6 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle, GHashTable *urls; CamelMedium *medium; GByteArray *ba; - char *full_url; urls = g_datalist_get_data (md->data, "part_urls"); g_return_if_fail (urls != NULL); @@ -1078,7 +1052,7 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle, g_return_if_fail (CAMEL_IS_MEDIUM (medium)); data = camel_medium_get_content_object (medium); - if (!mail_content_loaded (data, md, FALSE, url, html, handle)) + if (!mail_content_loaded (data, md, FALSE, url, handle)) return; content_type = camel_data_wrapper_get_mime_type_field (data); @@ -1101,18 +1075,10 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle, gtk_html_end (html, handle, GTK_HTML_STREAM_OK); return; } - + urls = g_datalist_get_data (md->data, "data_urls"); g_return_if_fail (urls != NULL); - if (md->base_url) { - full_url = alloca (strlen (md->base_url) + strlen (url) + 2); - sprintf (full_url, "%s%s%s", md->base_url, - *url == '/' ? "" : "/", url); - - url = full_url; - } - /* See if it's some piece of cached data */ ba = g_hash_table_lookup (urls, url); if (ba) { @@ -1125,23 +1091,23 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle, gtk_html_end (html, handle, GTK_HTML_STREAM_OK); return; } - + /* See if it's something we can load. */ if (strncmp (url, "http:", 5) == 0) { if (mail_config_get_http_mode () == MAIL_CONFIG_HTTP_ALWAYS || g_datalist_get_data (md->data, "load_images")) { ba = g_byte_array_new (); g_hash_table_insert (urls, g_strdup (url), ba); - mail_display_stream_write_when_loaded (md, ba, url, load_http, html, handle, + mail_display_stream_write_when_loaded (md, ba, url, load_http, handle, g_strdup (url)); } else if (mail_config_get_http_mode () == MAIL_CONFIG_HTTP_SOMETIMES && !g_datalist_get_data (md->data, "checking_from")) { const CamelInternetAddress *from = camel_mime_message_get_from (md->current_message); const char *name, *addr; - + g_datalist_set_data (md->data, "checking_from", GINT_TO_POINTER (1)); - + /* Make sure we aren't deal w/ some sort of a pathological message w/o a From: header */ if (from != NULL && camel_internet_address_get (from, 0, &name, &addr)) e_book_query_address_locally (addr, ebook_callback, md); @@ -1155,11 +1121,10 @@ struct _load_content_msg { struct _mail_msg msg; MailDisplay *display; - GtkHTML *html; GtkHTMLStream *handle; - int redisplay_counter; - char *url; + gint redisplay_counter; + gchar *url; CamelMimeMessage *message; void (*callback)(MailDisplay *, gpointer); gpointer data; @@ -1197,16 +1162,16 @@ try_part_urls (struct _load_content_msg *m) g_return_val_if_fail (CAMEL_IS_MEDIUM (medium), FALSE); data = camel_medium_get_content_object (medium); - if (!mail_content_loaded (data, m->display, FALSE, m->url, m->html, m->handle)) { + if (!mail_content_loaded (data, m->display, FALSE, m->url, m->handle)) { g_warning ("This code should not be reached\n"); return TRUE; } - html_stream = mail_stream_gtkhtml_new (m->html, m->handle); + html_stream = mail_stream_gtkhtml_new (m->display->html, m->handle); camel_data_wrapper_write_to_stream (data, html_stream); camel_object_unref (CAMEL_OBJECT (html_stream)); - gtk_html_end (m->html, m->handle, GTK_HTML_STREAM_OK); + gtk_html_end (m->display->html, m->handle, GTK_HTML_STREAM_OK); return TRUE; } @@ -1226,9 +1191,9 @@ try_data_urls (struct _load_content_msg *m) if (ba) { if (ba->len) { printf ("writing ...\n"); - gtk_html_write (m->html, m->handle, ba->data, ba->len); + gtk_html_write (m->display->html, m->handle, ba->data, ba->len); } - gtk_html_end (m->html, m->handle, GTK_HTML_STREAM_OK); + gtk_html_end (m->display->html, m->handle, GTK_HTML_STREAM_OK); return TRUE; } @@ -1250,7 +1215,7 @@ load_content_loaded (struct _mail_msg *mm) m->display->redisplay_counter); if (m->redisplay_counter == m->display->redisplay_counter) { if (!try_part_urls (m) && !try_data_urls (m)) - gtk_html_end (m->html, m->handle, GTK_HTML_STREAM_ERROR); + gtk_html_end (m->display->html, m->handle, GTK_HTML_STREAM_ERROR); } } else mail_display_redisplay (m->display, FALSE); @@ -1276,7 +1241,6 @@ static struct _mail_msg_op load_content_op = { static void stream_write_or_redisplay_when_loaded (MailDisplay *md, - GtkHTML *html, gconstpointer key, const gchar *url, void (*callback)(MailDisplay *, gpointer), @@ -1303,7 +1267,6 @@ stream_write_or_redisplay_when_loaded (MailDisplay *md, m = mail_msg_new (&load_content_op, NULL, sizeof (*m)); m->display = md; gtk_object_ref (GTK_OBJECT (m->display)); - m->html = html; m->handle = handle; m->url = g_strdup (url); m->redisplay_counter = md->redisplay_counter; @@ -1319,40 +1282,34 @@ stream_write_or_redisplay_when_loaded (MailDisplay *md, void mail_display_stream_write_when_loaded (MailDisplay *md, gconstpointer key, - const char *url, + const gchar *url, void (*callback)(MailDisplay *, gpointer), - GtkHTML *html, GtkHTMLStream *handle, gpointer data) { - stream_write_or_redisplay_when_loaded (md, html, key, url, callback, handle, data); + stream_write_or_redisplay_when_loaded (md, key, url, callback, handle, data); } void mail_display_redisplay_when_loaded (MailDisplay *md, gconstpointer key, void (*callback)(MailDisplay *, gpointer), - GtkHTML *html, gpointer data) { - stream_write_or_redisplay_when_loaded (md, html, key, NULL, callback, NULL, data); + stream_write_or_redisplay_when_loaded (md, key, NULL, callback, NULL, data); } void -mail_text_write (GtkHTML *html, GtkHTMLStream *stream, gboolean printing, const char *text) +mail_text_write (GtkHTML *html, GtkHTMLStream *stream, const char *text) { - guint flags; char *htmltext; - flags = E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_SPACES; - - if (!printing) - flags |= E_TEXT_TO_HTML_CONVERT_URLS | E_TEXT_TO_HTML_CONVERT_ADDRESSES; - - if (mail_config_get_citation_highlight () && ! printing) - flags |= E_TEXT_TO_HTML_MARK_CITATION; - - htmltext = e_text_to_html_full (text, flags, mail_config_get_citation_color ()); + htmltext = e_text_to_html_full (text, E_TEXT_TO_HTML_CONVERT_URLS | + E_TEXT_TO_HTML_CONVERT_ADDRESSES | + E_TEXT_TO_HTML_CONVERT_NL | + E_TEXT_TO_HTML_CONVERT_SPACES | + (mail_config_get_citation_highlight () ? E_TEXT_TO_HTML_MARK_CITATION : 0), + mail_config_get_citation_color ()); gtk_html_write (html, stream, "", 4); gtk_html_write (html, stream, htmltext, strlen (htmltext)); @@ -1385,35 +1342,8 @@ static void clear_data (CamelObject *object, gpointer event_data, gpointer user_data) { GData *data = user_data; - - g_datalist_clear (&data); -} - -void -mail_display_render (MailDisplay *md, GtkHTML *html) -{ - GtkHTMLStream *stream; - - g_return_if_fail (IS_MAIL_DISPLAY (md)); - g_return_if_fail (GTK_IS_HTML (html)); - stream = gtk_html_begin (html); - - mail_html_write (html, stream, - "\n" - "\n" - "\n\n\n"); - mail_html_write (html, stream, "\n"); - - if (md->current_message) { - if (md->display_style == MAIL_CONFIG_DISPLAY_SOURCE) - mail_format_raw_message (md->current_message, md, html, stream); - else - mail_format_mime_message (md->current_message, md, html, stream); - } - - mail_html_write (html, stream, "\n"); - gtk_html_end (html, stream, GTK_HTML_STREAM_OK); + g_datalist_clear (&data); } /** @@ -1433,12 +1363,25 @@ mail_display_redisplay (MailDisplay *md, gboolean unscroll) md->redisplay_counter++; /* printf ("md %p redisplay %d\n", md, md->redisplay_counter); */ + md->stream = gtk_html_begin (GTK_HTML (md->html)); if (!unscroll) { /* This is a hack until there's a clean way to do this. */ GTK_HTML (md->html)->engine->newPage = FALSE; } - - mail_display_render (md, md->html); + + mail_html_write (md->html, md->stream, "\n\n\n\n\n"); + mail_html_write (md->html, md->stream, "\n"); + + if (md->current_message) { + if (md->display_style == MAIL_CONFIG_DISPLAY_SOURCE) + mail_format_raw_message (md->current_message, md); + else + mail_format_mime_message (md->current_message, md); + } + + mail_html_write (md->html, md->stream, "\n"); + gtk_html_end (md->html, md->stream, GTK_HTML_STREAM_OK); + md->stream = NULL; } @@ -1516,19 +1459,16 @@ mail_display_init (GtkObject *object) mail_display->scroll = NULL; mail_display->html = NULL; mail_display->redisplay_counter = 0; + mail_display->stream = NULL; mail_display->last_active = NULL; mail_display->idle_id = 0; mail_display->selection = NULL; - mail_display->charset = NULL; - mail_display->base_url = NULL; mail_display->current_message = NULL; mail_display->data = NULL; - + mail_display->invisible = gtk_invisible_new (); mail_display->display_style = mail_config_get_message_display_style (); - - mail_display->printing = FALSE; } static void @@ -1538,7 +1478,6 @@ mail_display_destroy (GtkObject *object) g_free (mail_display->charset); g_free (mail_display->selection); - g_free (mail_display->base_url); g_datalist_clear (mail_display->data); g_free (mail_display->data); @@ -2102,10 +2041,10 @@ mail_display_new (void) GtkWidget *scroll, *html; GdkAtom clipboard_atom; HTMLTokenizer *tok; - + gtk_box_set_homogeneous (GTK_BOX (mail_display), FALSE); gtk_widget_show (GTK_WIDGET (mail_display)); - + scroll = e_scroll_frame_new (NULL, NULL); e_scroll_frame_set_policy (E_SCROLL_FRAME (scroll), GTK_POLICY_AUTOMATIC, @@ -2113,50 +2052,16 @@ mail_display_new (void) e_scroll_frame_set_shadow_type (E_SCROLL_FRAME (scroll), GTK_SHADOW_IN); gtk_box_pack_start_defaults (GTK_BOX (mail_display), GTK_WIDGET (scroll)); gtk_widget_show (GTK_WIDGET (scroll)); - + html = gtk_html_new (); tok = e_searching_tokenizer_new (); html_engine_set_tokenizer (GTK_HTML (html)->engine, tok); gtk_object_unref (GTK_OBJECT (tok)); - - mail_display_initialize_gtkhtml (mail_display, GTK_HTML (html)); - - gtk_container_add (GTK_CONTAINER (scroll), html); - gtk_widget_show (GTK_WIDGET (html)); - - gtk_signal_connect (GTK_OBJECT (mail_display->invisible), "selection_get", - GTK_SIGNAL_FUNC (invisible_selection_get_callback), mail_display); - gtk_signal_connect (GTK_OBJECT (mail_display->invisible), "selection_clear_event", - GTK_SIGNAL_FUNC (invisible_selection_clear_event_callback), mail_display); - - gtk_selection_add_target (mail_display->invisible, - GDK_SELECTION_PRIMARY, GDK_SELECTION_TYPE_STRING, 1); - - clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); - if (clipboard_atom != GDK_NONE) - gtk_selection_add_target (mail_display->invisible, - clipboard_atom, GDK_SELECTION_TYPE_STRING, 1); - - mail_display->scroll = E_SCROLL_FRAME (scroll); - mail_display->html = GTK_HTML (html); - mail_display->last_active = NULL; - mail_display->data = g_new0 (GData *, 1); - g_datalist_init (mail_display->data); - - return GTK_WIDGET (mail_display); -} -void -mail_display_initialize_gtkhtml (MailDisplay *mail_display, GtkHTML *html) -{ gtk_html_set_default_content_type (GTK_HTML (html), "text/html; charset=utf-8"); - + gtk_html_set_editable (GTK_HTML (html), FALSE); - - gtk_signal_connect (GTK_OBJECT (html), "set_base", - GTK_SIGNAL_FUNC (on_set_base), - mail_display); gtk_signal_connect (GTK_OBJECT (html), "url_requested", GTK_SIGNAL_FUNC (on_url_requested), mail_display); @@ -2176,7 +2081,31 @@ mail_display_initialize_gtkhtml (MailDisplay *mail_display, GtkHTML *html) GTK_SIGNAL_FUNC (html_iframe_created), mail_display); gtk_signal_connect (GTK_OBJECT (html), "on_url", GTK_SIGNAL_FUNC (html_on_url), mail_display); -} + gtk_container_add (GTK_CONTAINER (scroll), html); + gtk_widget_show (GTK_WIDGET (html)); + + gtk_signal_connect (GTK_OBJECT (mail_display->invisible), "selection_get", + GTK_SIGNAL_FUNC (invisible_selection_get_callback), mail_display); + gtk_signal_connect (GTK_OBJECT (mail_display->invisible), "selection_clear_event", + GTK_SIGNAL_FUNC (invisible_selection_clear_event_callback), mail_display); + + gtk_selection_add_target (mail_display->invisible, + GDK_SELECTION_PRIMARY, GDK_SELECTION_TYPE_STRING, 1); + + clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); + if (clipboard_atom != GDK_NONE) + gtk_selection_add_target (mail_display->invisible, + clipboard_atom, GDK_SELECTION_TYPE_STRING, 1); + + mail_display->scroll = E_SCROLL_FRAME (scroll); + mail_display->html = GTK_HTML (html); + mail_display->stream = NULL; + mail_display->last_active = NULL; + mail_display->data = g_new0 (GData *, 1); + g_datalist_init (mail_display->data); + + return GTK_WIDGET (mail_display); +} E_MAKE_TYPE (mail_display, "MailDisplay", MailDisplay, mail_display_class_init, mail_display_init, PARENT_TYPE); diff --git a/mail/mail-folder-cache.c b/mail/mail-folder-cache.c index 7cf21ca1da..9bf7d12025 100644 --- a/mail/mail-folder-cache.c +++ b/mail/mail-folder-cache.c @@ -731,7 +731,7 @@ mail_note_store(CamelStore *store, EvolutionStorage *storage, GNOME_Evolution_St g_assert(CAMEL_IS_STORE(store)); g_assert(pthread_self() == mail_gui_thread); - g_assert(storage != NULL || corba_storage != CORBA_OBJECT_NIL); + g_assert(storage == NULL || corba_storage == CORBA_OBJECT_NIL); LOCK(info_lock); diff --git a/mail/mail-format.c b/mail/mail-format.c index ea200f5f30..5d1fa7ad75 100644 --- a/mail/mail-format.c +++ b/mail/mail-format.c @@ -51,64 +51,62 @@ #include "mail-crypto.h" static char *try_inline_pgp (char *start, CamelMimePart *part, - guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + guint offset, MailDisplay *md); static char *try_inline_pgp_sig (char *start, CamelMimePart *part, - guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + guint offset, MailDisplay *md); static char *try_uudecoding (char *start, CamelMimePart *part, - guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + guint offset, MailDisplay *md); static char *try_inline_binhex (char *start, CamelMimePart *part, - guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + guint offset, MailDisplay *md); static gboolean handle_text_plain (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_text_plain_flowed (char *text, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_text_enriched (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_text_html (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_image (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_multipart_mixed (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_multipart_related (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_multipart_alternative (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_multipart_appledouble (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_multipart_encrypted (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_multipart_signed (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_message_rfc822 (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_message_external_body (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); static gboolean handle_via_bonobo (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + MailDisplay *md); /* writes the header info for a mime message into an html stream */ -static void write_headers (CamelMimeMessage *message, MailDisplay *md, - GtkHTML *html, GtkHTMLStream *stream); +static void write_headers (CamelMimeMessage *message, MailDisplay *md); /* dispatch html printing via mimetype */ -static gboolean format_mime_part (CamelMimePart *part, MailDisplay *md, - GtkHTML *html, GtkHTMLStream *stream); +static gboolean format_mime_part (CamelMimePart *part, MailDisplay *md); static void free_url (gpointer key, gpointer value, gpointer data) @@ -156,8 +154,7 @@ add_url (const char *kind, char *url, gpointer data, MailDisplay *md) * Writes a CamelMimeMessage out into a MailDisplay **/ void -mail_format_mime_message (CamelMimeMessage *mime_message, MailDisplay *md, - GtkHTML *html, GtkHTMLStream *stream) +mail_format_mime_message (CamelMimeMessage *mime_message, MailDisplay *md) { GHashTable *hash; @@ -189,8 +186,8 @@ mail_format_mime_message (CamelMimeMessage *mime_message, MailDisplay *md, (GDestroyNotify) g_hash_table_destroy); } - write_headers (mime_message, md, html, stream); - format_mime_part (CAMEL_MIME_PART (mime_message), md, html, stream); + write_headers (mime_message, md); + format_mime_part (CAMEL_MIME_PART (mime_message), md); } @@ -202,33 +199,32 @@ mail_format_mime_message (CamelMimeMessage *mime_message, MailDisplay *md, * Writes a CamelMimeMessage source out into a MailDisplay **/ void -mail_format_raw_message (CamelMimeMessage *mime_message, MailDisplay *md, - GtkHTML *html, GtkHTMLStream *stream) +mail_format_raw_message (CamelMimeMessage *mime_message, MailDisplay *md) { GByteArray *bytes; - char *html_str; + char *html; g_return_if_fail (CAMEL_IS_MIME_MESSAGE (mime_message)); if (!mail_content_loaded (CAMEL_DATA_WRAPPER (mime_message), md, - TRUE, NULL, html, NULL)) + TRUE, NULL, NULL)) return; - mail_html_write (html, stream, + mail_html_write (md->html, md->stream, "
\n"); bytes = mail_format_get_data_wrapper_text (CAMEL_DATA_WRAPPER (mime_message), md); if (bytes) { g_byte_array_append (bytes, "", 1); - html_str = e_text_to_html (bytes->data, E_TEXT_TO_HTML_CONVERT_NL | - E_TEXT_TO_HTML_CONVERT_SPACES | E_TEXT_TO_HTML_ESCAPE_8BIT); + html = e_text_to_html (bytes->data, E_TEXT_TO_HTML_CONVERT_NL | + E_TEXT_TO_HTML_CONVERT_SPACES | E_TEXT_TO_HTML_ESCAPE_8BIT); g_byte_array_free (bytes, TRUE); - mail_html_write (html, stream, html_str); - g_free (html_str); + mail_html_write (md->html, md->stream, html); + g_free (html); } - mail_html_write (html, stream, "
"); + mail_html_write (md->html, md->stream, "
"); } static const char * @@ -617,34 +613,27 @@ mail_part_set_default_displayed_inline (CamelMimePart *part, MailDisplay *md, } static void -attachment_header (CamelMimePart *part, const char *mime_type, MailDisplay *md, - GtkHTML *html, GtkHTMLStream *stream) +attachment_header (CamelMimePart *part, const char *mime_type, MailDisplay *md) { - char *htmlinfo, *html_str, *fmt; + char *htmlinfo, *html, *fmt; const char *info; /* Start the table, create the pop-up object. */ - mail_html_write (html, stream, - "" - ""); - - if (! md->printing) { - gtk_html_stream_printf (stream, "", - get_cid (part, md), mime_type); - } - - mail_html_write (html, stream, - "" - ""); + mail_html_write (md->html, md->stream, ""); } /* order of these must match write_header code */ @@ -900,40 +879,33 @@ default_header_index(const char *name) /* index is index of header in default_headers array */ static void -write_default_header(CamelMimeMessage *message, MailDisplay *md, - GtkHTML *html, GtkHTMLStream *stream, - int index, int flags) +write_default_header(CamelMimeMessage *message, MailDisplay *md, int index, int flags) { switch(index) { case 0: - write_address (md, html, stream, - camel_mime_message_get_from (message), _("From"), flags | WRITE_BOLD); + write_address (md, camel_mime_message_get_from (message), _("From"), flags | WRITE_BOLD); break; case 1: - write_address (md, html, stream, - camel_mime_message_get_reply_to (message), _("Reply-To"), flags | WRITE_BOLD); + write_address (md, camel_mime_message_get_reply_to (message), _("Reply-To"), flags | WRITE_BOLD); break; case 2: - write_address(md, html, stream, - camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_TO), + write_address(md, camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_TO), _("To"), flags | WRITE_BOLD); break; case 3: - write_address (md, html, stream, - camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC), + write_address (md, camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC), _("Cc"), flags | WRITE_BOLD); break; case 4: - write_address (md, html, stream, - camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_BCC), + write_address (md, camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_BCC), _("Bcc"), flags | WRITE_BOLD); break; case 5: write_text_header (_("Subject"), camel_mime_message_get_subject (message), - flags | WRITE_BOLD, html, stream); + flags | WRITE_BOLD, md->html, md->stream); break; case 6: - write_date (message, flags | WRITE_BOLD, html, stream); + write_date (message, flags | WRITE_BOLD, md->html, md->stream); break; default: g_assert_not_reached(); @@ -943,20 +915,17 @@ write_default_header(CamelMimeMessage *message, MailDisplay *md, #define COLOR_IS_LIGHT(r, g, b) ((r + g + b) > (128 * 3)) static void -write_headers (CamelMimeMessage *message, MailDisplay *md, - GtkHTML *html, GtkHTMLStream *stream) +write_headers (CamelMimeMessage *message, MailDisplay *md) { gboolean full = (md->display_style == MAIL_CONFIG_DISPLAY_FULL_HEADERS); char bgcolor[7], fontcolor[7]; GtkStyle *style = NULL; int i; - /* My favorite thing to do... muck around with colors so we respect people's stupid themes. - However, we only do this if we are rendering to the screen -- we ignore the theme - when we are printing. */ - style = gtk_widget_get_style (GTK_WIDGET (html)); - if (style && !md->printing) { - int state = GTK_WIDGET_STATE (GTK_WIDGET (html)); + /* My favorite thing to do...much around with colors so we respect people's stupid themes */ + style = gtk_widget_get_style (GTK_WIDGET (md->html)); + if (style) { + int state = GTK_WIDGET_STATE (GTK_WIDGET (md->html)); gushort r, g, b; r = style->base[state].red / 256; @@ -975,7 +944,7 @@ write_headers (CamelMimeMessage *message, MailDisplay *md, sprintf (bgcolor, "%.2X%.2X%.2X", r, g, b); - r = style->text[state].red / 256; + r = style->text[state].red; g = style->text[state].green / 256; b = style->text[state].blue / 256; @@ -985,7 +954,7 @@ write_headers (CamelMimeMessage *message, MailDisplay *md, strcpy (fontcolor, "000000"); } - gtk_html_stream_printf (stream, + gtk_html_stream_printf (md->stream, "
"); - + gtk_html_stream_printf (md->stream, + "" + "" + "" + "" + "" + mail_html_write (md->html, md->stream, "" "
", + get_cid (part, md), mime_type); /* Write the MIME type */ info = gnome_vfs_mime_get_value (mime_type, "description"); - html_str = e_text_to_html (info ? info : mime_type, 0); - htmlinfo = e_utf8_from_locale_string (html_str); - g_free (html_str); + html = e_text_to_html (info ? info : mime_type, 0); + htmlinfo = e_utf8_from_locale_string (html); + g_free (html); fmt = e_utf8_from_locale_string (_("%s attachment")); - gtk_html_stream_printf (stream, fmt, htmlinfo); + gtk_html_stream_printf (md->stream, fmt, htmlinfo); g_free (htmlinfo); g_free (fmt); @@ -652,48 +641,47 @@ attachment_header (CamelMimePart *part, const char *mime_type, MailDisplay *md, info = camel_mime_part_get_filename (part); if (info) { htmlinfo = e_text_to_html (info, 0); - gtk_html_stream_printf (stream, " (%s)", htmlinfo); + gtk_html_stream_printf (md->stream, " (%s)", htmlinfo); g_free (htmlinfo); } /* Write a description, if we have one. */ info = camel_mime_part_get_description (part); if (info) { - htmlinfo = e_text_to_html (info, md->printing ? 0 : E_TEXT_TO_HTML_CONVERT_URLS); - gtk_html_stream_printf (stream, ", \"%s\"", htmlinfo); + htmlinfo = e_text_to_html (info, E_TEXT_TO_HTML_CONVERT_URLS); + gtk_html_stream_printf (md->stream, ", \"%s\"", htmlinfo); g_free (htmlinfo); } - mail_html_write (html, stream, "
" "
\n"); } static gboolean -format_mime_part (CamelMimePart *part, MailDisplay *md, - GtkHTML *html, GtkHTMLStream *stream) +format_mime_part (CamelMimePart *part, MailDisplay *md) { CamelDataWrapper *wrapper; char *mime_type; MailMimeHandler *handler; gboolean output; int inline_flags; - + /* Record URLs associated with this part */ get_cid (part, md); get_location (part, md); - + wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - + if (CAMEL_IS_MULTIPART (wrapper) && camel_multipart_get_number (CAMEL_MULTIPART (wrapper)) == 0) { char *mesg; mesg = e_utf8_from_locale_string (_("Could not parse MIME message. Displaying as source.")); - mail_error_printf (html, stream, "\n%s\n", mesg); + mail_error_printf (md->html, md->stream, "\n%s\n", mesg); g_free (mesg); - if (mail_content_loaded (wrapper, md, TRUE, NULL, html, NULL)) - handle_text_plain (part, "text/plain", md, html, stream); + if (mail_content_loaded (wrapper, md, TRUE, NULL, NULL)) + handle_text_plain (part, "text/plain", md); return TRUE; } @@ -725,11 +713,11 @@ format_mime_part (CamelMimePart *part, MailDisplay *md, /* No header for anonymous inline parts. */ if (!((inline_flags & I_ACTUALLY) && is_anonymous (part, mime_type))) - attachment_header (part, mime_type, md, html, stream); + attachment_header (part, mime_type, md); if (handler && handler->builtin && inline_flags & I_DISPLAYED && - mail_content_loaded (wrapper, md, TRUE, NULL, html, NULL)) - output = (*handler->builtin) (part, mime_type, md, html, stream); + mail_content_loaded (wrapper, md, TRUE, NULL, NULL)) + output = (*handler->builtin) (part, mime_type, md); else output = TRUE; @@ -786,7 +774,7 @@ static void write_text_header (const char *name, const char *value, int flags, GtkHTML *html, GtkHTMLStream *stream) { char *encoded; - + if (value && *value) encoded = e_text_to_html (value, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_URLS); else @@ -801,8 +789,7 @@ write_text_header (const char *name, const char *value, int flags, GtkHTML *html } static void -write_address (MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream, - const CamelInternetAddress *addr, const char *field_name, int flags) +write_address (MailDisplay *md, const CamelInternetAddress *addr, const char *field_name, int flags) { const char *name, *email; gint i; @@ -810,7 +797,7 @@ write_address (MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream, if (addr == NULL || !camel_internet_address_get (addr, 0, NULL, NULL)) return; - write_field_row_begin (field_name, flags, html, stream); + write_field_row_begin (field_name, flags, md->html, md->stream); i = 0; while (camel_internet_address_get (addr, i, &name, &email)) { @@ -836,7 +823,7 @@ write_address (MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream, } if (i) - mail_html_write (html, stream, ", "); + mail_html_write (md->html, md->stream, ", "); if (have_email || have_name) { if (!have_email) { @@ -844,28 +831,20 @@ write_address (MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream, } if (have_name) { - if (md->printing) { - gtk_html_stream_printf (stream, "%s <%s>", name_disp, email_disp); - } else { - gtk_html_stream_printf (stream, - "%s <%s>", - name_disp, addr_url, email_disp); - } + gtk_html_stream_printf (md->stream, + "%s <%s>", + name_disp, addr_url, email_disp); } else { - if (md->printing) { - mail_html_write (html, stream, email_disp); - } else { - gtk_html_stream_printf (stream, - "%s", - addr_url, email_disp); - } + gtk_html_stream_printf (md->stream, + "%s", + addr_url, email_disp); } } else { char *str; str = e_utf8_from_locale_string (_("Bad Address")); - gtk_html_stream_printf (stream, "%s", str); + gtk_html_stream_printf (md->stream, "%s", str); g_free (str); } @@ -877,7 +856,7 @@ write_address (MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream, i++; } - mail_html_write (html, stream, "
" "" @@ -1011,18 +980,18 @@ write_headers (CamelMimeMessage *message, MailDisplay *md, i = default_header_index(header->name); if (i == -1) { value = header_decode_string(header->value, charset); - write_text_header(header->name, value, WRITE_NOCOLUMNS, html, stream); + write_text_header(header->name, value, WRITE_NOCOLUMNS, md->html, md->stream); g_free(value); } else - write_default_header(message, md, html, stream, i, WRITE_NOCOLUMNS); + write_default_header(message, md, i, WRITE_NOCOLUMNS); header = header->next; } } else { for (i=0;ihtml, md->stream, "
" "
" "
" "
\n"); @@ -1041,17 +1010,16 @@ load_offline_content (MailDisplay *md, gpointer data) } gboolean -mail_content_loaded (CamelDataWrapper *wrapper, MailDisplay *md, gboolean redisplay, const gchar *url, - GtkHTML *html, GtkHTMLStream *handle) +mail_content_loaded (CamelDataWrapper *wrapper, MailDisplay *md, gboolean redisplay, const gchar *url, GtkHTMLStream *handle) { if (!camel_data_wrapper_is_offline (wrapper)) return TRUE; camel_object_ref (CAMEL_OBJECT (wrapper)); if (redisplay) - mail_display_redisplay_when_loaded (md, wrapper, load_offline_content, html, wrapper); + mail_display_redisplay_when_loaded (md, wrapper, load_offline_content, wrapper); else - mail_display_stream_write_when_loaded (md, wrapper, url, load_offline_content, html, handle, wrapper); + mail_display_stream_write_when_loaded (md, wrapper, url, load_offline_content, handle, wrapper); return FALSE; } @@ -1131,9 +1099,9 @@ mail_format_get_data_wrapper_text (CamelDataWrapper *wrapper, MailDisplay *mail_ } static void -write_hr (GtkHTML *html, GtkHTMLStream *stream) +write_hr (MailDisplay *md) { - mail_html_write (html, stream, + mail_html_write (md->html, md->stream, "
" "
\n"); } @@ -1145,7 +1113,7 @@ write_hr (GtkHTML *html, GtkHTMLStream *stream) struct { char *start; char * (*handler) (char *start, CamelMimePart *part, - guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream); + guint offset, MailDisplay *md); } text_specials[] = { { "-----BEGIN PGP MESSAGE-----\n", try_inline_pgp }, { "-----BEGIN PGP SIGNED MESSAGE-----\n", try_inline_pgp_sig }, @@ -1156,23 +1124,23 @@ struct { static int num_specials = (sizeof (text_specials) / sizeof (text_specials[0])); static void -write_one_text_plain_chunk (const char *text, int len, GtkHTML *html, GtkHTMLStream *stream, gboolean printing) +write_one_text_plain_chunk (const char *text, int len, MailDisplay *md) { char *buf; - mail_html_write (html, stream, + mail_html_write (md->html, md->stream, "
\n"); buf = g_strndup (text, len); - mail_text_write (html, stream, printing, buf); + mail_text_write (md->html, md->stream, buf); g_free (buf); - mail_html_write (html, stream, "
\n"); + mail_html_write (md->html, md->stream, "\n"); } static gboolean handle_text_plain (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { CamelDataWrapper *wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); @@ -1191,20 +1159,11 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, text = bytes->data; g_byte_array_free (bytes, FALSE); - /* Check to see if this is a broken text/html part with content-type text/plain */ - start = text; - while (isspace ((unsigned) *start)) - start++; - if (!g_strncasecmp (start, "", 6)) { - g_free (text); - return handle_text_html (part, "text/html", md, html, stream); - } - /* Check for RFC 2646 flowed text. */ type = camel_mime_part_get_content_type (part); format = header_content_type_param (type, "format"); if (format && !g_strcasecmp (format, "flowed")) - return handle_text_plain_flowed (text, md, html, stream); + return handle_text_plain_flowed (text, md); /* Only look for binhex and stuff if this is real text/plain. * (and not, say, application/mac-binhex40 that mail-identify @@ -1226,9 +1185,9 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, /* Deal with special case */ if (start != p) - write_one_text_plain_chunk (p, start - p, html, stream, md->printing); + write_one_text_plain_chunk (p, start - p, md); - p = text_specials[i].handler (start, part, start - text, md, html, stream); + p = text_specials[i].handler (start, part, start - text, md); if (p == start) { /* Oops. That failed. Output this line normally and * skip over it. @@ -1240,13 +1199,13 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, break; } p++; - write_one_text_plain_chunk (start, p - start, html, stream, md->printing); + write_one_text_plain_chunk (start, p - start, md); } else if (p) - write_hr (html, stream); + write_hr (md); } /* Finish up (or do the whole thing if there were no specials). */ if (p) - write_one_text_plain_chunk (p, strlen (p), html, stream, md->printing); + write_one_text_plain_chunk (p, strlen (p), md); g_free (text); @@ -1254,17 +1213,13 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, } static gboolean -handle_text_plain_flowed (char *buf, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) +handle_text_plain_flowed (char *buf, MailDisplay *md) { char *text, *line, *eol, *p; int prevquoting = 0, quoting, len, br_pending = 0; guint32 citation_color = mail_config_get_citation_color (); - - /* When printing, do citations in black -- grey tends to be hard to read. */ - if (md->printing) - citation_color = 0xffffff; - mail_html_write (html, stream, + mail_html_write (md->html, md->stream, "\n\n" "
\n\n"); @@ -1279,20 +1234,20 @@ handle_text_plain_flowed (char *buf, MailDisplay *md, GtkHTML *html, GtkHTMLStre quoting++; if (quoting != prevquoting) { if (prevquoting == 0) { - gtk_html_stream_printf (stream, "", citation_color); + gtk_html_stream_printf (md->stream, "", citation_color); if (br_pending) br_pending--; } while (quoting > prevquoting) { - mail_html_write (html, stream, "
"); + mail_html_write (md->html, md->stream, "
"); prevquoting++; } while (quoting < prevquoting) { - mail_html_write (html, stream, "
"); + mail_html_write (md->html, md->stream, "
"); prevquoting--; } if (quoting == 0) { - mail_html_write (html, stream, "
\n"); + mail_html_write (md->html, md->stream, "
\n"); if (br_pending) br_pending--; } @@ -1307,17 +1262,15 @@ handle_text_plain_flowed (char *buf, MailDisplay *md, GtkHTML *html, GtkHTMLStre } while (br_pending) { - mail_html_write (html, stream, "
\n"); + mail_html_write (md->html, md->stream, "
\n"); br_pending--; } /* replace '<' with '<', etc. */ - text = e_text_to_html (p, - md->printing ? - E_TEXT_TO_HTML_CONVERT_SPACES : - E_TEXT_TO_HTML_CONVERT_SPACES | E_TEXT_TO_HTML_CONVERT_URLS); + text = e_text_to_html (p, E_TEXT_TO_HTML_CONVERT_SPACES | + E_TEXT_TO_HTML_CONVERT_URLS); if (text && *text) - mail_html_write (html, stream, text); + mail_html_write (md->html, md->stream, text); g_free (text); if (p[len - 1] != ' ' || !strcmp (p, "-- ")) @@ -1328,7 +1281,7 @@ handle_text_plain_flowed (char *buf, MailDisplay *md, GtkHTML *html, GtkHTMLStre } g_free (buf); - mail_html_write (html, stream, "
\n
\n"); + mail_html_write (md->html, md->stream, "\n\n"); return TRUE; } @@ -1368,24 +1321,117 @@ destroy_part (CamelObject *root, gpointer event_data, gpointer user_data) static char * try_inline_pgp (char *start, CamelMimePart *mime_part, - guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + guint offset, MailDisplay *md) { - return start; + CamelMimePart *part; + CamelMultipart *multipart; + char *end; + + end = strstr (start, "\n-----END PGP MESSAGE-----\n"); + if (!end) + return start; + + end += sizeof ("\n-----END PGP MESSAGE-----\n") - 1; + + multipart = camel_multipart_new (); + camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (multipart), + "multipart/encrypted; " + "protocol=\"application/pgp-encrypted\"; " + "x-inline-pgp-hack=true"); + + part = fake_mime_part_from_data ("Version: 1\n", + sizeof ("Version: 1\n") - 1, + "application/pgp-encrypted", + offset + 1, md); + camel_multipart_add_part (multipart, part); + camel_object_unref (CAMEL_OBJECT (part)); + + part = fake_mime_part_from_data (start, end - start + 1, + "application/octet-stream", + offset, md); + camel_multipart_add_part (multipart, part); + camel_object_unref (CAMEL_OBJECT (part)); + + part = camel_mime_part_new (); + camel_medium_set_content_object (CAMEL_MEDIUM (part), + CAMEL_DATA_WRAPPER (multipart)); + + camel_object_hook_event (CAMEL_OBJECT (md->current_message), + "finalize", destroy_part, part); + + write_hr (md); + format_mime_part (part, md); + + return end; } static char * try_inline_pgp_sig (char *start, CamelMimePart *mime_part, - guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + guint offset, MailDisplay *md) { - return start; + CamelMimePart *part; + CamelMultipart *multipart; + char *msg_start, *msg_end, *sig_start, *sig_end; + CamelContentType *type; + char *type_str; + + /* We know start points to "-----BEGIN PGP SIGNED MESSAGE-----\n" */ + msg_start = start + sizeof ("-----BEGIN PGP SIGNED MESSAGE-----\n") - 1; + /* Skip 'One or more "Hash" Armor Headers' followed by + * 'Exactly one empty line'. + */ + msg_start = strstr (msg_start, "\n\n"); + if (!msg_start) + return start; + msg_start += 2; + msg_end = strstr (msg_start, "\n-----BEGIN PGP SIGNATURE-----\n"); + if (!msg_end) + return start; + + sig_start = msg_end; + sig_end = strstr (sig_start, "\n-----END PGP SIGNATURE-----\n"); + if (!sig_end) + return start; + sig_end += sizeof ("\n-----END PGP SIGNATURE-----\n") - 1; + + multipart = camel_multipart_new (); + camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (multipart), + "multipart/signed; micalg=pgp-sha1;" + "x-inline-pgp-hack=true"); + + type = camel_mime_part_get_content_type (mime_part); + type_str = header_content_type_format (type); + part = fake_mime_part_from_data (msg_start, msg_end - msg_start, + type_str, offset, md); + g_free (type_str); + camel_multipart_add_part (multipart, part); + camel_object_unref (CAMEL_OBJECT (part)); + + part = fake_mime_part_from_data (sig_start, sig_end - sig_start, + "application/pgp-signature", + offset + 1, md); + camel_multipart_add_part (multipart, part); + camel_object_unref (CAMEL_OBJECT (part)); + + part = camel_mime_part_new (); + camel_medium_set_content_object (CAMEL_MEDIUM (part), + CAMEL_DATA_WRAPPER (multipart)); + + camel_object_hook_event (CAMEL_OBJECT (md->current_message), + "finalize", destroy_part, part); + + write_hr (md); + format_mime_part (part, md); + + return sig_end; } static char * try_uudecoding (char *start, CamelMimePart *mime_part, - guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + guint offset, MailDisplay *md) { - int mode, len, state = CAMEL_UUDECODE_STATE_INIT; - char *filename, *estart, *p, *out; + int mode, len, state = 0; + char *filename, *estart, *p, *out, uulen = 0; guint32 save = 0; CamelMimePart *part; @@ -1411,7 +1457,7 @@ try_uudecoding (char *start, CamelMimePart *mime_part, } out = g_malloc (p - estart); - len = uudecode_step (estart, p - estart, out, &state, &save); + len = uudecode_step (estart, p - estart, out, &state, &save, &uulen); part = fake_mime_part_from_data (out, len, "application/octet-stream", offset, md); @@ -1421,15 +1467,15 @@ try_uudecoding (char *start, CamelMimePart *mime_part, camel_object_hook_event (CAMEL_OBJECT (md->current_message), "finalize", destroy_part, part); - write_hr (html, stream); - format_mime_part (part, md, html, stream); + write_hr (md); + format_mime_part (part, md); return p + 4; } static char * try_inline_binhex (char *start, CamelMimePart *mime_part, - guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + guint offset, MailDisplay *md) { char *p; CamelMimePart *part; @@ -1451,8 +1497,8 @@ try_inline_binhex (char *start, CamelMimePart *mime_part, camel_object_hook_event (CAMEL_OBJECT (md->current_message), "finalize", destroy_part, part); - write_hr (html, stream); - format_mime_part (part, md, html, stream); + write_hr (md); + format_mime_part (part, md); return p; } @@ -1472,7 +1518,7 @@ g_string_append_len (GString *string, const char *str, int len) /* text/enriched (RFC 1896) or text/richtext (included in RFC 1341) */ static gboolean handle_text_enriched (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { static GHashTable *translations = NULL; CamelDataWrapper *wrapper = @@ -1522,11 +1568,11 @@ handle_text_enriched (CamelMimePart *part, const char *mime_type, if (!g_strcasecmp (mime_type, "text/richtext")) { enriched = FALSE; - mail_html_write (html, stream, + mail_html_write (md->html, md->stream, "\n\n"); } else { enriched = TRUE; - mail_html_write (html, stream, + mail_html_write (md->html, md->stream, "\n\n"); } @@ -1620,7 +1666,7 @@ handle_text_enriched (CamelMimePart *part, const char *mime_type, g_string_free (string, TRUE); xed = g_strdup_printf ("x-evolution-data:%p", part); - gtk_html_stream_printf (stream, "", xed); + gtk_html_stream_printf (md->stream, "", xed); add_url ("data_urls", xed, ba, md); return TRUE; @@ -1628,31 +1674,31 @@ handle_text_enriched (CamelMimePart *part, const char *mime_type, static gboolean handle_text_html (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { const char *location; - mail_html_write (html, stream, "\n\n"); + mail_html_write (md->html, md->stream, "\n\n"); /* FIXME: deal with relative URLs */ location = get_location (part, md); if (!location) location = get_cid (part, md); - gtk_html_stream_printf (stream, "", location); + gtk_html_stream_printf (md->stream, "", location); return TRUE; } static gboolean -handle_image (CamelMimePart *part, const char *mime_type, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) +handle_image (CamelMimePart *part, const char *mime_type, MailDisplay *md) { - gtk_html_stream_printf (stream, "", + gtk_html_stream_printf (md->stream, "", get_cid (part, md)); return TRUE; } static gboolean handle_multipart_mixed (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { CamelDataWrapper *wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); @@ -1666,11 +1712,11 @@ handle_multipart_mixed (CamelMimePart *part, const char *mime_type, nparts = camel_multipart_get_number (mp); for (i = 0; i < nparts; i++) { if (i != 0 && output) - write_hr (html, stream); + write_hr (md); part = camel_multipart_get_part (mp, i); - output = format_mime_part (part, md, html, stream); + output = format_mime_part (part, md); } return TRUE; @@ -1678,7 +1724,7 @@ handle_multipart_mixed (CamelMimePart *part, const char *mime_type, static gboolean handle_multipart_encrypted (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { CamelDataWrapper *wrapper; CamelMimePart *mime_part; @@ -1690,7 +1736,7 @@ handle_multipart_encrypted (CamelMimePart *part, const char *mime_type, /* Currently we only handle RFC2015-style PGP encryption. */ if (!camel_pgp_mime_is_rfc2015_encrypted (part)) - return handle_multipart_mixed (part, mime_type, md, html, stream); + return handle_multipart_mixed (part, mime_type, md); camel_exception_init (&ex); mime_part = mail_crypto_pgp_mime_part_decrypt (part, &ex); @@ -1700,7 +1746,7 @@ handle_multipart_encrypted (CamelMimePart *part, const char *mime_type, error = e_utf8_from_locale_string (camel_exception_get_description (&ex)); - mail_error_printf (html, stream, "\n%s\n", error); + mail_error_printf (md->html, md->stream, "\n%s\n", error); g_free (error); camel_exception_clear (&ex); @@ -1712,13 +1758,13 @@ handle_multipart_encrypted (CamelMimePart *part, const char *mime_type, camel_object_unref (CAMEL_OBJECT (mime_part)); /* and continue on our merry way... */ - return format_mime_part (part, md, html, stream); + return format_mime_part (part, md); } } static gboolean handle_multipart_signed (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { CamelMimePart *subpart; CamelDataWrapper *wrapper; @@ -1738,23 +1784,23 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type, nparts = camel_multipart_get_number (mp); for (i = 0; i < nparts - 1; i++) { if (i != 0 && output) - write_hr (html, stream); + write_hr (md); subpart = camel_multipart_get_part (mp, i); - output = format_mime_part (subpart, md, html, stream); + output = format_mime_part (subpart, md); } subpart = camel_multipart_get_part (mp, i); mail_part_set_default_displayed_inline (subpart, md, FALSE); - if (!mail_part_is_displayed_inline (subpart, md) && !md->printing) { + if (!mail_part_is_displayed_inline (subpart, md)) { char *url; /* Write out the click-for-info object */ url = g_strdup_printf ("signature:%p/%lu", subpart, (unsigned long)time (NULL)); - gtk_html_stream_printf (stream, + gtk_html_stream_printf (md->stream, "
" "" @@ -1764,11 +1810,11 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type, "
" "
", url); add_url ("part_urls", url, subpart, md); - mail_html_write (html, stream, + mail_html_write (md->html, md->stream, U_("This message is digitally signed. " "Click the lock icon for more information.")); - mail_html_write (html, stream, + mail_html_write (md->html, md->stream, "
" "
\n"); } else { @@ -1791,7 +1837,7 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type, message = U_("Evolution does not recognize this type of signed message."); if (good) { - gtk_html_stream_printf (stream, + gtk_html_stream_printf (md->stream, "" "" "
%s

", @@ -1799,7 +1845,7 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type, U_("This message is digitally signed and " "has been found to be authentic.")); } else { - gtk_html_stream_printf (stream, + gtk_html_stream_printf (md->stream, "" "" "
%s

", @@ -1809,12 +1855,13 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type, } if (message) { - gtk_html_stream_printf (stream, "", good || md->printing ? "" : "color=red"); - mail_text_write (html, stream, md->printing, message); - mail_html_write (html, stream, ""); + gtk_html_stream_printf (md->stream, "", + good ? "" : "color=red"); + mail_text_write (md->html, md->stream, message); + mail_html_write (md->html, md->stream, ""); } - mail_html_write (html, stream, "
"); + mail_html_write (md->html, md->stream, "
"); camel_exception_clear (&ex); camel_cipher_validity_free (valid); } @@ -1825,7 +1872,7 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type, /* As seen in RFC 2387! */ static gboolean handle_multipart_related (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { CamelDataWrapper *wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); @@ -1869,7 +1916,7 @@ handle_multipart_related (CamelMimePart *part, const char *mime_type, if (!display_part) { /* Oops. Hrmph. */ - return handle_multipart_mixed (part, mime_type, md, html, stream); + return handle_multipart_mixed (part, mime_type, md); } /* Record the Content-ID/Content-Location of any non-displayed parts. */ @@ -1883,7 +1930,7 @@ handle_multipart_related (CamelMimePart *part, const char *mime_type, } /* Now, display the displayed part. */ - return format_mime_part (display_part, md, html, stream); + return format_mime_part (display_part, md); } /* RFC 2046 says "display the last part that you are able to display". */ @@ -1914,7 +1961,7 @@ find_preferred_alternative (CamelMultipart *multipart, gboolean want_plain) static gboolean handle_multipart_alternative (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { CamelDataWrapper *wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); @@ -1927,15 +1974,15 @@ handle_multipart_alternative (CamelMimePart *part, const char *mime_type, mime_part = find_preferred_alternative (multipart, FALSE); if (mime_part) - return format_mime_part (mime_part, md, html, stream); + return format_mime_part (mime_part, md); else - return handle_multipart_mixed (part, mime_type, md, html, stream); + return handle_multipart_mixed (part, mime_type, md); } /* RFC 1740 */ static gboolean handle_multipart_appledouble (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { CamelDataWrapper *wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); @@ -1950,28 +1997,28 @@ handle_multipart_appledouble (CamelMimePart *part, const char *mime_type, * likely it's application/octet-stream though. */ part = camel_multipart_get_part (multipart, 1); - return format_mime_part (part, md, html, stream); + return format_mime_part (part, md); } static gboolean handle_message_rfc822 (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { CamelDataWrapper *wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (wrapper), FALSE); - mail_html_write (html, stream, "
"); - mail_format_mime_message (CAMEL_MIME_MESSAGE (wrapper), md, html, stream); - mail_html_write (html, stream, "
"); + mail_html_write (md->html, md->stream, "
"); + mail_format_mime_message (CAMEL_MIME_MESSAGE (wrapper), md); + mail_html_write (md->html, md->stream, "
"); return TRUE; } static gboolean handle_message_external_body (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { CamelContentType *type; const char *access_type; @@ -2095,14 +2142,11 @@ handle_message_external_body (CamelMimePart *part, const char *mime_type, static gboolean handle_via_bonobo (CamelMimePart *part, const char *mime_type, - MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream) + MailDisplay *md) { - if (! md->printing) { - gtk_html_stream_printf (stream, - "", - get_cid (part, md), mime_type); - } - + gtk_html_stream_printf (md->stream, + "", + get_cid (part, md), mime_type); return TRUE; } @@ -2144,7 +2188,7 @@ mail_get_message_rfc822 (CamelMimeMessage *message, gboolean want_plain, gboolea cia = camel_mime_message_get_from (message); buf = camel_address_format (CAMEL_ADDRESS (cia)); if (buf) { - html = e_text_to_html (buf, E_TEXT_TO_HTML_CONVERT_NL); + html = e_text_to_html (buf, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_URLS); g_string_sprintfa (retval, "%sFrom: %s
", citation, html); g_free (html); @@ -2154,7 +2198,7 @@ mail_get_message_rfc822 (CamelMimeMessage *message, gboolean want_plain, gboolea cia = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO); buf = camel_address_format (CAMEL_ADDRESS (cia)); if (buf) { - html = e_text_to_html (buf, E_TEXT_TO_HTML_CONVERT_NL); + html = e_text_to_html (buf, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_URLS); g_string_sprintfa (retval, "%sTo: %s
", citation, html); g_free (html); @@ -2164,7 +2208,7 @@ mail_get_message_rfc822 (CamelMimeMessage *message, gboolean want_plain, gboolea cia = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC); buf = camel_address_format (CAMEL_ADDRESS (cia)); if (buf) { - html = e_text_to_html (buf, E_TEXT_TO_HTML_CONVERT_NL); + html = e_text_to_html (buf, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_URLS); g_string_sprintfa (retval, "%sCc: %s
", citation, html); g_free (html); @@ -2181,7 +2225,7 @@ mail_get_message_rfc822 (CamelMimeMessage *message, gboolean want_plain, gboolea date_val = camel_mime_message_get_date (message, &offset); buf = header_format_date (date_val, offset); - html = e_text_to_html (buf, E_TEXT_TO_HTML_CONVERT_NL); + html = e_text_to_html (buf, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_URLS); g_string_sprintfa (retval, "%sDate: %s
", citation, html); g_free (html); diff --git a/mail/mail-ops.c b/mail/mail-ops.c index fa43d361f3..9820e855e9 100644 --- a/mail/mail-ops.c +++ b/mail/mail-ops.c @@ -30,7 +30,6 @@ /* #include */ #include -#include #include #include #include @@ -120,14 +119,13 @@ filter_folder_filter (struct _mail_msg *mm) folder_uids = uids = camel_folder_get_uids (folder); camel_filter_driver_filter_folder (m->driver, folder, m->cache, uids, m->delete, &mm->ex); - camel_filter_driver_flush (m->driver, &mm->ex); if (folder_uids) camel_folder_free_uids (folder, folder_uids); - /* sync our source folder */ + /* sync and expunge */ if (!m->cache) - camel_folder_sync (folder, FALSE, camel_exception_is_set (&mm->ex) ? NULL : &mm->ex); + camel_folder_sync (folder, TRUE, camel_exception_is_set (&mm->ex) ? NULL : &mm->ex); camel_folder_thaw (folder); if (m->destination) @@ -177,8 +175,7 @@ static struct _mail_msg_op filter_folder_op = { void mail_filter_folder (CamelFolder *source_folder, GPtrArray *uids, - const char *type, gboolean notify, - CamelOperation *cancel) + const char *type, CamelOperation *cancel) { struct _filter_mail_msg *m; @@ -195,12 +192,6 @@ mail_filter_folder (CamelFolder *source_folder, GPtrArray *uids, m->driver = camel_session_get_filter_driver (session, type, NULL); - if (!notify) { - /* FIXME: have a #define NOTIFY_FILTER_NAME macro? */ - /* the filter name has to stay in sync with mail-session::get_filter_driver */ - camel_filter_driver_remove_rule_by_name (m->driver, "new-mail-notification"); - } - e_thread_put (mail_thread_new, (EMsg *)m); } @@ -208,7 +199,7 @@ mail_filter_folder (CamelFolder *source_folder, GPtrArray *uids, void mail_filter_on_demand (CamelFolder *folder, GPtrArray *uids) { - mail_filter_folder (folder, uids, FILTER_SOURCE_INCOMING, FALSE, NULL); + mail_filter_folder (folder, uids, FILTER_SOURCE_INCOMING, NULL); } /* ********************************************************************** */ @@ -2179,57 +2170,3 @@ mail_store_set_offline (CamelStore *store, gboolean offline, e_thread_put(mail_thread_queued, (EMsg *)m); } - - -/* ** Execute Shell Command ***************************************************** */ - -struct _execute_shell_command_msg { - struct _mail_msg msg; - - char *command; -}; - -static char *execute_shell_command_desc (struct _mail_msg *mm, int done) -{ - struct _execute_shell_command_msg *m = (struct _execute_shell_command_msg *) mm; - char *msg; - - msg = g_strdup_printf (_("Executing shell command: %s"), m->command); - - return msg; -} - -static void execute_shell_command_do (struct _mail_msg *mm) -{ - struct _execute_shell_command_msg *m = (struct _execute_shell_command_msg *) mm; - - gnome_execute_shell (NULL, m->command); -} - -static void execute_shell_command_free (struct _mail_msg *mm) -{ - struct _execute_shell_command_msg *m = (struct _execute_shell_command_msg *) mm; - - g_free (m->command); -} - -static struct _mail_msg_op execute_shell_command_op = { - execute_shell_command_desc, - execute_shell_command_do, - NULL, - execute_shell_command_free, -}; - -void -mail_execute_shell_command (CamelFilterDriver *driver, const char *command, void *data) -{ - struct _execute_shell_command_msg *m; - - if (command == NULL) - return; - - m = mail_msg_new (&execute_shell_command_op, NULL, sizeof (*m)); - m->command = g_strdup (command); - - e_thread_put (mail_thread_queued, (EMsg *) m); -} diff --git a/mail/mail-send-recv.c b/mail/mail-send-recv.c index 3017203e6e..baa4e108e4 100644 --- a/mail/mail-send-recv.c +++ b/mail/mail-send-recv.c @@ -615,14 +615,6 @@ receive_get_folder(CamelFilterDriver *d, const char *uri, void *data, CamelExcep return folder; } -static void -receive_update_got_folderinfo (CamelStore *store, CamelFolderInfo *info, void *data) -{ - if (info) - camel_store_free_folder_info (store, info); - receive_done ("", data); -} - static void receive_update_got_store (char *uri, CamelStore *store, void *data) { @@ -631,17 +623,7 @@ receive_update_got_store (char *uri, CamelStore *store, void *data) if (store) { EvolutionStorage *storage = mail_lookup_storage (store); - if (storage) { - mail_note_store(store, storage, CORBA_OBJECT_NIL, receive_update_done, info); - /*bonobo_object_unref (BONOBO_OBJECT (storage));*/ - } else { - /* If we get here, store must be an external - * storage other than /local. (Eg, Exchange). - * Do a get_folder_info just to force it to - * update itself. - */ - mail_get_folderinfo(store, receive_update_got_folderinfo, info); - } + mail_note_store(store, storage, CORBA_OBJECT_NIL, receive_update_done, info); } else { receive_done ("", info); } diff --git a/mail/main.c b/mail/main.c index b3daea3f99..10497a145d 100644 --- a/mail/main.c +++ b/mail/main.c @@ -103,7 +103,7 @@ main (int argc, char *argv []) gnome_init_with_popt_table ("evolution-mail-component", VERSION, argc, argv, oaf_popt_options, 0, NULL); - + sigaction (SIGSEGV, NULL, &osa); if (osa.sa_handler != SIG_DFL) { sa.sa_flags = 0; @@ -144,8 +144,6 @@ main (int argc, char *argv []) mail_config_init (); mail_msg_init (); - gnome_sound_init ("localhost"); - component_factory_init (); evolution_composer_factory_init (composer_send_cb, composer_postpone_cb); @@ -165,8 +163,6 @@ main (int argc, char *argv []) mail_config_write_on_exit (); e_passwords_shutdown (); - - gnome_sound_shutdown (); - + return 0; } diff --git a/mail/message-list.c b/mail/message-list.c index 4ff1257a60..6aead391f3 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -47,7 +47,6 @@ #include "art/mail-new.xpm" #include "art/mail-read.xpm" #include "art/mail-replied.xpm" -#include "art/mail-need-reply.xpm" #include "art/attachment.xpm" #include "art/priority-high.xpm" #include "art/empty.xpm" @@ -151,7 +150,6 @@ static struct { { score_high_xpm, NULL }, { score_higher_xpm, NULL }, { score_highest_xpm, NULL }, - { mail_need_reply_xpm, NULL }, { NULL, NULL } }; @@ -259,7 +257,7 @@ address_compare (gconstpointer address1, gconstpointer address2) #ifdef SMART_ADDRESS_COMPARE EMailAddress *addr1, *addr2; #endif /* SMART_ADDRESS_COMPARE */ - gint retval; + int retval; g_return_val_if_fail (address1 != NULL, 1); g_return_val_if_fail (address2 != NULL, -1); @@ -407,7 +405,7 @@ message_list_select (MessageList *message_list, } /* If it's -1, we want the last view row, not the last model row. */ - /* model_to_view_row etc simply doesn't work for sorted views. Sigh. */ + /* model_to_view_row etc simply dont work for sorted views. Sigh. */ if (base_row == -1) vrow = e_tree_row_count (message_list->tree) - 1; else @@ -557,7 +555,6 @@ ml_duplicate_value (ETreeModel *etm, int col, const void *value, void *data) { switch (col){ case COL_MESSAGE_STATUS: - case COL_NEED_REPLY: case COL_FLAGGED: case COL_SCORE: case COL_ATTACHMENT: @@ -584,7 +581,6 @@ ml_free_value (ETreeModel *etm, int col, void *value, void *data) { switch (col){ case COL_MESSAGE_STATUS: - case COL_NEED_REPLY: case COL_FLAGGED: case COL_SCORE: case COL_ATTACHMENT: @@ -610,7 +606,6 @@ ml_initialize_value (ETreeModel *etm, int col, void *data) { switch (col){ case COL_MESSAGE_STATUS: - case COL_NEED_REPLY: case COL_FLAGGED: case COL_SCORE: case COL_ATTACHMENT: @@ -637,7 +632,6 @@ ml_value_is_empty (ETreeModel *etm, int col, const void *value, void *data) { switch (col){ case COL_MESSAGE_STATUS: - case COL_NEED_REPLY: case COL_FLAGGED: case COL_SCORE: case COL_ATTACHMENT: @@ -666,11 +660,6 @@ static const char *status_map[] = { N_("Multiple Messages"), }; -static const char *needs_reply_map[] = { - "", - N_("Needs Reply"), -}; - static const char *score_map[] = { N_("Lowest"), N_("Lower"), @@ -693,10 +682,6 @@ ml_value_to_string (ETreeModel *etm, int col, const void *value, void *data) return g_strdup(""); return g_strdup(_(status_map[i])); - case COL_NEED_REPLY: - i = (unsigned int)value; - return g_strdup (_(needs_reply_map[i])); - case COL_SCORE: i = (unsigned int)value + 3; if (i > 6) @@ -837,8 +822,6 @@ ml_tree_value_at (ETreeModel *etm, ETreePath path, int col, void *model_data) return GINT_TO_POINTER (0); break; } - case COL_NEED_REPLY: - return GINT_TO_POINTER ((msg_info->flags & CAMEL_MESSAGE_NEEDS_REPLY) != 0); case COL_FLAGGED: return GINT_TO_POINTER ((msg_info->flags & CAMEL_MESSAGE_FLAGGED) != 0); case COL_SCORE: { @@ -999,7 +982,6 @@ message_list_create_extras (void) e_table_extras_add_pixbuf(extras, "score", states_pixmaps [13].pixbuf); e_table_extras_add_pixbuf(extras, "attachment", states_pixmaps [6].pixbuf); e_table_extras_add_pixbuf(extras, "flagged", states_pixmaps [7].pixbuf); - e_table_extras_add_pixbuf(extras, "needsreply", states_pixmaps [15].pixbuf); e_table_extras_add_compare(extras, "address_compare", address_compare); e_table_extras_add_compare(extras, "subject_compare", subject_compare); @@ -1017,15 +999,11 @@ message_list_create_extras (void) images [1] = states_pixmaps [7].pixbuf; e_table_extras_add_cell(extras, "render_flagged", e_cell_toggle_new (0, 2, images)); - images [1] = states_pixmaps [15].pixbuf; - e_table_extras_add_cell(extras, "render_needs_reply", e_cell_toggle_new (0, 2, images)); - for (i = 0; i < 7; i++) images[i] = states_pixmaps [i + 7].pixbuf; e_table_extras_add_cell(extras, "render_score", e_cell_toggle_new (0, 7, images)); - - + /* date cell */ cell = e_cell_date_new (NULL, GTK_JUSTIFY_LEFT); gtk_object_set (GTK_OBJECT (cell), @@ -2067,8 +2045,6 @@ on_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event, Mess flag = CAMEL_MESSAGE_SEEN; else if (col == COL_FLAGGED) flag = CAMEL_MESSAGE_FLAGGED; - else if (col == COL_NEED_REPLY) - flag = CAMEL_MESSAGE_NEEDS_REPLY; else return FALSE; @@ -2078,19 +2054,14 @@ on_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event, Mess } /* If a message was marked as deleted and the user flags it as - important, marks it as needing a reply, marks it as unread, - then undelete the message. */ + important or marks it as unread, undelete it. */ if (info->flags & CAMEL_MESSAGE_DELETED) { if (col == COL_FLAGGED && !(info->flags & CAMEL_MESSAGE_FLAGGED)) flag |= CAMEL_MESSAGE_DELETED; - if (col == COL_NEED_REPLY && !(info->flags & CAMEL_MESSAGE_NEEDS_REPLY)) - flag |= CAMEL_MESSAGE_DELETED; - if (col == COL_MESSAGE_STATUS && (info->flags & CAMEL_MESSAGE_SEEN)) flag |= CAMEL_MESSAGE_DELETED; - } camel_folder_set_message_flags (list->folder, camel_message_info_uid (info), flag, ~info->flags); -- cgit v1.2.3