aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authornobody <nobody@localhost>2002-01-25 03:01:46 +0800
committernobody <nobody@localhost>2002-01-25 03:01:46 +0800
commit76bbd700763e4b45614df6ad6174fe831ddb932e (patch)
tree46b61771dcad0f9692e7f34c7627f05edb733c6b /mail
parent7c9e80dd308222afbdec1068a925e4800f13dfb5 (diff)
downloadgsoc2013-evolution-EVOLUTION_1_0_2.tar
gsoc2013-evolution-EVOLUTION_1_0_2.tar.gz
gsoc2013-evolution-EVOLUTION_1_0_2.tar.bz2
gsoc2013-evolution-EVOLUTION_1_0_2.tar.lz
gsoc2013-evolution-EVOLUTION_1_0_2.tar.xz
gsoc2013-evolution-EVOLUTION_1_0_2.tar.zst
gsoc2013-evolution-EVOLUTION_1_0_2.zip
This commit was manufactured by cvs2svn to create tagEVOLUTION_1_0_2
'EVOLUTION_1_0_2'. svn path=/tags/EVOLUTION_1_0_2/; revision=15455
Diffstat (limited to 'mail')
-rw-r--r--mail/ChangeLog406
-rw-r--r--mail/folder-browser-ui.c3
-rw-r--r--mail/folder-browser.c150
-rw-r--r--mail/mail-account-gui.c21
-rw-r--r--mail/mail-accounts.c49
-rw-r--r--mail/mail-callbacks.c492
-rw-r--r--mail/mail-callbacks.h29
-rw-r--r--mail/mail-config.c141
-rw-r--r--mail/mail-display.c243
-rw-r--r--mail/mail-folder-cache.c2
-rw-r--r--mail/mail-format.c506
-rw-r--r--mail/mail-ops.c71
-rw-r--r--mail/mail-send-recv.c20
-rw-r--r--mail/main.c8
-rw-r--r--mail/message-list.c37
15 files changed, 650 insertions, 1528 deletions
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 <ettore@ximian.com>
-
- * component-factory.c (create_component): Pass a NULL icon to
- `evolution_shell_component_add_user_creatable_item()'.
-
-2002-01-23 Jeffrey Stedfast <fejj@ximian.com>
-
- 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 <danw@ximian.com>
- * 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 <fejj@ximian.com>
-
- * 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 <fejj@ximian.com>
+ * 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 "<html>", 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 <fejj@ximian.com>
-
- * mail-format.c (try_uudecoding): Update to match new uudecode
- interface (ie, no longer need a uulen state variable).
-
-2002-01-15 Jeffrey Stedfast <fejj@ximian.com>
-
- * 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 <fejj@ximian.com>
-
- * 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 <fejj@ximian.com>
- * 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 <fejj@ximian.com>
* 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 <iain@ximian.com>
-
- * 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 <fejj@ximian.com>
-
- * 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 <fejj@ximian.com>
-
- * mail-callbacks.c (composer_get_message): Add an Organization
- header.
-
-2002-01-02 Jeffrey Stedfast <fejj@ximian.com>
-
- * 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 <jpr@ximian.com>
-
- * mail-callbacks.c: remove e_gnome_dialog util functions and use
- e-util ones instead
-
2001-12-21 Jeffrey Stedfast <fejj@ximian.com>
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 <trow@ximian.com>
+2001-12-21 Jon Trowbridge <trow@ximian.com>
* 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 <ettore@ximian.com>
-
- [Fixes #17377, Evolution doesn't work on multi-depth displays.]
-
- * main.c (main): Push GdkRGB visual and colormap.
-
-2001-12-19 Jeffrey Stedfast <fejj@ximian.com>
-
- * 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 <fejj@ximian.com>
+2001-12-17 Dan Winship <danw@ximian.com>
- * 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 <fejj@ximian.com>
-
- * 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 <trow@ximian.com>
-
- * mail-format.c (handle_text_plain_flowed): Set citation color to
- black when we are printing.
-
- * mail-format.c (attachment_header): Avoid embedding <object> 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 <object> 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 <ettore@ximian.com>
-2001-12-14 Jeffrey Stedfast <fejj@ximian.com>
+ [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 <fejJ@ximian.com>
@@ -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 <fejj@ximian.com>
-
- * 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 <fejj@ximian.com>
-
- * 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 <trow@ximian.com>
-
- * 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 <fejj@ximian.com>
-
- * mail-ops.c (filter_folder_filter): Don't expunge when we sync
- anymore, this fixes bug #4472.
-
2001-12-04 Jeffrey Stedfast <fejj@ximian.com>
* 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 <danw@helixcode.com>
-
- * 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 <ettore@helixcode.com>
-
- * 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 <danw@helixcode.com>
-
- * 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 <danw@helixcode.com>
-
- * 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 <peterw@helixcode.com>
-
- * 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 d<na@wehilcxdo.eoc>m
+
+* 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 <libgnomeui/gnome-dialog-util.h>
#include <gtkhtml/htmlengine.h>
-#include <gtkhtml/htmlobject.h>
-#include <gtkhtml/htmlinterval.h>
#include <gtkhtml/htmlengine-edit-cut-and-paste.h>
#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;i<sum->len;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
@@ -683,31 +683,6 @@ images_radio_toggled (GtkWidget *radio, gpointer data)
}
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)
{
mail_config_set_empty_trash_on_exit (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle)));
@@ -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 <errno.h>
#include <time.h>
#include <libgnome/gnome-paper.h>
+#include <libgnomeui/gnome-dialog.h>
+#include <libgnomeui/gnome-dialog-util.h>
#include <libgnomeui/gnome-stock.h>
#include <libgnome/gnome-paper.h>
#include <libgnomeprint/gnome-print-master.h>
@@ -40,7 +42,6 @@
#include <gal/e-table/e-table.h>
#include <gal/widgets/e-gui-utils.h>
#include <gal/widgets/e-unicode.h>
-#include <e-util/e-dialog-utils.h>
#include <filter/filter-editor.h>
#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");
@@ -1746,25 +1664,6 @@ toggle_as_important (BonoboUIComponent *uih, void *user_data, const char *path)
}
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)
{
FolderBrowser *fb = FOLDER_BROWSER (user_data);
@@ -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. */
-
-/* <evil_code> */
-
-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);
- }
-}
-
-/* </evil_code> */
-
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))
@@ -1041,22 +1032,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, "<tt>", 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,
- "<!doctype html public \"-//W3C//DTD HTML 4.0 TRANSITIONAL//EN\">\n"
- "<html>\n"
- "<head>\n<meta name=\"generator\" content=\"Evolution Mail Component\">\n</head>\n");
- mail_html_write (html, stream, "<body marginwidth=0 marginheight=0>\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, "</body></html>\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, "<!doctype html public \"-//W3C//DTD HTML 4.0 TRANSITIONAL//EN\">\n<html>\n<head>\n<meta name=\"generator\" content=\"Evolution Mail Component\">\n</head>\n");
+ mail_html_write (md->html, md->stream, "<body marginwidth=0 marginheight=0>\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, "</body></html>\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,
"<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td><tt>\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, "</tt></td></tr></table>");
+ mail_html_write (md->html, md->stream, "</tt></td></tr></table>");
}
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,
- "<table cellspacing=0 cellpadding=0>"
- "<tr><td><table width=10 cellspacing=0 cellpadding=0><tr><td></td></tr></table></td>");
-
- if (! md->printing) {
- gtk_html_stream_printf (stream, "<td><object classid=\"popup:%s\" type=\"%s\"></object></td>",
- get_cid (part, md), mime_type);
- }
-
- mail_html_write (html, stream,
- "<td><table width=3 cellspacing=0 cellpadding=0><tr><td></td></tr></table></td>"
- "<td><font size=-1>");
-
+ gtk_html_stream_printf (md->stream,
+ "<table cellspacing=0 cellpadding=0>"
+ "<tr><td><table width=10 cellspacing=0 cellpadding=0><tr><td></td></tr></table></td>"
+ "<td><object classid=\"popup:%s\" type=\"%s\"></object></td>"
+ "<td><table width=3 cellspacing=0 cellpadding=0><tr><td></td></tr></table></td>"
+ "<td><font size=-1>",
+ 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, "</font></td></tr><tr>"
+ mail_html_write (md->html, md->stream, "</font></td></tr><tr>"
"<td height=10><table height=10 cellspacing=0 cellpadding=0>"
"<tr><td></td></tr></table></td></tr></table>\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 &lt;%s&gt;", name_disp, email_disp);
- } else {
- gtk_html_stream_printf (stream,
- "%s &lt;<a href=\"mailto:%s\">%s</a>&gt;",
- name_disp, addr_url, email_disp);
- }
+ gtk_html_stream_printf (md->stream,
+ "%s &lt;<a href=\"mailto:%s\">%s</a>&gt;",
+ name_disp, addr_url, email_disp);
} else {
- if (md->printing) {
- mail_html_write (html, stream, email_disp);
- } else {
- gtk_html_stream_printf (stream,
- "<a href=\"mailto:%s\">%s</a>",
- addr_url, email_disp);
- }
+ gtk_html_stream_printf (md->stream,
+ "<a href=\"mailto:%s\">%s</a>",
+ addr_url, email_disp);
}
} else {
char *str;
str = e_utf8_from_locale_string (_("Bad Address"));
- gtk_html_stream_printf (stream, "<i>%s</i>", str);
+ gtk_html_stream_printf (md->stream, "<i>%s</i>", str);
g_free (str);
}
@@ -877,7 +856,7 @@ write_address (MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream,
i++;
}
- mail_html_write (html, stream, "</td></tr>");
+ mail_html_write (md->html, md->stream, "</td></tr>");
}
/* 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,
"<table width=\"100%%\" cellpadding=0 cellspacing=0>"
"<tr><td colspan=3 height=10><table height=10 cellpadding=0 cellspacing=0>"
"<tr><td></td></tr></table></td></tr>"
@@ -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;i<sizeof(default_headers)/sizeof(default_headers[0]);i++)
- write_default_header(message, md, html, stream, i, 0);
+ write_default_header(message, md, i, 0);
}
- mail_html_write (html, stream,
+ mail_html_write (md->html, md->stream,
"</table></td></tr></table></td></tr></table></font></td>"
"<td><table width=10 cellpadding=0 cellspacing=0><tr><td>"
"</td></tr></table></td></tr></table>\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,
"<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td width=\"100%\">"
"<hr noshadow size=1></td></tr></table>\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,
"<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td>\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, "</td></tr></table>\n");
+ mail_html_write (md->html, md->stream, "</td></tr></table>\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, "<html>", 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<!-- text/plain, flowed -->\n"
"<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td>\n<tt>\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, "<font color=\"#%06x\">", citation_color);
+ gtk_html_stream_printf (md->stream, "<font color=\"#%06x\">", citation_color);
if (br_pending)
br_pending--;
}
while (quoting > prevquoting) {
- mail_html_write (html, stream, "<blockquote>");
+ mail_html_write (md->html, md->stream, "<blockquote>");
prevquoting++;
}
while (quoting < prevquoting) {
- mail_html_write (html, stream, "</blockquote>");
+ mail_html_write (md->html, md->stream, "</blockquote>");
prevquoting--;
}
if (quoting == 0) {
- mail_html_write (html, stream, "</font>\n");
+ mail_html_write (md->html, md->stream, "</font>\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, "<br>\n");
+ mail_html_write (md->html, md->stream, "<br>\n");
br_pending--;
}
/* replace '<' with '&lt;', 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, "</tt>\n</td></tr></table>\n");
+ mail_html_write (md->html, md->stream, "</tt>\n</td></tr></table>\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<!-- text/richtext -->\n");
} else {
enriched = TRUE;
- mail_html_write (html, stream,
+ mail_html_write (md->html, md->stream,
"\n<!-- text/enriched -->\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, "<iframe src=\"%s\" frameborder=0 scrolling=no></iframe>", xed);
+ gtk_html_stream_printf (md->stream, "<iframe src=\"%s\" frameborder=0 scrolling=no></iframe>", 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<!-- text/html -->\n");
+ mail_html_write (md->html, md->stream, "\n<!-- text/html -->\n");
/* FIXME: deal with relative URLs */
location = get_location (part, md);
if (!location)
location = get_cid (part, md);
- gtk_html_stream_printf (stream, "<iframe src=\"%s\" frameborder=0 scrolling=no></iframe>", location);
+ gtk_html_stream_printf (md->stream, "<iframe src=\"%s\" frameborder=0 scrolling=no></iframe>", 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, "<img hspace=10 vspace=10 src=\"%s\">",
+ gtk_html_stream_printf (md->stream, "<img hspace=10 vspace=10 src=\"%s\">",
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,
"<br><table cellspacing=0 cellpadding=0>"
"<tr><td><table width=10 cellspacing=0 cellpadding=0>"
"<tr><td></td></tr></table></td>"
@@ -1764,11 +1810,11 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type,
"<td><font size=-1>", 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,
"</font></td></tr><tr><td height=10><table height=10 cellspacing=0 cellpadding=0>"
"<tr><td></td></tr></table></td></tr></table>\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,
"<table><tr valign=top>"
"<td><img src=\"%s\"></td>"
"<td>%s<br><br>",
@@ -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,
"<table><tr valign=top>"
"<td><img src=\"%s\"></td>"
"<td>%s<br><br>",
@@ -1809,12 +1855,13 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type,
}
if (message) {
- gtk_html_stream_printf (stream, "<font size=-1 %s>", good || md->printing ? "" : "color=red");
- mail_text_write (html, stream, md->printing, message);
- mail_html_write (html, stream, "</font>");
+ gtk_html_stream_printf (md->stream, "<font size=-1 %s>",
+ good ? "" : "color=red");
+ mail_text_write (md->html, md->stream, message);
+ mail_html_write (md->html, md->stream, "</font>");
}
- mail_html_write (html, stream, "</td></tr></table>");
+ mail_html_write (md->html, md->stream, "</td></tr></table>");
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, "<blockquote>");
- mail_format_mime_message (CAMEL_MIME_MESSAGE (wrapper), md, html, stream);
- mail_html_write (html, stream, "</blockquote>");
+ mail_html_write (md->html, md->stream, "<blockquote>");
+ mail_format_mime_message (CAMEL_MIME_MESSAGE (wrapper), md);
+ mail_html_write (md->html, md->stream, "</blockquote>");
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,
- "<object classid=\"%s\" type=\"%s\"></object>",
- get_cid (part, md), mime_type);
- }
-
+ gtk_html_stream_printf (md->stream,
+ "<object classid=\"%s\" type=\"%s\"></object>",
+ 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, "%s<b>From:</b> %s<br>",
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, "%s<b>To:</b> %s<br>",
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, "%s<b>Cc:</b> %s<br>",
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, "%s<b>Date:</b> %s<br>", 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 <ctype.h> */
#include <errno.h>
-#include <gnome.h>
#include <gal/util/e-util.h>
#include <gal/widgets/e-unicode.h>
#include <gal/util/e-unicode-i18n.h>
@@ -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
@@ -616,14 +616,6 @@ receive_get_folder(CamelFilterDriver *d, const char *uri, void *data, CamelExcep
}
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)
{
struct _send_info *info = 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);