From 38c3f87fa2c50a71e095b4767d57ada6ce8867fe Mon Sep 17 00:00:00 2001 From: nobody Date: Mon, 29 May 2000 15:42:50 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'GTKHTML_1_4'. svn path=/tags/GTKHTML_1_4/; revision=3264 --- mail/.cvsignore | 13 - mail/ChangeLog | 1000 ----------------------- mail/GNOME_Evolution_Mail.oaf.in | 54 -- mail/GNOME_Evolution_Mail.oafinfo | 54 -- mail/Mail.idl | 30 - mail/Makefile.am | 111 --- mail/component-factory.c | 196 ----- mail/component-factory.h | 29 - mail/e-attchmt.png | Bin 169 -> 0 bytes mail/evolution-mail.gnorba | 23 - mail/evolution-mail.oafinfo | 54 -- mail/folder-browser-factory.c | 196 ----- mail/folder-browser.c | 425 ---------- mail/folder-browser.h | 62 -- mail/mail-config.c | 1088 ------------------------- mail/mail-display.c | 365 --------- mail/mail-display.h | 54 -- mail/mail-format.c | 1532 ------------------------------------ mail/mail-identify.c | 80 -- mail/mail-ops.c | 607 -------------- mail/mail-sources.c | 771 ------------------ mail/mail-types.h | 39 - mail/mail.h | 62 -- mail/main.c | 83 -- mail/message-list.c | 885 --------------------- mail/message-list.h | 87 -- mail/pixmaps.h | 14 - mail/pixmaps/attachment-header.xpm | 22 - mail/pixmaps/attachment.xpm | 21 - mail/pixmaps/empty.xpm | 21 - mail/pixmaps/envelope-closed.xpm | 65 -- mail/pixmaps/envelope-deleted.xpm | 54 -- mail/pixmaps/envelope-opened.xpm | 74 -- mail/pixmaps/message-status.xpm | 22 - mail/pixmaps/online-status.xpm | 23 - mail/session.c | 62 -- mail/test-mail.c | 103 --- 37 files changed, 8381 deletions(-) delete mode 100644 mail/.cvsignore delete mode 100644 mail/ChangeLog delete mode 100644 mail/GNOME_Evolution_Mail.oaf.in delete mode 100644 mail/GNOME_Evolution_Mail.oafinfo delete mode 100644 mail/Mail.idl delete mode 100644 mail/Makefile.am delete mode 100644 mail/component-factory.c delete mode 100644 mail/component-factory.h delete mode 100644 mail/e-attchmt.png delete mode 100644 mail/evolution-mail.gnorba delete mode 100644 mail/evolution-mail.oafinfo delete mode 100644 mail/folder-browser-factory.c delete mode 100644 mail/folder-browser.c delete mode 100644 mail/folder-browser.h delete mode 100644 mail/mail-config.c delete mode 100644 mail/mail-display.c delete mode 100644 mail/mail-display.h delete mode 100644 mail/mail-format.c delete mode 100644 mail/mail-identify.c delete mode 100644 mail/mail-ops.c delete mode 100644 mail/mail-sources.c delete mode 100644 mail/mail-types.h delete mode 100644 mail/mail.h delete mode 100644 mail/main.c delete mode 100644 mail/message-list.c delete mode 100644 mail/message-list.h delete mode 100644 mail/pixmaps.h delete mode 100644 mail/pixmaps/attachment-header.xpm delete mode 100644 mail/pixmaps/attachment.xpm delete mode 100644 mail/pixmaps/empty.xpm delete mode 100644 mail/pixmaps/envelope-closed.xpm delete mode 100644 mail/pixmaps/envelope-deleted.xpm delete mode 100644 mail/pixmaps/envelope-opened.xpm delete mode 100644 mail/pixmaps/message-status.xpm delete mode 100644 mail/pixmaps/online-status.xpm delete mode 100644 mail/session.c delete mode 100644 mail/test-mail.c (limited to 'mail') diff --git a/mail/.cvsignore b/mail/.cvsignore deleted file mode 100644 index 898d2ab6fc..0000000000 --- a/mail/.cvsignore +++ /dev/null @@ -1,13 +0,0 @@ -.deps -.libs -.pure -Makefile -Makefile.in -Mail-stubs.c -Mail-skels.c -Mail-common.c -Mail.h -evolution-mail -evolution-mail.pure -test-mail -test-sources diff --git a/mail/ChangeLog b/mail/ChangeLog deleted file mode 100644 index f4c9dc1172..0000000000 --- a/mail/ChangeLog +++ /dev/null @@ -1,1000 +0,0 @@ -2000-05-28 Dan Winship - - * mail-config.c (error_dialog): helper function since we need to - set "modal" on the dialogs returned by gnome_error_dialog to make - them work when popped up from the modal Druid. - (service_acceptable): New function to check if the info entered on - a store/transport page actually checks out. - (mail_config_druid): Connect to the "next" signal on the store and - transport pages and don't let the user continue if the data is - bad and "check this before continuing" is checked. Also, only - display sources/transports in the "mail" domain. (Ie, not - "vfolder".) - - * mail-format.c (write_recipients_to_stream): Use `foo@bar' rather - than `' for recipient with no name. - - * mail-ops.c (fetch_mail): don't put up an error message if the - user cancels the password dialog. - -2000-05-27 Not Zed - - * Makefile.am (SHELL_OBJS): Include mail storage so we can - initialise folders. - - * component-factory.c (create_test_storage): Parses vfolder - defintions and adds them to the storage. Definetly needs more - work. - - * folder-browser-factory.c (control_activate): Add the VFolder - druid menu item. - (control_deactivate): And remove it. - - * mail-ops.c (vfolder_editor_clicked): For editing vfolder - definitions (rather like filters, oddly enough :). Tries to - update the shell but it doesn't seem to work properly - requires a - mail component restart to take effect. - - * folder-browser.c (folder_browser_load_folder): Handle vfolder: - urls' appropriately and map to camel. Still needs a way to tell - the vfolder what folders to search! (all vfolders come up empty!). - -2000-05-28 Christopher James Lahey - - * message-list.c, message-list.h: Added a COL_DELETED and made it - the strikeout column for both text renderers. - -2000-05-27 Dan Winship - - * mail-format.c: Various improvements: - - (call_handler_function, etc): Add a "mime_type" argument to the - handlers, so that if a part is tagged as - "application/octet-stream", and we figure out that it's really - something else, the handler we call can know what that something - else is. - - (handle_text_enriched): Small fixes to make this not do - text/enriched-specific syntax in text/richtext or vice versa. - - (handle_mystery): Allow for mystery data that can't even be saved - to disk. (ie, unrecognized external-body). Let the caller specify - the URL to use. - - (handle_message_external_body): New function to deal with - message/external-body parts. Generates URLs for anon-ftp, - local-file, and URL access-types, and a more-useful-than-before - descriptive message for other types. - - (handle_audio, handle_undisplayable): Use gnome_mime_get_value to - try to get a description of the MIME type to display to the user - rather than the raw form. (This will only work if the user has - recent gnome-vfs installed. [If they don't, it works just like - it used to.]) - -2000-05-26 Dan Winship - - * mail-format.c (handle_text_html): Fix a bug (security/stability) - in its usage of mail_html_write. - - * mail-ops.c (composer_send_cb, reply): set CAMEL_MESSAGE_ANSWERED - on a message after a successful reply. - - * message-list.c (folder_changed): free the summary with - camel_folder_free_summary rather than g_ptr_array_free. - - * mail-format.c (handle_via_bonobo): Update for PersistStream - changes - -2000-05-25 Ettore Perazzoli - - * main.c (main): Initialize the component factory. - - * Makefile.am (evolution_mail_LDADD): Link with - `evolution-shell-component.o' from the shell directory. - - * evolution-mail.oafinfo: Updated with the - Evolution::ShellComponent OAFIID. - - * evolution-mail.gnorba: Updated with the - Evolution::ShellComponent GOAD ID. - - * folder-browser-factory.c (folder_browser_factory_new_control): - New function; code moved out from `folder_browser_factory'. - (folder_browser_factory): Use it. - - * component-factory.c: New. - * component-factory.h: New. - -2000-05-24 Dan Winship - - * mail-ops.c (composer_send_cb): connect to and disconnect from - the transport. - -2000-05-24 Christopher James Lahey - - * Makefile.am: Added libepaned.a. - - * folder-browser.c: Switched from GtkPaned to EPaned. - -2000-05-23 Ettore Perazzoli - - * Makefile.am: Don't link to `evolution-service-repository.o' - anymore. - - * folder-browser-factory.c: Don't use crufty service-repository - anymore. - -2000-05-21 Ettore Perazzoli - - * message-list.c (get_message_info): Made static. - (ml_initialize_value): Return NULL to placate compiler. - - * folder-browser.c (folder_browser_gui_init): Add cast. - - * mail-display.c (mail_html_new): Don't pass an empty URL to - `gtk_html_begin()' anymore. - - * mail-config.c (put_html): Don't pass an empty URL to - `gtk_html_begin()' anymore. - - * mail-display.h: Updated for the new GtkHTML API that uses - `GtkHTMLStream *' instead of `GtkHTMLStreamHandle'. - * mail-display.c: Likewise. - * mail-config.c: Likewise. - * mail-format.c: Likewise. - -2000-05-19 NotZed - - * mail-format.c: Fixes for stream stuff. - - * mail-display.c (save_data_cb): Remove exception stuff on streams. - -2000-05-19 Christopher James Lahey - - * message-list.c: Added initialize_value and value_is_empty - callbacks. - -2000-05-18 Dan Winship - - * folder-browser-factory.c (folder_browser_factory): Remove - development_warning (moved to shell) - - * message-list.c (select_msg): Update for camel_folder_get_uids - (folder_changed, message_list_set_folder): Update for - camel_folder_get_summary - - * mail-ops.c (fetch_mail): Update for camel_folder_get_uids - -2000-05-17 Dan Winship - - * mail-component.c: This seems to be cruft. Nuke it. - - * mail-display.c (save_data_cb, save_data, on_url_requested): - * mail-format.c (handle_text_plain_flowed, handle_text_html): - Use camel_data_wrapper_write_to_stream rather than - camel_data_wrapper_get_output_stream. - -2000-05-16 NotZed - - * mail-ops.c (filter_edit): Function to bring up the filter editor. - (filter_druid_clicked): Save/close dialogue. - (fetch_mail): Apply filters to incoming mail ... *hold breath* - If we are coming from a non-indexed/searchable/etc source, then - copy it to an mbox first. When copying mail from an mbox source, - dont remove it aftewards, open it for append, so partially - filtered mail isn't lost. - - * Makefile.am (evolution_mail_LDADD): Added libfilter. - (INCLUDES): Add EVOLUTION_DATADIR, and fix matt's brokeneditor(tm) - for putting spaces instead of tabs in. - -2000-05-16 Christopher James Lahey - - * mail-format.c: Removed usage of bonobo_object_destroy. - -2000-05-14 Christopher James Lahey - - * message-list.c: Updated to work with new ETable resizing. - -2000-05-12 NotZed - - * mail-ops.c (fetch_mail): Use 6 X's to mkstemp, as required by - the man page, just a temp fix, this should probably change to a - known filename. - -2000-05-11 Dan Winship - - * folder-browser-factory.c (control_activate): Now that we depend - on current gnome-libs we can make the toolbar detachable again. - -2000-05-11 Federico Mena Quintero - - * folder-browser-factory.c (development_warning): Left-justify the - message. - -2000-05-10 Christopher James Lahey - - * folder-browser-factory.c (development_warning): Made this dialog - have fewer buttons. - -2000-05-10 Christopher James Lahey - - * folder-browser-factory.c (development_warning): New development - warning text from Nat. - -2000-05-10 Larry Ewing - - * mail-config.c (html_new): only set the default background color - if style is not NULL. - -2000-05-09 Christopher James Lahey - - * Makefile.am: Removed folder-browser-factory.h since it doesn't - exist. Added mail-display.h, mail-types.h, pixmaps.h. - -2000-05-09 Matt Loper - - * folder-browser-factory.c (control_activate): Remove "File->mail" - menuitem. - - * mail-config.c (mail_config_druid): Fill in "blah blah blah". - -2000-05-09 Dan Winship - - * folder-browser.c (folder_browser_load_folder): make this a - little less kludgy. Use gnome_error_dialog rather than printf on - errors. - - * mail-ops.c (fetch_mail): Fix to work with the new shell stuff... - sorta. Will need more fixing later when the new shell framework is - more done. - - * mail-config.c (finish): Call gnome_config_sync so the data - actually gets written. - -2000-05-08 Dan Winship - - * mail-display.c (save_data_cb): - (on_url_requested): Update for CamelStream CamelException changes. - - * mail-format.c: Pass NULL for a CamelException in a bunch of - places... the user will see that the data is not being displayed, - and there's not a lot we can do, and none of these things should - be failing anyway. Maybe fix this later. - -2000-05-07 NotZed - - * message-list.c (ml_value_at): Size moved to message info, rather - than content info structure. - -2000-05-07 Dan Winship - - * message-list.c (select_msg): unref the message after displaying - it. - - * mail-format.c (get_data_wrapper_text): - (handle_text_plain_flowed): - (handle_via_bonobo): Replace camel_stream_close calls. - -2000-05-07 Matt Loper - - * folder-browser-factory.c: Changed a toolbar button from saying - "New mail" (which suggests you might be composing new mail) to - "Get mail". - -2000-05-06 Dan Winship - - * folder-browser-factory.c (folder_browser_factory): Don't - hardcode "inbox" here. - - * folder-browser.c (folder_browser_set_uri): Don't hardcode - "inbox" here either. - (folder_browser_load_folder): Create a new store according to the - folder browser's URI, and load the mbox file from that store. - Parts of this are temporary. - - * session.c, mail.h: There is no longer a global store, just a - global session. - - * mail-config.c, mail-ops.c: Update for default_session -> session - change. fetch_mail is currently broken. - -2000-05-06 Dan Winship - - * mail-config.c: New code to configure identity, mail source, and - mail transport. - (mail_config_druid): A druid using the config widgets. (Only - allows configuration of a single identity, source, and transport.) - - * mail-ops.c (check_configured): New function to make sure the - user has configured stuff, and call the druid if not. - (fetch_mail, send_msg, send_to_url, reply, forward_msg): Call - check_configured - (composer_send_cb): Make this pass the message to a CamelTransport - rather than just printing it to stdout. - - * folder-browser-factory.c (development_warning): Add a warning - about sending mail, since you can do that now. - -2000-05-06 Chris Toshok - - * .cvsignore: ignore evolution-mail.pure - - * Makefile.am: add support for building evolution-mail.pure - -2000-05-06 Dan Winship - - * mail.h: consolidate mail-format.h, mail-identify.h, mail-ops.h, - main.h and session.h into this new file. There's no reason to have - a .h for every .c. - -2000-05-05 Anders Carlsson - - * test-mail.c (create_container): Use the OAFIID when using an - OAF-enabled build of bonobo. - -2000-05-04 NotZed - - * message-list.c (message_list_set_folder): Get the whole message - summary right away. - (folder_changed): And if we change too. - (ml_row_count): Use the match count or summary table length as the - row count. - (get_message_info): Use array references to lookup message summary - info. For the search result list, use the summary_search_cache to - cache the info lookup. - (message_list_init): Allocate the summary search cache. - (message_list_destroy): Free the summary search cache and the - summary table, if there is one to free. - (message_list_set_search): Save the match count, and clear the - summary search cache for reuse. - (folder_changed): Re-retrieve the summary list if the folder has - changed. - (message_list_set_folder): Retrieve the summary list when opening - the folder. - -2000-05-03 Jason Leach - - * Makefile.am (evolution_mail_LDADD): s/-lunicode/$(UNICODE_LIBS)/ - in the LDADD section. - -2000-05-03 Dan Winship - - * mail-format.c (write_recipients_to_stream, write_headers): Make - the "Cc:" field optional again. (Before, we could check if - camel_mime_message_get_recipients returned NULL, but now we need - to actually look into the returned CamelInternetAddress object.) - -2000-05-03 Larry Ewing - - * folder-browser.c (folder_browser_gui_init): comment out the - changed signal for now. - -2000-05-02 Matt Loper - - * Makefile.am: set G_LOG_DOMAIN. - -2000-05-02 Larry Ewing - - * message-list.c (message_list_set_search): only free search if it - is not NULL. - -2000-05-02 NotZed - - * folder-browser.c (folder_browser_gui_init): Connect the changed - signal to search, so it searched immediately? - -2000-05-01 NotZed - - * pixmaps.h: Added envelope-deleted state. - - * folder-browser-factory.c: Setup callback for actual delete op. - (control_activate): Setup a tool menu item to expnge deleted - messages. - - * mail-ops.c (delete_msg): Toggle the delete flag on a message. - (expunge_folder): New function to expunge deleted messages from - the current folder. - - * folder-browser.c (folder_browser_gui_init): A hackish little - quick-search entry. - (search_activate): Perform a quick-search on the folder subject - only. - (folder_browser_gui_init): Add an option meny to the search line. - (create_option_menu): Build the option menu from a table. - (search_set): Build a search from another string whent he option - menu or text item is changed. 5 search options are defined so - far. - - * message-list.c (get_message_info): If there is an active search, - then get the data from that ... use this instead of - _get_message_info(). - (ml_row_count): If we have an active search, get the info from its - result. - (select_msg): Changed to use get_message_info, so searches work. - (ml_value_at): And same here. - (message_list_init_renderers): Added a 3rd state to message_status - = deleted. - (ml_value_at): Show the message state as deleted, if it is marked - for deletion. - (folder_changed): When the folder changes, update the display. - (message_list_set_folder): Connect to the folder_changed event - here. - (message_changed): Callback to update the display when the message - changes. - (select_msg): And connect to the message_changed signal so we know - when it cahgnes. - (message_list_set_search): Save the search string. - (folder_changed): If the folder changes, re-run the search, - otherwise we may end up with invalid entries in the display. - - * mail-display.c: Include missing errno.h. - -2000-04-30 Dan Winship - - * session.c (session_providers_init): This is no longer necessary. - - * mail-ops.c (fetch_mail): Remove kludge to load remote provider, - as camel can do it by itself now. - -2000-04-29 Dan Winship - - * mail-display.c (on_link_clicked): Handle clicks on "cid" URLs by - popping up a "Save Attachment" dialog. - - * mail-format.c (get_cid): if the part has a Content-Disposition - with a filename specified, record (a sanitized version of) that on - the wrapper when creating the cid reference, so the "save - attachment" code can use it later. - (handle_mystery): fix a bug in the cid generation here. - -2000-04-29 Dan Winship - - * mail-format.c (lookup_handler, etc): Improve the builtin vs - bonobo selection code. - (handle_mystery): Include name and Content-Description in the - "mystery data" info, when available - (handle_unknown_type): Call mail_identify_mime_part before - giving up. - (handle_undisplayable): Split out of handle_unknown_type now - that handle_unknown_type can try alternate viewers. - (handle_via_bonobo): Fall back to handle_undisplayable if the - bonobo control fails. - - * mail-identify.c (mail_identify_mime_part): New function to - attempt to identify a MIME part that we can't identify based on - Content-Type alone. - - * mail-display.c (on_url_requested): redo the mystery data icon - display stuff less kludgily. - -2000-04-28 Dan Winship - - * mail-format.c (write_recipients_to_stream, write_headers, - mail_generate_reply): Update (minimally) for Camel recipient - changes. - -2000-04-28 Ettore Perazzoli - - * main.c (init_bonobo): Don't call `init_corba()' and don't get - any args. - (init_corba) [!USING_OAF]: Fix args. - -2000-04-27 Ettore Perazzoli - - * folder-browser-factory.c: New macro `CONTROL_FACTORY_ID', which - is #defined to a different value according to whether we are - `USING_OAF' or not. - (folder_browser_factory_init): Use `CONTROL_FACTORY_ID'. - - * test-mail.c - (init_corba): New helper function, implemented differently - according to `USING_OAF'. - (main): Use `init_corba()'. - - * main.c - (init_corba): New helper function, implemented differently - according to `USING_OAF'. - (init_bonobo): Use `init_corba()'. - - * Makefile.am: Install OAF stuff if `USING_OAF'. Add - `-I$(datadir)/idl' to the `orbit-idl' command-line so that we can - use Bonobo IDL files installed under our prefix as well. Also, - use `$(ORBIT_IDL)' instead of hardcoded `orbit-idl'. - - * evolution-mail.oafinfo: New file. - -2000-04-27 Dan Winship - - * mail-format.c: Move text_to_html to e-util. - - * mail-ops.c (send_to_url): New routine. Thin wrapper for - e_msg_composer_new_from_url. - - * mail-display.c (on_link_clicked): print a warning for news or - nntp URLs (which we'll deal with some day), and call send_to_url - for mailto URLs. - - * mail-format.c (text_to_html): Improve URL conversion code. - Recognize https, recognize "www\..*" without a prefixed "http://". - Properly escape &, <, >, etc in URL strings. Don't be fooled by - "mailto:", "http://", etc with no following data. - -2000-04-26 Dan Winship - - * mail-format.c (text_to_html): Reorganize a bit and add a new - flag, TEXT_TO_HTML_CONVERT_URLS to recognize and wrap URLs - in text. - - * mail-display.c (mail_html_new): Add link_clicked signal handler. - (on_link_clicked): Use gnome_url_show to launch a browser. - - * mail-format.c: update for CamelStream changes. Update for - CamelMimeBodyPart -> CamelMimePart - -2000-04-25 Dan Winship - - * mail-display.c, mail-format.c: Redo large chunks of this. The - mail display now consists of a vbox in a scrolled window, in which - we put multiple GtkHTML objects. This means broken HTML in one - part can't corrupt other parts. The headers now scroll with the - body. Unrecognized attachments look prettier, but still don't do - anything, and will probably be changed later. We can also now - display nested message/rfc822 parts and multipart/alternatives - with multipart subparts. Oh, and text/{richtext,enriched}, since - we had all these ancient sample messages that use it and the lack - of support annoyed me. :) - - Bonobo embeddables are broken right now, but I don't think that's - my fault. - - * mail-format.c (reply_body): Fix some bugs that crept into reply - generation. This needs a lot more work to deal correctly with - complicated bodies. - (setup_function_table): pass unknown text subtypes to - handle_text_plain. - (handle_multipart_appledouble): new handler. Just ignores the - first (application/applefile) part and tries to display the - second part. Since the second part is usually - application/octet-stream, this doesn't work very well still - usually. - (reply_body): Make this deal better with multiparts. - - * mail-format.c, mail-display.c: Now that we're not limited to - a single GtkHTML for the display, there's no reason to embed - Bonobo objects for unrecognized content-types in GtkHTML rather - than embedded them into the vbox directly. So do that. - - Meanwhile, fix up the handler-selection code so that we can - declare which built-in handlers are more desirable than external - handlers and which are less. (Of course, eventually we'll want - this to be customizable.) Add some cleverness to - handle_multipart_alternative as well so it doesn't accept an - alternative which we can display generically over one we can - display specifically. - - * mail-format.c (text_to_html): add a convert_space_hack flag, - which turns N spaces into N-1  s and a space. - (handle_text_plain): Check for "format=flowed" in the - Content-Type. - (handle_text_plain_flowed): Spinoff of handle_text_plain to deal - with RFC 2646 flowed text. (All the examples I can find of it - are generated by Eudora, but it's a pretty cool idea that ought - to be used more widely.) - -2000-04-23 Dan Winship - - * folder-browser-factory.c: rename "send" to "send_msg", to avoid - name clash with the tcp function. Connect the "forward" button. - - * mail-ops.c: rename "send" to "send_msg", to avoid name clash - with the tcp function. Add forward_msg function. - - * mail-format.c (mail_generate_forward): support function for - forward_msg. Pretty much a big kludge right now, pending the - attachment/attachment-bar changes. - -2000-04-22 Dan Winship - - * mail-display.c (on_url_requested): Change cid expectations to - match current camel reality. - - * main.c (main): call glade_gnome_init, for composer. - - * folder-browser-factory.c: move msg_composer_cb and - msg_composer_send_cb to mail-ops. Attach send, reply, and "reply - to all" buttons. - - * mail-ops.c (composer_send_cb, send): moved from - folder-browser-factory.c. - (reply_to_sender, reply_to_all): new functions to do replies. - - * mail-format.c (text_to_html): Add an "add_pre" flag, to make - it wrap the output in
.
-	(mail_generate_reply): New function to create a composer and build
-	a reply in it.
-
-2000-04-21  Dan Winship  
-
-	* mail-display.c (on_url_requested): deal with cid: URLs.
-	(find_cid): helper routine for above. (This could be much better.)
-	(mail_display_init): connect url_requested signal
-
-	* mail-format.c (handle_multipart_related): Make this work.
-
-	* mail-display.c (mail_display_set_message): ref the message we
-	display, since we're going to unref it when we remove it. Fixes a
-	bug that showed up with the new camel code, but it's not obvious
-	if it's due to a bug or a feature in the new code.
-
-2000-04-20  NotZed  
-
-	* Makefile.am (evolution_mail_LDADD): Add libibex.la to link.
-
-	* message-list.h: Removed folder summary.
-
-	* message-list.c: Dont include folder-summary anymore.
-	(select_msg): Changed to use folder, not summary in
-	summary_get_message_info().  God this code is grotty.
-	(ml_value_at): Ditto.
-	(ml_value_at): Changed to use new interface.  Hmm, this returns a
-	static variable, that seems wrong.
-	(message_list_set_folder): Remove folder summary.
-	(ml_row_count): Oops, remove some debug i put there.
-
-2000-04-20  Dan Winship  
-
-	* mail-display.c: update for bonobo change, and remove a
-	now-unused variable.
-
-2000-04-17  Chris Toshok  
-
-	* message-list.c (on_row_selection_idle): new function, actually
-	calls select_msg.
-	(on_row_selection_cmd): register an idle instead of calling
-	select_msg directly.  this fixes the lag before the row is
-	selected - selection is instantaneous now, with message loading
-	happening afterward.
-
-	* message-list.h: add row_to_select and an idle_id to the message
-	list to make the select_msg call happen in an idle func.
-
-	* message-list.c (message_list_init_renderers): no more
-	e_cell_set_editable.  this info always comes from the model.
-
-2000-04-14  Dan Winship  
-
-	* mail-format.[ch]: Moved from camel/camel-formatter, and changed
-	slightly. (More to come.)
-
-	* html-stream.[ch]: No longer necessary. mail-format uses
-	GtkHTMLStreamHandles directly.
-
-	* mail-display.[ch]: update for new message formatting code.
-
-2000-04-14  Chris Toshok  
-
-	* folder-browser-factory.c (control_activate): use
-	gnome_app_fill_toolbar_with_data, so we get the beautiful gnome
-	toolbar.
-
-2000-04-14  Dan Winship  
-
-	* folder-browser-factory.c (development_warning): Fix up the
-	warning message a bit.
-	(folder_browser_factory): Make the warning bypassable.
-
-2000-04-12  Miguel de Icaza  
-
-	* main.c (main): Call e_cursors_init.
-
-2000-04-10  Dan Winship  
-
-	* mail-ops.c (fetch_mail): use camel_movemail when fetching mail
-	from an mbox store. This leaves behind temp files for now,
-	because CamelMboxFolder::delete is too confused to use, and NotZed
-	is rewriting CamelMboxFolder, so I'm not going to bother to try to
-	fix it.
-
-	* mail-ops.c: Add some #includes for the non-HAVE_MKSTEMP case
-
-2000-04-09  Matt Loper  
-
-	* folder-browser.c (folder_browser_new): set folder_browser->uri
-	to NULL, so that we know when to free it.
-
-2000-04-07  Miguel de Icaza  
-
-	* message-list.c (states_pixmaps): Add more beautiful art from
-	Miggue, the Diego Rivera of the next millenium.
-	(message_list_init_header): Use the beautiful art.
-
-	* pixmaps: Miguel rediscovers the "transparent" concept.
-
-2000-04-07  Matt Loper  
-
-	* folder-browser.c (folder_browser_destroy): Unref the shell
-	interface that we have a handle to.
-
-	* folder-browser-factory.c (control_destroy_cb): New function;
-	destroys a folder-browser when its control is destroyed.
-	(folder_browser_factory): Hook up to the above.
-
-2000-04-07  Dan Winship  
-
-	* mail-ops.c: new file, for toolbar/menu callbacks
-	(fetch_mail): fetch mail. Doesn't do mbox locking. Many kludges.
-
-	* folder-browser-factory.c (control_activate): use new fetch_mail
-	function as the callback for the "New mail" icon. Rename check_cb
-	to random_cb.
-
-	* Makefile.am: don't build test-sources since the version in
-	CVS doesn't do much and once I've fixed it it won't be a separate
-	program. Add mail-ops.[ch].
-
-2000-04-06  Miguel de Icaza  
-
-	* message-list.c: Stick pixmaps here.
-
-	* mail-display.c (embeddable_destroy_cb): Replaced C++ comments
-	with C comments.
-
-	* message-list.c (load_internal_images): New function, loads images.
-	(message_list_init_renderers): Load images, fix previous attempt
-	at loading images. 
-
-	* Makefile.am (dist-hook): Added distribution of pixmaps.
-
-	* pixmaps: New directory, used to hold the XPMs we ship with. 
-
-	* pixmaps/envelope-closed.xpm, pixmaps/envelope-open.xpm: Tigert's
-	envelopes incorporated.
-
-2000-03-31  Miguel de Icaza  
-
-	* message-list.c (ml_value_at): Fix miss-used variable. 
-
-2000-04-01  Michael Meeks  
-
-	* folder-browser.c (folder_browser_properties_init): update to
-	new property  (folder_browser_property_changed): kill.
-	(get_prop, set_prop): do the donkey work + make properly RW.
-
-2000-03-31  Dan Winship  
-
-	* folder-browser-factory.c (folder_browser_set_shell):
-	* folder-browser.c (folder_browser_new):
-	* message-list.c (on_row_selection_cmd, select_msg,
-	message_list_init, message_list_set_folder):
-
-	remove debugging printf()s that no longer seem useful
-
-2000-03-29  Dan Winship  
-
-	* folder-browser-factory.c (control_activate): build a toolbar.
-	(control_deactivate): and hide it.
-
-2000-03-27  Chris Toshok 
-	* mail-display.c: quiet warnings when building in ../po
-
-2000-03-26  Miguel de Icaza  
-
-	* folder-browser-factory.c (folder_browser_set_shell): Memory leak
-	fix. 
-
-2000-03-25  Dan Winship  
-
-	* message-list.c (select_msg, ml_value_at): update for summary
-	changes. Hey, neat, it really does make it more efficient.
-
-2000-03-22  Christopher James Lahey  
-
-	* .cvsignore: Updated .cvsignore.
-
-2000-03-21  Matt Loper  
-
-	* mail-display.c: Minor cleanup & commenting.
-
-	* folder-browser-factory.c: Minor cleanup & warning elimination.
-
-2000-03-21  bertrand  
-
-	* message-list.c (ml_value_at): display message size
-
-2000-03-20  Christopher James Lahey  
-
-	* message-list.c: Properly ref & sink the table and header models.
-
-2000-03-14  Dan Winship  
-
-	* mail-sources.c: First cut at a mail source selection wizard.
-	Basically a rigged demo at this point. Doesn't use camel to get
-	its information, and is not yet complete or integrated with the
-	mail component. Did I mention that the code is ugly?
-
-2000-03-13  bertrand  
-
-	* folder-browser-factory.c (folder_browser_set_shell): 
-	for testing and demonstration purpose, immediately 
-	register a fake service.
-
-2000-03-12  bertrand  
-
-	* folder-browser-factory.c (folder_browser_factory_init): 
-	name change.
-	(control_activate_cb): when the control is activated, 
-	it merges its own UI with the remote UIHandler.
-	(control_add_menu): sample menu merging.
-	(folder_browser_factory): connect the control "activate" signal.
-
-	* evolution-mail.gnorba: 
-	name changes
-
-	* folder-browser.h: added a reference to an 
-	Evolution::Shell object. 
-
-	* folder-browser-factory.c (folder_browser_set_shell): 
-	(folder_browser_control_add_service_repository_interface): 
-	(folder_browser_factory): the folder-browser control now
-	implements the Evolution/ServiceRepository interface.
-
-2000-03-07  bertrand  
-
-	* folder-browser-factory.c (development_warning): 
-	added a warning so that the user knows that this 
-	version may crash his mails.
-
-2000-03-05  bertrand  
-
-	* message-list.h: include a referrence to the parent 
-	folder browser.
-
-	* message-list.c (ml_value_at): use the message summary 
-	from the 
-
-	* html-stream.c (html_stream_close): when the stream 
-	is closed, set the html stream to NULL
-	(html_stream_write): don't write anything if the 
-	html handle does not exist. 
-	(html_stream_reset): implemented. close the current 
-	html handle and begins a new html parser. 
-
-	* session.c (session_store_new): use static exception
-	here. 
-
-2000-03-05  Christopher James Lahey  
-
-	* message-list.c: Added a prototype message listing.
-
-2000-03-04  Christopher James Lahey  
-
-	* message-list.c: Set up the column headers properly.
-
-	* folder-browser.c: Show the folder_browser widget.
-
-2000-03-04  Christopher James Lahey  
-
-	* message-list.c: Define ml_duplicate_value and ml_free_value
-	correctly.
-	
-2000-03-04  Christopher James Lahey  
-
-	* message-list.c: Use g_int_compare and g_str_compare as we should
-	be instead of g_int_equal and g_str_equal.
-	
-2000-03-04  bertrand  
-
-	* test-mail.c (main): replace the bonobo-active/gtk-main
-	by bonobo-main.
-	Include Gnorba headers.
-	(main): don't call the container creation routine 
-	before we entered the main loop. Use idle for that.
-
-2000-03-04  Christopher James Lahey  
-
-	* message-list.c: Change this to use the ETable widget itself
-	instead of building it from all the parts.
-
-2000-03-03  Christopher James Lahey  
-
-	* message-list.c: Ref the table columns since we unref them at the
-	end.
-
-2000-03-01  Ettore Perazzoli  
-
-	* Makefile.am (INCLUDES): Add `$(top_srcdir)'.  Also, the
-	`top_srcdir' includes must come first everything else to avoid
-	including installed headers instead of our fresh ones.
-
-2000-02-28  NotZed  
-
-	* Makefile.am (evolution_mail_LDADD): Fixed references to eutil.
-
-2000-02-24  Christopher James Lahey  
-
-	* message-list.c: Changed to match new e_table_simple interface.
-
-2000-02-24  Dan Winship  
-
-	* message-list.c (message_list_set_folder): update for CamelFolder
-	changes
-
-2000-02-24  Christopher James Lahey  
-
-	* message-list.c: Changed this to not use the "x" and "y"
-	arguments to e-table-item.
-
-2000-02-23  Matt Loper  
-
-	* message-list.c (message_list_set_folder): Check 'desc'riptions
-	of exceptions.
-
-2000-02-22  bertrand  
-
-	* message-list.c (message_list_set_folder): 
-	fix to show a sample correct implementation. 
-
-2000-02-21  Matt Loper  
-
-	* Makefile.am: added -lunicode to evolution_mail_LDADD.
-
-2000-02-21  Dan Winship  
-
-	* session.c (session_store_new): Pass a CamelAuthCallback
-	(evolution_auth_callback) to camel_session_new.
-	
-2000-02-21  Dan Winship  
-
-	* session.c (session_store_new): Update session_store_new to
-	deal with the fact that camel_session_get_store takes a
-	CamelException now. Doesn't actually do anything with the
-	exception yet, because nothing else does yet either.
-
-2000-02-19  Matt Loper  
-
-	* .cvsignore: added test-mail.
-
-2000-02-14  Miguel de Icaza  
-
-	* folder-browser.c (folder_browser_load_folder): New routine,
-	loads a camel folder.
-	(folder_browser_set_uri): redo.
-
-	* session.c: new file.  Implements SessionStores to keep track of
-	a Session/Store tuple.  
-
-2000-02-13  Matt Loper  
-
-	* html-stream.c (html_stream_new): Second param of gtk_html_begin
-	should be "", not NULL.
-	(html_stream_new): gtk_html_parse() is deprecated, so the call was
-	removed.
-
-	* html-stream.h: HTMLStreamClass's parent changed to
-	CamelStreamClass, not CamelStream.
-
-2000-02-11  Christopher James Lahey  
-
-	* Makefile.am: Add the e-text directory to the includes list.
-
-	* message-list.c: Change the call to e_cell_text_new, since
-	there's an added argument.
-
-2000-02-09  Christopher James Lahey  
-
-	* Makefile.am: Added libetext as libetable depends on it.
-
-2000-02-08  Iain Holmes  
-
-	* Makefile.am: Changed the order of the compilation so the CORBA stuff
-	was made before it was needed.
-
-2000-01-19  Miguel de Icaza  
-
-	* Started work on the mail display engine.
-
-	* html-stream.c, html-stream.h: New files, they are CamelStreams
-	used to write to the GtkHTML widget. 
-
diff --git a/mail/GNOME_Evolution_Mail.oaf.in b/mail/GNOME_Evolution_Mail.oaf.in
deleted file mode 100644
index 2be622f3f6..0000000000
--- a/mail/GNOME_Evolution_Mail.oaf.in
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-	
-		
-		
-	
-
-	
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
diff --git a/mail/GNOME_Evolution_Mail.oafinfo b/mail/GNOME_Evolution_Mail.oafinfo
deleted file mode 100644
index 2be622f3f6..0000000000
--- a/mail/GNOME_Evolution_Mail.oafinfo
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-	
-		
-		
-	
-
-	
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
diff --git a/mail/Mail.idl b/mail/Mail.idl
deleted file mode 100644
index 1d12a39c5c..0000000000
--- a/mail/Mail.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * mail.idl: Mail interfaces for Evolution
- *
- * Author:
- *   Miguel de Icaza (miguel@helixcode.com)
- * 
- * (C) 2000 Helix Code, Inc.
- */
-
-#include 
-
-module Evolution {
-	
-	interface MessageList : Bonobo::Unknown {
-		
-		void select_message (in long message_number);
-		void open_message   (in long message_number);
-	};
-	
-	/*
-	 * FolderBrowser object.
-	 *
-	 * configuration of this widget is done trough 
-	 * Bonobo Properties
-	 */
-	interface FolderBrowser : Bonobo::Unknown {
-		MessageList get_message_list ();
-	};
-};
-
diff --git a/mail/Makefile.am b/mail/Makefile.am
deleted file mode 100644
index 2c3bb34251..0000000000
--- a/mail/Makefile.am
+++ /dev/null
@@ -1,111 +0,0 @@
-bin_PROGRAMS =	evolution-mail test-mail
-
-providerdir = $(libdir)/evolution/camel-providers/$(VERSION)
-
-#imagesdir = $(datadir)/images/evolution
-#images_DATA = e-attchmt.png
-#EXTRA_DIST = $(image_DATA)
-
-INCLUDES = \
-	-I$(top_srcdir)/widgets				\
-	-I$(top_srcdir)/widgets/e-text			\
-	-I$(top_srcdir)					\
-	-I$(top_srcdir)/camel				\
-	-I$(top_builddir)/shell				\
-	-I$(top_srcdir)/shell				\
-	$(BONOBO_HTML_GNOME_CFLAGS)			\
-	-DEVOLUTION_VERSION=\""$(VERSION)"\"		\
-	-DEVOLUTION_GLADEDIR=\""$(gladedir)"\"		\
-	-DEVOLUTION_ICONSDIR=\""$(iconsdir)"\"		\
-	-DEVOLUTION_LOCALEDIR=\""$(datadir)/locale"\"	\
-	-DEVOLUTION_DATADIR=\""$(datadir)"\"            \
-	-DCAMEL_PROVIDERDIR=\""$(providerdir)"\"	\
-	-DG_LOG_DOMAIN=\"evolution-mail\"
-
-EVOLUTION_MAIL_CORBA_GENERATED = \
-	Mail.h			\
-	Mail-common.c		\
-	Mail-skels.c		\
-	Mail-stubs.c
-
-# FIXME We should make a libeshell library instead of this gross hack.
-SHELL_OBJS =					\
-	$(top_builddir)/shell/Evolution-common.o \
-	$(top_builddir)/shell/Evolution-stubs.o	\
-	$(top_builddir)/shell/Evolution-skels.o	\
-	$(top_builddir)/shell/evolution-shell-component.o \
-	$(top_builddir)/shell/evolution-storage.o
-
-evolution_mail_SOURCES =		\
-	$(EVOLUTION_MAIL_CORBA_GENERATED)	\
-	component-factory.c		\
-	component-factory.h		\
-	folder-browser.c		\
-	folder-browser.h		\
-	folder-browser-factory.c	\
-	mail-config.c			\
-	mail-display.c			\
-	mail-display.h			\
-	mail-format.c			\
-	mail-identify.c			\
-	mail-ops.c			\
-	mail-types.h			\
-	main.c				\
-	message-list.c			\
-	message-list.h			\
-	session.c			\
-	mail.h				\
-	pixmaps.h
-
-
-evolution_mail_LDADD = 					\
-	$(SHELL_OBJS)					\
-	../composer/libcomposer.la		 	\
-	$(top_builddir)/widgets/e-paned/libepaned.a	\
-	../widgets/e-table/libetable.a			\
-	../widgets/e-text/libetext.a			\
-	../camel/libcamel.la				\
-	../e-util/libeutil.la				\
-	../libibex/libibex.la				\
-	../filter/libfilter.la				\
-	$(BONOBO_HTML_GNOME_LIBS)			\
-	$(UNICODE_LIBS)
-
-test_mail_SOURCES = \
-	test-mail.c
-
-test_mail_LDADD = \
-	$(BONOBO_HTML_GNOME_LIBS)
-
-
-GOAD_FILES = evolution-mail.gnorba
-OAF_FILES = evolution-mail.oafinfo
-
-if USING_OAF
-oafdir = $(datadir)/oaf
-oaf_DATA = $(OAF_FILES)
-else
-gnorbadir = $(sysconfdir)/CORBA/servers
-gnorba_DATA = $(GOAD_FILES)
-endif
-
-$(EVOLUTION_MAIL_CORBA_GENERATED): Mail.idl 
-	$(ORBIT_IDL) -I$(datadir)/idl -I`$(GNOME_CONFIG) --datadir`/idl -I$(srcdir) $(srcdir)/Mail.idl
-
-EXTRA_DIST = Mail.idl $(GOAD_FILES) $(OAF_FILES)
-
-dist-hook:
-	-mkdir $(distdir)/pixmaps
-	cp $(srcdir)/pixmaps/*.xpm $(distdir)/pixmaps
-
-if ENABLE_PURIFY
-PLINK = $(LIBTOOL) --mode=link $(PURIFY) $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-
-all-local: evolution-mail.pure
-
-evolution-mail.pure: evolution-mail
-	@rm -f evolution-mail.pure
-	$(PLINK) $(evolution_mail_LDFLAGS) $(evolution_mail_OBJECTS) $(evolution_mail_LDADD) $(LIBS)
-
-endif
-
diff --git a/mail/component-factory.c b/mail/component-factory.c
deleted file mode 100644
index 749fc3c080..0000000000
--- a/mail/component-factory.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* component-factory.c
- *
- * Copyright (C) 2000  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include 
-#endif
-
-#include 
-
-#include "Evolution.h"
-#include "evolution-storage.h"
-
-#include "evolution-shell-component.h"
-#include "folder-browser.h"
-#include "mail.h"		/* YUCK FIXME */
-
-#include "filter/filter-driver.h"
-#include "component-factory.h"
-
-static void create_test_storage (EvolutionShellComponent *shell_component);
-
-
-#ifdef USING_OAF
-#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6"
-#else
-#define COMPONENT_FACTORY_ID "evolution-shell-component-factory:evolution-mail"
-#endif
-
-static BonoboGenericFactory *factory = NULL;
-
-static const EvolutionShellComponentFolderType folder_types[] = {
-	{ "mail", "evolution-inbox.png" },
-	{ NULL, NULL }
-};
-
-
-/* EvolutionShellComponent methods and signals.  */
-
-static BonoboControl *
-create_view (EvolutionShellComponent *shell_component,
-	     const char *physical_uri,
-	     void *closure)
-{
-	BonoboControl *control;
-	GtkWidget *folder_browser_widget;
-
-	control = folder_browser_factory_new_control ();
-
-	folder_browser_widget = bonobo_control_get_widget (control);
-
-	g_assert (folder_browser_widget != NULL);
-	g_assert (IS_FOLDER_BROWSER (folder_browser_widget));
-
-	/* dum de dum, hack to let the folder browser know the storage its in */
-	gtk_object_set_data((GtkObject *)folder_browser_widget, "e-storage",
-			    gtk_object_get_data((GtkObject *)shell_component, "e-storage"));
-
-	/* FIXME: This never fails.  :-/  */
-	folder_browser_set_uri (FOLDER_BROWSER (folder_browser_widget), physical_uri);
-
-	return control;
-}
-
-static void
-owner_set_cb (EvolutionShellComponent *shell_component,
-	      Evolution_Shell shell_interface)
-{
-	g_print ("evolution-mail: Yeeeh! We have an owner!\n");	/* FIXME */
-
-	create_test_storage (shell_component);
-}
-
-
-/* The factory function.  */
-
-static BonoboObject *
-factory_fn (BonoboGenericFactory *factory,
-	    void *closure)
-{
-	EvolutionShellComponent *shell_component;
-
-	shell_component = evolution_shell_component_new (folder_types, create_view, NULL);
-
-	gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set",
-			    GTK_SIGNAL_FUNC (owner_set_cb), NULL);
-
-	return BONOBO_OBJECT (shell_component);
-}
-
-
-void
-component_factory_init (void)
-{
-	if (factory != NULL)
-		return;
-
-	factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, factory_fn, NULL);
-
-	if (factory == NULL) {
-		e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
-			  _("Cannot initialize Evolution's mail component."));
-		exit (1);
-	}
-}
-
-static void
-create_test_storage (EvolutionShellComponent *shell_component)
-{
-	Evolution_Shell corba_shell;
-	EvolutionStorage *storage;
-	
-	corba_shell = evolution_shell_component_get_owner (shell_component);
-	if (corba_shell == CORBA_OBJECT_NIL) {
-		g_warning ("We have no shell!?");
-		return;
-	}
-    
-	storage = evolution_storage_new ("storage_name");
-	if (evolution_storage_register_on_shell (storage, corba_shell)
-	    != EVOLUTION_STORAGE_OK) {
-		g_warning ("Cannot register storage");
-		return;
-	}
-
-	/* save the storage for later */
-	gtk_object_set_data((GtkObject *)shell_component, "e-storage", storage);
-
-	/* this is totally not the way we want to do this - but the
-	   filter stuff needs work before we can remove it */
-	{
-		FilterDriver *fe;
-		int i, count;
-		char *user, *system;
-		extern char *evolution_dir;
-
-		fe = filter_driver_new();
-		user = g_strdup_printf ("%s/vfolders.xml", evolution_dir);
-		system = g_strdup_printf("%s/evolution/vfoldertypes.xml", EVOLUTION_DATADIR);
-		filter_driver_set_rules(fe, system, user);
-		g_free(user);
-		g_free(system);
-		count = filter_driver_rule_count(fe);
-		for (i=0;idescription)
-				desc = fo->description->data;
-			if (desc)
-				desctext = desc->data;
-			else {
-				sprintf(descunknown, "volder-%p", fo);
-				desctext = descunknown;
-			}
-			g_string_sprintf(query, "vfolder:/%s/vfolder/%s?", evolution_dir, desctext);
-			filter_driver_expand_option(fe, query, NULL, fo);
-			name = g_strdup_printf("/%s", desctext);
-			printf("Adding new vfolder: %s\n", query->str);
-			evolution_storage_new_folder (storage, name,
-						      "mail",
-						      query->str,
-						      name+1);
-			g_string_free(query, TRUE);
-			g_free(name);
-		}
-		gtk_object_unref((GtkObject *)fe);
-	}
-}
-
diff --git a/mail/component-factory.h b/mail/component-factory.h
deleted file mode 100644
index 1f5a33f407..0000000000
--- a/mail/component-factory.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* component-factory.h
- *
- * Copyright (C) 2000  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef COMPONENT_FACTORY_H
-#define COMPONENT_FACTORY_H
-
-void  component_factory_init  (void);
-
-#endif
diff --git a/mail/e-attchmt.png b/mail/e-attchmt.png
deleted file mode 100644
index b4bac8db67..0000000000
Binary files a/mail/e-attchmt.png and /dev/null differ
diff --git a/mail/evolution-mail.gnorba b/mail/evolution-mail.gnorba
deleted file mode 100644
index b799a57aa2..0000000000
--- a/mail/evolution-mail.gnorba
+++ /dev/null
@@ -1,23 +0,0 @@
-[control-factory:evolution-mail]
-type=exe
-repo_id=IDL:GNOME/GenericFactory:1.0
-description=Evolution mail folder factory component.
-location_info=evolution-mail
-
-[control:evolution-mail]
-type=factory
-repo_id=IDL:BonoboControl/evolution-mail:1.0 IDL:GNOME/Control:1.0
-description=Evolution mail folder display component.
-location_info=control-factory:evolution-mail
-
-[evolution-shell-component-factory:evolution-mail]
-type=exe
-repo_id=IDL:GNOME/GenericFactory:1.0
-description=Factory for the Evolution mail component.
-location_info=evolution-mail
-
-[evolution-shell-component:evolution-mail]
-type=factory
-repo_id=IDL:Evolution/ShellComponent:1.0
-description=Evolution component for handling mail.
-location_info=evolution-shell-component-factory:evolution-mail
diff --git a/mail/evolution-mail.oafinfo b/mail/evolution-mail.oafinfo
deleted file mode 100644
index 2be622f3f6..0000000000
--- a/mail/evolution-mail.oafinfo
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-	
-		
-		
-	
-
-	
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
diff --git a/mail/folder-browser-factory.c b/mail/folder-browser-factory.c
deleted file mode 100644
index 2be6a06179..0000000000
--- a/mail/folder-browser-factory.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * folder-browser-factory.c: A Bonobo Control factory for Folder Browsers
- *
- * Author:
- *   Miguel de Icaza (miguel@helixcode.com)
- *
- * (C) 2000 Helix Code, Inc.
- */
-#include 
-#include 
-#include 
-#include 
-#include 
-#include  
-#include "e-util/e-util.h"
-#include "e-util/e-gui-utils.h"
-#include "folder-browser.h"
-#include "mail.h"
-#include "shell/Evolution.h"
-
-#ifdef USING_OAF
-#define CONTROL_FACTORY_ID "OAFIID:control-factory:evolution-mail:25902062-543b-4f44-8702-d90145fcdbf2"
-#else
-#define CONTROL_FACTORY_ID "control-factory:evolution-mail"
-#endif
-			
-static void
-random_cb (GtkWidget *button, gpointer user_data)
-{
-	printf ("Yow! I am called back!\n");
-}
-
-static GnomeUIInfo gnome_toolbar [] = {
-	GNOMEUIINFO_ITEM_STOCK (N_("Get mail"), N_("Check for new mail"), fetch_mail, GNOME_STOCK_PIXMAP_MAIL_RCV),
-	GNOMEUIINFO_ITEM_STOCK (N_("Send"), N_("Send a new message"), send_msg, GNOME_STOCK_PIXMAP_MAIL_SND),
-	GNOMEUIINFO_ITEM_STOCK (N_("Find"), N_("Find messages"), random_cb, GNOME_STOCK_PIXMAP_SEARCH),
-
-	GNOMEUIINFO_SEPARATOR,
-
-	GNOMEUIINFO_ITEM_STOCK (N_("Reply"), N_("Reply to the sender of this message"), reply_to_sender, GNOME_STOCK_PIXMAP_MAIL_RPL),
-	GNOMEUIINFO_ITEM_STOCK (N_("Reply to All"), N_("Reply to all recipients of this message"), reply_to_all, GNOME_STOCK_PIXMAP_MAIL_RPL),
-
-	GNOMEUIINFO_ITEM_STOCK (N_("Forward"), N_("Forward this message"), forward_msg, GNOME_STOCK_PIXMAP_MAIL_FWD),
-
-	GNOMEUIINFO_SEPARATOR,
-
-	GNOMEUIINFO_ITEM_STOCK (N_("Print"), N_("Print the selected message"), random_cb, GNOME_STOCK_PIXMAP_PRINT),
-
-	GNOMEUIINFO_ITEM_STOCK (N_("Delete"), N_("Delete this message"), delete_msg, GNOME_STOCK_PIXMAP_TRASH),
-
-	GNOMEUIINFO_END
-};
-
-static void
-control_activate (BonoboControl *control, BonoboUIHandler *uih)
-{
-	Bonobo_UIHandler  remote_uih;
-	BonoboControl *toolbar_control;
-	GtkWidget *toolbar, *folder_browser;
-
-	remote_uih = bonobo_control_get_remote_ui_handler (control);
-	bonobo_ui_handler_set_container (uih, remote_uih);		
-
-	folder_browser = bonobo_control_get_widget (control);
-
-	bonobo_ui_handler_menu_new_item (uih, "/Tools/Expunge", N_("_Expunge"),
-					 NULL, -1,
-					 BONOBO_UI_HANDLER_PIXMAP_STOCK,
-					 GNOME_STOCK_PIXMAP_TRASH,
-					 0, 0, expunge_folder, folder_browser);
-
-	bonobo_ui_handler_menu_new_item (uih, "/Tools/Filter Druid ...", N_("_Filter Druid ..."),
-					 NULL, -1,
-					 BONOBO_UI_HANDLER_PIXMAP_NONE,
-					 0,
-					 0, 0, filter_edit, folder_browser);
-
-	bonobo_ui_handler_menu_new_item (uih, "/Tools/Vfolder Druid ...", N_("_Vfolder Druid ..."),
-					 NULL, -1,
-					 BONOBO_UI_HANDLER_PIXMAP_NONE,
-					 0,
-					 0, 0, vfolder_edit, folder_browser);
-
-	toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL,
-				   GTK_TOOLBAR_BOTH);
-
-	gnome_app_fill_toolbar_with_data (GTK_TOOLBAR (toolbar),
-					  gnome_toolbar,
-					  NULL, folder_browser);
-
-	gtk_widget_show_all (toolbar);
-
-	toolbar_control = bonobo_control_new (toolbar);
-	bonobo_ui_handler_dock_add (uih, "/Toolbar",
-				    bonobo_object_corba_objref (BONOBO_OBJECT (toolbar_control)),
-				    GNOME_DOCK_ITEM_BEH_EXCLUSIVE,
-				    GNOME_DOCK_TOP,
-				    1, 1, 0);
-}
-
-static void
-control_deactivate (BonoboControl *control, BonoboUIHandler *uih)
-{
-	bonobo_ui_handler_menu_remove (uih, "/File/Mail");
-	bonobo_ui_handler_menu_remove (uih, "/Tools/Expunge");
-	bonobo_ui_handler_menu_remove (uih, "/Tools/Filter Druid ...");
-	bonobo_ui_handler_menu_remove (uih, "/Tools/VFolder Druid ...");
-	bonobo_ui_handler_dock_remove (uih, "/Toolbar");
-}
-
-static void
-control_activate_cb (BonoboControl *control, 
-		     gboolean activate, 
-		     gpointer user_data)
-{
-	BonoboUIHandler  *uih;
-
-	uih = bonobo_control_get_ui_handler (control);
-	g_assert (uih);
-	
-	if (activate)
-		control_activate (control, uih);
-	else
-		control_deactivate (control, uih);
-}
-
-static void
-control_destroy_cb (BonoboControl *control,
-		    gpointer       user_data)
-{
-	GtkWidget *folder_browser = user_data;
-
-	gtk_object_destroy (GTK_OBJECT (folder_browser));
-}
-
-BonoboControl *
-folder_browser_factory_new_control (void)
-{
-	BonoboControl *control;
-	GtkWidget *folder_browser;
-
-	folder_browser = folder_browser_new ();
-	if (folder_browser == NULL)
-		return NULL;
-
-	gtk_widget_show(folder_browser);
-	
-	control = bonobo_control_new (folder_browser);
-	
-	if (control == NULL){
-		gtk_object_destroy (GTK_OBJECT (folder_browser));
-		return NULL;
-	}
-	
-	gtk_signal_connect (GTK_OBJECT (control), "activate",
-			    control_activate_cb, NULL);
-
-	gtk_signal_connect (GTK_OBJECT (control), "destroy",
-			    control_destroy_cb, folder_browser);	
-	
-	bonobo_control_set_property_bag (control,
-					 FOLDER_BROWSER (folder_browser)->properties);
-
-	return control;
-}
-
-/*
- * Creates the Folder Browser, wraps it in a Bonobo Control, and
- * sets the Bonobo Control properties to point to the Folder Browser
- * Properties
- */
-static BonoboObject *
-folder_browser_factory (BonoboGenericFactory *factory, void *closure)
-{
-	return BONOBO_OBJECT (folder_browser_factory_new_control ());
-}
-
-void
-folder_browser_factory_init (void)
-{
-	static BonoboGenericFactory *bonobo_folder_browser_factory = NULL;
-	
-	if (bonobo_folder_browser_factory != NULL)
-		return;
-
-	bonobo_folder_browser_factory = bonobo_generic_factory_new (CONTROL_FACTORY_ID,
-								    folder_browser_factory,
-								    NULL);
-
-	if (bonobo_folder_browser_factory == NULL){
-		e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
-			  _("We are sorry, Evolution's Folder Browser can not be initialized.")); 
-		exit (1);
-	}
-}
diff --git a/mail/folder-browser.c b/mail/folder-browser.c
deleted file mode 100644
index f435d0cf50..0000000000
--- a/mail/folder-browser.c
+++ /dev/null
@@ -1,425 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * folder-browser.c: Folder browser top level component
- *
- * Author:
- *   Miguel de Icaza (miguel@kernel.org)
- *
- * (C) 2000 Helix Code, Inc.
- */
-#include 
-#include 
-#include "e-util/e-util.h"
-#include "folder-browser.h"
-#include "mail.h"
-#include "message-list.h"
-#include 
-
-
-#define PARENT_TYPE (gtk_table_get_type ())
-
-static GtkObjectClass *folder_browser_parent_class;
-
-
-#define PROPERTY_FOLDER_URI          "folder_uri"
-#define PROPERTY_MESSAGE_PREVIEW     "message_preview"
-
-#define PROPERTY_FOLDER_URI_IDX      1
-#define PROPERTY_MESSAGE_PREVIEW_IDX 2
-
-
-
-static void
-folder_browser_destroy (GtkObject *object)
-{
-	FolderBrowser *folder_browser = FOLDER_BROWSER (object);
-	
-	if (folder_browser->shell) {
-		CORBA_Environment ev;
-
-		CORBA_exception_init (&ev);
-		Bonobo_Unknown_unref (folder_browser->shell, &ev);
-		CORBA_exception_free (&ev);
-	}
-	
-	if (folder_browser->uri)
-		g_free (folder_browser->uri);
-
-	if (folder_browser->folder)
-		gtk_object_unref (GTK_OBJECT (folder_browser->folder));
-	
-	if (folder_browser->message_list)
-		bonobo_object_unref (BONOBO_OBJECT (folder_browser->message_list));
-
-	folder_browser_parent_class->destroy (object);
-}
-
-static void
-folder_browser_class_init (GtkObjectClass *object_class)
-{
-	object_class->destroy = folder_browser_destroy;
-
-	folder_browser_parent_class = gtk_type_class (PARENT_TYPE);
-}
-
-static gboolean
-folder_browser_load_folder (FolderBrowser *fb, const char *name)
-{
-	char *store_name, *msg;
-	CamelStore *store;
-	CamelFolder *new_folder = NULL;
-	CamelException *ex;
-	gboolean new_folder_exists = FALSE;
-
-	ex = camel_exception_new ();
-
-	if (!strncmp(name, "vfolder:", 8)) {
-		char *query, *newquery;
-		store_name = g_strdup(name);
-		query = strchr(store_name, '?');
-		if (query) {
-			*query++ = 0;
-		} else {
-			query = "";
-		}
-		newquery = g_strdup_printf("mbox?%s", query);
-		store = camel_session_get_store (session, store_name, ex);
-
-		if (store) {
-			new_folder = camel_store_get_folder (store, newquery, ex);
-		}
-		g_free(newquery);
-		g_free(store_name);
-
-		/* FIXME: Add the mbox folders we search!!! */
-	} else if (!strncmp(name, "file:", 5)) {
-		/* Change "file:" to "mbox:". */
-		store_name = g_strdup_printf ("mbox:%s", name + 5);
-		store = camel_session_get_store (session, store_name, ex);
-		g_free (store_name);
-		if (store) {
-			new_folder = camel_store_get_folder (store, "mbox", ex);
-		}
-	} else {
-		char *msg;
-
-		msg = g_strdup_printf ("Can't open URI %s", name);
-		gnome_error_dialog (msg);
-		g_free (msg);
-		camel_exception_free (ex);
-		return FALSE;
-	}
-	
-	if (store)
-		gtk_object_unref (GTK_OBJECT (store));
-
-	if (camel_exception_get_id (ex)) {
-		msg = g_strdup_printf ("Unable to get folder %s: %s\n", name,
-				       camel_exception_get_description (ex));
-		gnome_error_dialog (msg);
-		camel_exception_free (ex);
-		if (new_folder)
-			gtk_object_unref((GtkObject *)new_folder);
-		return FALSE;
-	}
-	
-	/* If the folder does not exist, we don't want to show it */
-	new_folder_exists = camel_folder_exists (new_folder, ex);
-	if (camel_exception_get_id (ex)) {
-		msg = g_strdup_printf ("Unable to test if folder %s "
-				       "exists: %s\n", name,
-				       camel_exception_get_description (ex));
-		gnome_error_dialog (msg);
-		camel_exception_free (ex);
-		return FALSE;
-	}
-	camel_exception_free (ex);
-		
-	if (!new_folder_exists) {
-		gtk_object_unref (GTK_OBJECT (new_folder));
-		return FALSE;
-	}
-	
-	if (fb->folder)
-		gtk_object_unref (GTK_OBJECT (fb->folder));
-	
-	fb->folder = new_folder;
-	
-	message_list_set_folder (fb->message_list, new_folder);
-
-	return TRUE;
-}
-
-#define EQUAL(a,b) (strcmp (a,b) == 0)
-
-void
-folder_browser_set_uri (FolderBrowser *folder_browser, const char *uri)
-{
-	if (folder_browser->uri)
-		g_free (folder_browser->uri);
-
-	folder_browser->uri = g_strdup (uri);
-	folder_browser_load_folder (folder_browser, folder_browser->uri);
-}
-
-void
-folder_browser_set_message_preview (FolderBrowser *folder_browser, gboolean show_message_preview)
-{
-	if (folder_browser->preview_shown == show_message_preview)
-		return;
-
-	g_warning ("FIXME: implement me");
-}
-
-static void
-get_prop (BonoboPropertyBag *bag,
-	  BonoboArg         *arg,
-	  guint              arg_id,
-	  gpointer           user_data)
-{
-	FolderBrowser *fb = user_data;
-
-	switch (arg_id) {
-
-	case PROPERTY_FOLDER_URI_IDX:
-		if (fb && fb->uri)
-			BONOBO_ARG_SET_STRING (arg, fb->uri);
-		else
-			BONOBO_ARG_SET_STRING (arg, "");
-		break;
-
-	case PROPERTY_MESSAGE_PREVIEW_IDX:
-		g_warning ("Implement me; no return value");
-		BONOBO_ARG_SET_BOOLEAN (arg, FALSE);
-		break;
-
-	default:
-		g_warning ("Unhandled arg %d\n", arg_id);
-	}
-}
-
-static void
-set_prop (BonoboPropertyBag *bag,
-	  const BonoboArg   *arg,
-	  guint              arg_id,
-	  gpointer           user_data)
-{
-	FolderBrowser *fb = user_data;
-
-	switch (arg_id) {
-
-	case PROPERTY_FOLDER_URI_IDX:
-		folder_browser_set_uri (fb, BONOBO_ARG_GET_STRING (arg));
-		break;
-
-	case PROPERTY_MESSAGE_PREVIEW_IDX:
-		folder_browser_set_message_preview (fb, BONOBO_ARG_GET_BOOLEAN (arg));
-		break;
-
-	default:
-		g_warning ("Unhandled arg %d\n", arg_id);
-		break;
-	}
-}
-
-static void
-folder_browser_properties_init (FolderBrowser *fb)
-{
-	fb->properties = bonobo_property_bag_new (get_prop, set_prop, fb);
-
-	bonobo_property_bag_add (
-		fb->properties, PROPERTY_FOLDER_URI, PROPERTY_FOLDER_URI_IDX,
-		BONOBO_ARG_STRING, NULL, _("The URI that the Folder Browser will display"), 0);
-	bonobo_property_bag_add (
-		fb->properties, PROPERTY_MESSAGE_PREVIEW, PROPERTY_MESSAGE_PREVIEW_IDX,
-		BONOBO_ARG_BOOLEAN, NULL, _("Whether a message preview should be shown"), 0);
-}
-
-static char * search_options[] = {
-	"Body or subject contains",
-	"Body contains",
-	"Subject contains",
-	"Body does not contain",
-	"Subject does not contain",
-	NULL
-};
-
-/* %s is replaced by the whole search string in quotes ...
-   possibly could split the search string into words as well ? */
-static char * search_string[] = {
-	"(or (body-contains %s) (match-all (header-contains \"Subject\" %s)))",
-	"(body-contains %s)",
-	"(match-all (header-contains \"Subject\" %s)",
-	"(match-all (not (body-contains %s)))",
-	"(match-all (not (header-contains \"Subject\" %s)))"
-};
-
-static void
-search_set(FolderBrowser *fb)
-{
-	GtkWidget *widget;
-	GString *out;
-	char *str;
-	int index;
-	char *text;
-
-	text = gtk_entry_get_text((GtkEntry *)fb->search_entry);
-
-	if (text == NULL || text[0] == 0) {
-		message_list_set_search (fb->message_list, NULL);
-		return;
-	}
-
-	widget = gtk_menu_get_active (GTK_MENU(GTK_OPTION_MENU(fb->search_menu)->menu));
-	index = (int)gtk_object_get_data((GtkObject *)widget, "search_option");
-	if (index > sizeof(search_string)/sizeof(search_string[0]))
-		index = 0;
-	str = search_string[index];
-
-	out = g_string_new("");
-	while (*str) {
-		if (str[0] == '%' && str[1]=='s') {
-			str+=2;
-			g_string_sprintfa(out, "\"%s\"", text);
-		} else {
-			g_string_append_c(out, *str);
-			str++;
-		}
-	}
-	message_list_set_search (fb->message_list, out->str);
-	g_string_free(out, TRUE);
-}
-
-static void
-search_menu_deactivate(GtkWidget *menu, FolderBrowser *fb)
-{
-	search_set(fb);
-}
-
-static GtkWidget *
-create_option_menu (char **menu_list, int item, void *data)
-{
-	GtkWidget *omenu;
-	GtkWidget *menu;
-	int i = 0;
-       
-	omenu = gtk_option_menu_new ();
-	menu = gtk_menu_new ();
-	while (*menu_list){
-		GtkWidget *entry;
-
-		entry = gtk_menu_item_new_with_label (*menu_list);
-		gtk_widget_show (entry);
-		gtk_object_set_data((GtkObject *)entry, "search_option", (void *)i);
-		gtk_menu_append (GTK_MENU (menu), entry);
-		menu_list++;
-		i++;
-	}
-	gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
-	gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), item);
-	gtk_widget_show (omenu);
-
-	gtk_signal_connect (GTK_OBJECT (menu), 
-			    "deactivate",
-			    GTK_SIGNAL_FUNC (search_menu_deactivate), data);
-
-	return omenu;
-}
-
-static void
-search_activate(GtkEntry *entry, FolderBrowser *fb)
-{
-	search_set(fb);
-}
-
-static void
-folder_browser_gui_init (FolderBrowser *fb)
-{
-	GtkWidget *hbox, *label;
-
-	/*
-	 * The panned container
-	 */
-	fb->vpaned = e_vpaned_new ();
-	gtk_widget_show (fb->vpaned);
-
-	gtk_table_attach (
-		GTK_TABLE (fb), fb->vpaned,
-		0, 1, 1, 3,
-		GTK_FILL | GTK_EXPAND,
-		GTK_FILL | GTK_EXPAND,
-		0, 0);
-
-	/* quick-search entry */
-	hbox = gtk_hbox_new(FALSE, 3);
-	gtk_widget_show(hbox);
-	fb->search_entry = gtk_entry_new();
-	gtk_widget_show(fb->search_entry);
-	gtk_signal_connect(GTK_OBJECT (fb->search_entry), "activate", search_activate, fb);
-	/* gtk_signal_connect(fb->search_entry, "changed", search_activate, fb); */
-	label = gtk_label_new("Search");
-	gtk_widget_show(label);
-	fb->search_menu = create_option_menu(search_options, 0, fb);
-	gtk_box_pack_end((GtkBox *)hbox, fb->search_entry, FALSE, FALSE, 3);
-	gtk_box_pack_end((GtkBox *)hbox, fb->search_menu, FALSE, FALSE, 3);
-	gtk_box_pack_end((GtkBox *)hbox, label, FALSE, FALSE, 3);
-	gtk_table_attach (
-		GTK_TABLE (fb), hbox,
-		0, 1, 0, 1,
-		GTK_FILL | GTK_EXPAND,
-		0,
-		0, 0);
-
-	fb->message_list_w = message_list_get_widget (fb->message_list);
-	e_paned_add1 (E_PANED (fb->vpaned), fb->message_list_w);
-	gtk_widget_show (fb->message_list_w);
-
-	e_paned_add2 (E_PANED (fb->vpaned), GTK_WIDGET (fb->mail_display));
-	e_paned_set_position (E_PANED (fb->vpaned), 200);
-
-	gtk_widget_show (GTK_WIDGET (fb->mail_display));
-	gtk_widget_show (GTK_WIDGET (fb));
-
-}
-
-static void
-folder_browser_init (GtkObject *object)
-{
-}
-
-static void
-my_folder_browser_init (GtkObject *object)
-{
-	FolderBrowser *fb = FOLDER_BROWSER (object);
-
-	/*
-	 * Setup parent class fields.
-	 */ 
-	GTK_TABLE (fb)->homogeneous = FALSE;
-	gtk_table_resize (GTK_TABLE (fb), 1, 2);
-
-	/*
-	 * Our instance data
-	 */
-	fb->message_list = MESSAGE_LIST (message_list_new (fb));
-	fb->mail_display = MAIL_DISPLAY (mail_display_new (fb));
-
-	folder_browser_properties_init (fb);
-	folder_browser_gui_init (fb);
-}
-
-GtkWidget *
-folder_browser_new (void)
-{
-	FolderBrowser *folder_browser = gtk_type_new (folder_browser_get_type ());
-
-	my_folder_browser_init (GTK_OBJECT (folder_browser));
-	folder_browser->uri = NULL;
-
-	return GTK_WIDGET (folder_browser);
-}
-
-
-E_MAKE_TYPE (folder_browser, "FolderBrowser", FolderBrowser, folder_browser_class_init, folder_browser_init, PARENT_TYPE);
-
-
diff --git a/mail/folder-browser.h b/mail/folder-browser.h
deleted file mode 100644
index 6e9c66a0cd..0000000000
--- a/mail/folder-browser.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-
-#ifndef _FOLDER_BROWSER_H_
-#define _FOLDER_BROWSER_H_
-
-#include "mail-types.h"
-#include 
-#include "camel/camel-stream.h"
-#include 
-#include "message-list.h"
-#include "mail-display.h"
-#include "shell/Evolution.h"
-
-
-#define FOLDER_BROWSER_TYPE        (folder_browser_get_type ())
-#define FOLDER_BROWSER(o)          (GTK_CHECK_CAST ((o), FOLDER_BROWSER_TYPE, FolderBrowser))
-#define FOLDER_BROWSER_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), FOLDER_BROWSER_TYPE, FolderBrowserClass))
-#define IS_FOLDER_BROWSER(o)       (GTK_CHECK_TYPE ((o), FOLDER_BROWSER_TYPE))
-#define IS_FOLDER_BROWSER_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), FOLDER_BROWSER_TYPE))
-
-
-struct  _FolderBrowser {
-	GtkTable parent;
-
-	BonoboPropertyBag *properties;
-
-	Evolution_Shell shell;
-
-	/*
-	 * The current URI being displayed by the FolderBrowser
-	 */
-	char        *uri;
-	CamelFolder *folder;
-	
-	MessageList *message_list;
-	GtkWidget   *message_list_w;
-	MailDisplay *mail_display;
-	GtkWidget   *vpaned;
-	GtkWidget   *search_menu;
-	GtkWidget   *search_entry;
-
-	gboolean     preview_shown;
-
-};
-
-
-typedef struct {
-	GtkTableClass parent_class;
-} FolderBrowserClass;
-
-
-
-
-GtkType        folder_browser_get_type (void);
-GtkWidget     *folder_browser_new      (void);
-void           folder_browser_set_uri  (FolderBrowser *folder_browser,
-					const char *uri);
-void           folder_browser_set_message_preview (FolderBrowser *folder_browser,
-						   gboolean show_message_preview);
-
-#endif /* _FOLDER_BROWSER_H_ */
diff --git a/mail/mail-config.c b/mail/mail-config.c
deleted file mode 100644
index cc5b840ef5..0000000000
--- a/mail/mail-config.c
+++ /dev/null
@@ -1,1088 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* mail-config.c: Mail configuration dialogs/wizard. */
-
-/* 
- * Author: 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include 
-
-#include 
-#include 
-
-#include "mail.h"
-#include "e-util/e-html-utils.h"
-#include "e-util/e-setup.h"
-
-struct service_type {
-	CamelProvider *provider;
-	CamelService *service;
-	GList *authtypes;
-};
-
-struct identity_record {
-	char *name, *address, *organization, *sigfile;
-};
-
-static char *username = NULL;
-
-
-/* HTML Helpers */
-
-static void
-html_size_req (GtkWidget *widget, GtkRequisition *requisition)
-{
-	requisition->height = GTK_LAYOUT (widget)->height;
-}
-
-/* Returns a GtkHTML which is already inside a GtkScrolledWindow. If
- * @white is TRUE, the GtkScrolledWindow will be inside a GtkFrame.
- */
-static GtkWidget *
-html_new (gboolean white)
-{
-	GtkWidget *html, *scrolled, *frame;
-	GtkStyle *style;
-
-	html = gtk_html_new ();
-	GTK_LAYOUT (html)->height = 0;
-	gtk_signal_connect (GTK_OBJECT (html), "size_request",
-			    GTK_SIGNAL_FUNC (html_size_req), NULL);
-	gtk_html_set_editable (GTK_HTML (html), FALSE);
-	style = gtk_rc_get_style (html);
-	if (style) {
-		gtk_html_set_default_background_color (GTK_HTML (html),
-						       white ? &style->white :
-						       &style->bg[0]);
-	}
-	gtk_widget_set_sensitive (html, FALSE);
-	scrolled = gtk_scrolled_window_new (NULL, NULL);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
-					GTK_POLICY_NEVER,
-					GTK_POLICY_NEVER);
-	gtk_container_add (GTK_CONTAINER (scrolled), html);
-
-	if (white) {
-		frame = gtk_frame_new (NULL);
-		gtk_frame_set_shadow_type (GTK_FRAME (frame),
-					   GTK_SHADOW_ETCHED_IN);
-		gtk_container_add (GTK_CONTAINER (frame), scrolled);
-		gtk_widget_show_all (frame);
-	} else
-		gtk_widget_show_all (scrolled);
-
-	return html;
-}
-
-static void
-put_html (GtkHTML *html, char *text)
-{
-	GtkHTMLStream *handle;
-
-	text = e_text_to_html (text, E_TEXT_TO_HTML_CONVERT_NL);
-	handle = gtk_html_begin (html);
-	gtk_html_write (html, handle, "", 12);
-	gtk_html_write (html, handle, text, strlen (text));
-	gtk_html_write (html, handle, "", 14);
-	g_free (text);
-	gtk_html_end (html, handle, GTK_HTML_STREAM_OK);
-}
-
-
-/* Error helper */
-static void
-error_dialog (GtkWidget *parent_finder, const char *fmt, ...)
-{
-	GtkWidget *parent, *dialog;
-	char *msg;
-	va_list ap;
-
-	parent = gtk_widget_get_ancestor (parent_finder, GTK_TYPE_WINDOW);
-
-	ap = va_start (ap, fmt);
-	msg = g_strdup_vprintf (fmt, ap);
-	va_end (ap);
-
-	dialog = gnome_error_dialog_parented (msg, GTK_WINDOW (parent));
-	gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-	g_free (msg);
-}
-
-
-/* Identity page */
-
-static void
-identity_note_doneness (GtkObject *page, gpointer user_data)
-{
-	GtkWidget *exit_button;
-	GtkEntry *entry;
-	char *data;
-
-	exit_button = gtk_object_get_data (page, "exit_button");
-
-	entry = gtk_object_get_data (page, "name");
-	data = gtk_entry_get_text (entry);
-	if (data && *data) {
-		entry = gtk_object_get_data (page, "addr");
-		data = gtk_entry_get_text (entry);
-	}
-
-	gtk_widget_set_sensitive (exit_button, data && *data);
-}
-
-static void
-prepare_identity (GnomeDruidPage *page, gpointer arg1, gpointer user_data)
-{
-	identity_note_doneness (user_data, NULL);
-}
-
-static gboolean
-identity_next (GnomeDruidPage *page, gpointer arg1, gpointer user_data)
-{
-	GtkObject *box = user_data;
-	GtkEntry *addr = gtk_object_get_data (box, "addr");
-	char *data, *at;
-
-	/* FIXME: we need more sanity checking than this. */
-
-	data = gtk_entry_get_text (addr);
-	at = strchr (data, '@');
-	if (!at || !strchr (at + 1, '.')) {
-		error_dialog (GTK_WIDGET (page), "Email address must be "
-			      "of the form \"user@domain\".");
-		return TRUE;
-	}
-
-	g_free (username);
-	username = g_strndup (data, at - data);
-
-	return FALSE;
-}
-
-static void
-destroy_identity (GtkObject *table, gpointer idrecp)
-{
-	struct identity_record *idrec = idrecp;
-	GtkEditable *editable;
-
-	editable = gtk_object_get_data (table, "name");
-	idrec->name = gtk_editable_get_chars (editable, 0, -1);
-	editable = gtk_object_get_data (table, "addr");
-	idrec->address = gtk_editable_get_chars (editable, 0, -1);
-	editable = gtk_object_get_data (table, "org");
-	idrec->organization = gtk_editable_get_chars (editable, 0, -1);
-	editable = gtk_object_get_data (table, "sig");
-	idrec->sigfile = gtk_editable_get_chars (editable, 0, -1);
-}
-
-static void
-create_identity_page (GtkWidget *vbox, struct identity_record *idrec)
-{
-	GtkWidget *html, *table;
-	GtkWidget *name, *addr, *org, *sig;
-	GtkWidget *name_entry, *addr_entry, *org_entry, *sig_entry;
-	GtkWidget *hsep;
-	char *user;
-	struct passwd *pw;
-
-	html = html_new (FALSE);
-	put_html (GTK_HTML (html),
-		  _("Enter your name and email address to be used in "
-		    "outgoing mail. You may also, optionally, enter the "
-		    "name of your organization, and the name of a file "
-		    "to read your signature from."));
-	gtk_box_pack_start (GTK_BOX (vbox), html->parent, FALSE, TRUE, 0);
-
-	table = gtk_table_new (5, 2, FALSE);
-	gtk_table_set_row_spacings (GTK_TABLE (table), 10);
-	gtk_table_set_col_spacings (GTK_TABLE (table), 6);
-	gtk_container_set_border_width (GTK_CONTAINER (table), 8);
-	gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
-	gtk_signal_connect (GTK_OBJECT (vbox), "destroy",
-			    GTK_SIGNAL_FUNC (destroy_identity), idrec);
-
-	name = gtk_label_new (_("Full name:"));
-	gtk_table_attach (GTK_TABLE (table), name, 0, 1, 0, 1,
-			  GTK_FILL, 0, 0, 0);
-	gtk_misc_set_alignment (GTK_MISC (name), 1, 0.5);
-
-	name_entry = gtk_entry_new ();
-	gtk_table_attach (GTK_TABLE (table), name_entry, 1, 2, 0, 1,
-			  GTK_EXPAND | GTK_FILL, 0, 0, 0);
-	gtk_object_set_data (GTK_OBJECT (vbox), "name", name_entry);
-
-	user = getenv ("USER");
-	if (user)
-		pw = getpwnam (user);
-	else
-		pw = getpwuid (getuid ());
-	if (pw && pw->pw_gecos && *pw->pw_gecos) {
-		char *name;
-		int pos = 0;
-
-		name = g_strndup (pw->pw_gecos, strcspn (pw->pw_gecos, ","));
-		gtk_editable_insert_text (GTK_EDITABLE (name_entry),
-					  name, strlen (name), &pos);
-	}
-
-	addr = gtk_label_new (_("Email address:"));
-	gtk_table_attach (GTK_TABLE (table), addr, 0, 1, 1, 2,
-			  GTK_FILL, 0, 0, 0);
-	gtk_misc_set_alignment (GTK_MISC (addr), 1, 0.5);
-
-	addr_entry = gtk_entry_new ();
-	gtk_table_attach (GTK_TABLE (table), addr_entry, 1, 2, 1, 2,
-			  GTK_EXPAND | GTK_FILL, 0, 0, 0);
-	gtk_object_set_data (GTK_OBJECT (vbox), "addr", addr_entry);
-
-	gtk_signal_connect_object (GTK_OBJECT (name_entry), "changed",
-				   GTK_SIGNAL_FUNC (identity_note_doneness),
-				   GTK_OBJECT (vbox));
-	gtk_signal_connect_object (GTK_OBJECT (addr_entry), "changed",
-				   GTK_SIGNAL_FUNC (identity_note_doneness),
-				   GTK_OBJECT (vbox));
-
-	hsep = gtk_hseparator_new ();
-	gtk_table_attach (GTK_TABLE (table), hsep, 0, 2, 2, 3,
-			  GTK_FILL, 0, 0, 8);
-
-	org = gtk_label_new (_("Organization:"));
-	gtk_table_attach (GTK_TABLE (table), org, 0, 1, 3, 4,
-			  GTK_FILL, 0, 0, 0);
-	gtk_misc_set_alignment (GTK_MISC (org), 1, 0.5);
-
-	org_entry = gtk_entry_new ();
-	gtk_table_attach (GTK_TABLE (table), org_entry, 1, 2, 3, 4,
-			  GTK_EXPAND | GTK_FILL, 0, 0, 0);
-	gtk_object_set_data (GTK_OBJECT (vbox), "org", org_entry);
-
-	sig = gtk_label_new (_("Signature file:"));
-	gtk_table_attach (GTK_TABLE (table), sig, 0, 1, 4, 5,
-			  GTK_FILL, GTK_FILL, 0, 0);
-	gtk_misc_set_alignment (GTK_MISC (sig), 1, 0);
-
-	sig_entry = gnome_file_entry_new (NULL, _("Signature File"));
-	gtk_table_attach (GTK_TABLE (table), sig_entry, 1, 2, 4, 5,
-			  GTK_FILL, 0, 0, 0);
-	gnome_file_entry_set_default_path (GNOME_FILE_ENTRY (sig_entry),
-					   g_get_home_dir ());
-	gtk_object_set_data (GTK_OBJECT (vbox), "sig",
-			     gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (sig_entry)));
-
-	gtk_widget_show_all (table);
-}
-
-
-/* Source/Transport pages */
-
-static void
-service_note_doneness (GtkObject *page, gpointer user_data)
-{
-	GtkObject *box;
-	GtkWidget *button;
-	GtkEntry *entry;
-	char *data;
-	gboolean sensitive = TRUE;
-
-	entry = gtk_object_get_data (page, "server_entry");
-	if (entry) {
-		data = gtk_entry_get_text (entry);
-		if (!data || !*data)
-			sensitive = FALSE;
-	}
-
-	if (sensitive) {
-		entry = gtk_object_get_data (page, "user_entry");
-		if (entry) {
-			data = gtk_entry_get_text (entry);
-			if (!data || !*data)
-				sensitive = FALSE;
-		}
-	}
-
-	if (sensitive) {
-		entry = gtk_object_get_data (page, "path_entry");
-		if (entry) {
-			data = gtk_entry_get_text (entry);
-			if (!data || !*data)
-				sensitive = FALSE;
-		}
-	}
-
-	button = gtk_object_get_data (page, "autodetect");
-	if (button)
-		gtk_widget_set_sensitive (button, sensitive);
-
-	box = gtk_object_get_data (page, "box");
-	button = gtk_object_get_data (box, "exit_button");
-	if (button)
-		gtk_widget_set_sensitive (button, sensitive);
-}
-
-static void
-prepare_service (GnomeDruidPage *page, gpointer arg1, gpointer user_data)
-{
-	GtkObject *box = user_data;
-	GtkNotebook *notebook = gtk_object_get_data (box, "notebook");
-	GtkWidget *table;
-	GtkEntry *entry;
-
-	table = gtk_notebook_get_nth_page (
-		notebook, gtk_notebook_get_current_page (notebook));
-
-	if (username) {
-		char *data = NULL;
-
-		entry = gtk_object_get_data (GTK_OBJECT (table), "user_entry");
-		if (entry) {
-			data = gtk_entry_get_text (entry);
-			if (!data || !*data)
-				gtk_entry_set_text (entry, username);
-		}
-	}
-
-	service_note_doneness (GTK_OBJECT (table), NULL);
-}
-
-static void
-auth_menuitem_activate (GtkObject *menuitem, GtkHTML *html)
-{
-	CamelServiceAuthType *authtype;
-
-	authtype = gtk_object_get_data (menuitem, "authtype");
-	put_html (html, authtype->description);
-}
-
-static void
-fill_auth_menu (GtkOptionMenu *optionmenu, GtkHTML *html, GList *authtypes)
-{
-	CamelServiceAuthType *authtype;
-	GtkWidget *menu, *item, *firstitem = NULL;
-
-	menu = gtk_menu_new ();
-	gtk_option_menu_set_menu (optionmenu, menu);
-	for (; authtypes; authtypes = authtypes->next) {
-		authtype = authtypes->data;
-		item = gtk_menu_item_new_with_label (_(authtype->name));
-		if (!firstitem)
-			firstitem = item;
-		gtk_menu_append (GTK_MENU (menu), item);
-		gtk_object_set_data (GTK_OBJECT (item), "authtype", authtype);
-		gtk_signal_connect (GTK_OBJECT (item), "activate",
-				    GTK_SIGNAL_FUNC (auth_menuitem_activate),
-				    html);
-	}
-	gtk_widget_show_all (menu);
-	gtk_option_menu_set_history (optionmenu, 0);
-	if (firstitem)
-		auth_menuitem_activate (GTK_OBJECT (firstitem), html);
-}
-
-static char *
-get_service_url (GtkObject *table)
-{
-	CamelURL *url;
-	GtkEditable *editable;
-	GtkOptionMenu *auth_optionmenu;
-	char *url_str;
-
-	url = g_new0 (CamelURL, 1);
-	url->protocol = g_strdup (gtk_object_get_data (table, "protocol"));
-	editable = gtk_object_get_data (table, "user_entry");
-	if (editable)
-		url->user = gtk_editable_get_chars (editable, 0, -1);
-	editable = gtk_object_get_data (table, "server_entry");
-	if (editable)
-		url->host = gtk_editable_get_chars (editable, 0, -1);
-	editable = gtk_object_get_data (table, "path_entry");
-	if (editable)
-		url->path = gtk_editable_get_chars (editable, 0, -1);
-
-	auth_optionmenu = gtk_object_get_data (table, "auth_optionmenu");
-	if (auth_optionmenu) {
-		GtkWidget *menu, *item;
-		CamelServiceAuthType *authtype;
-
-		menu = gtk_option_menu_get_menu (auth_optionmenu);
-		if (menu) {
-			item = gtk_menu_get_active (GTK_MENU (menu));
-			authtype = gtk_object_get_data (GTK_OBJECT (item),
-							"authtype");
-			if (*authtype->authproto)
-				url->authmech = g_strdup (authtype->authproto);
-		}
-	}
-
-	url_str = camel_url_to_string (url, FALSE);
-	camel_url_free (url);
-	return url_str;
-}
-
-static void
-autodetect_cb (GtkWidget *button, GtkObject *table)
-{
-	char *url;
-	CamelException *ex;
-	CamelService *service;
-	GList *authtypes;
-	GtkHTML *html;
-	GtkOptionMenu *optionmenu;
-	int type;
-
-	type = GPOINTER_TO_UINT (gtk_object_get_data (table, "service_type"));
-	url = get_service_url (table);
-
-	ex = camel_exception_new ();
-	service = camel_session_get_service (session, url, type, ex);
-	g_free (url);
-	if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
-		goto error;
-
-	authtypes = camel_service_query_auth_types (service, ex);
-	if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
-		goto error;
-
-	html = gtk_object_get_data (table, "auth_html");
-	optionmenu = gtk_object_get_data (table, "auth_optionmenu");
-	fill_auth_menu (optionmenu, html, authtypes);
-	return;
-
- error:
-	error_dialog (button, "Could not detect supported authentication "
-		      "types:\n%s", camel_exception_get_description (ex));
-	camel_exception_free (ex);
-}
-
-static gboolean
-service_acceptable (GtkNotebook *notebook)
-{
-	char *url;
-	GtkWidget *table;
-	GtkToggleButton *check;
-	int page, type;
-	CamelService *service;
-	CamelException *ex;
-	gboolean ok;
-
-	page = gtk_notebook_get_current_page (notebook);
-	table = gtk_notebook_get_nth_page (notebook, page);
-	check = gtk_object_get_data (GTK_OBJECT (table), "check");
-	if (!check || !gtk_toggle_button_get_active (check))
-		return TRUE;
-
-	type = GPOINTER_TO_UINT (gtk_object_get_data (GTK_OBJECT (table),
-						      "service_type"));
-	url = get_service_url (GTK_OBJECT (table));
-
-	ex = camel_exception_new ();
-	service = camel_session_get_service (session, url, type, ex);
-	g_free (url);
-	if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
-		goto error;
-
-	ok = camel_service_connect (service, ex);
-	if (ok)
-		camel_service_disconnect (service, ex);
-	gtk_object_unref (GTK_OBJECT (service));
-
-	if (ok)
-		return TRUE;
-
- error:
-	error_dialog (GTK_WIDGET (notebook),
-		      camel_exception_get_description (ex));
-	camel_exception_free (ex);
-	return FALSE;
-}
-
-static gboolean
-service_next (GnomeDruidPage *page, gpointer arg1, gpointer user_data)
-{
-	return !service_acceptable (user_data);
-}
-
-static void
-destroy_service (GtkObject *notebook, gpointer urlp)
-{
-	char **url = urlp;
-	GtkWidget *table;
-	int page;
-
-	page = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
-	table = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), page);
-	*url = get_service_url (GTK_OBJECT (table));
-}
-
-static void
-add_row (GtkWidget *table, int row, const char *label_text,
-	 const char *tag, int flag)
-{
-	GtkWidget *label, *entry;
-
-	label = gtk_label_new (label_text);
-	gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1,
-			  GTK_FILL, 0, 0, 0);
-	gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
-
-	entry = gtk_entry_new ();
-	gtk_table_attach (GTK_TABLE (table), entry, 1, 3, row, row + 1,
-			  GTK_EXPAND | GTK_FILL, 0, 0, 0);
-	gtk_signal_connect_object (GTK_OBJECT (entry), "changed",
-				   GTK_SIGNAL_FUNC (service_note_doneness),
-				   GTK_OBJECT (table));
-	gtk_object_set_data (GTK_OBJECT (table), tag, entry);
-}
-
-static GtkWidget *
-create_source (struct service_type *st)
-{
-	GtkWidget *table;
-	GtkWidget *auth, *auth_optionmenu, *auth_html;
-	GtkWidget *autodetect;
-	int row, service_flags;
-
-	table = gtk_table_new (5, 3, FALSE);
-	gtk_table_set_row_spacings (GTK_TABLE (table), 2);
-	gtk_table_set_col_spacings (GTK_TABLE (table), 10);
-	gtk_container_set_border_width (GTK_CONTAINER (table), 8);
-	gtk_object_set_data (GTK_OBJECT (table), "protocol",
-			     st->provider->protocol);
-	gtk_object_set_data (GTK_OBJECT (table), "service_type",
-			     GUINT_TO_POINTER (CAMEL_PROVIDER_STORE));
-
-	row = 0;
-	service_flags = st->service->url_flags &
-		~CAMEL_SERVICE_URL_NEED_AUTH;
-
-	if (service_flags & CAMEL_SERVICE_URL_NEED_HOST) {
-		add_row (table, row, _("Server:"), "server_entry",
-			 CAMEL_SERVICE_URL_NEED_HOST);
-		row++;
-	}
-
-	if (service_flags & CAMEL_SERVICE_URL_NEED_USER) {
-		add_row (table, row, _("Username:"), "user_entry",
-			 CAMEL_SERVICE_URL_NEED_USER);
-		row++;
-	}
-
-	if (service_flags & CAMEL_SERVICE_URL_NEED_PATH) {
-		add_row (table, row, _("Path:"), "path_entry",
-			 CAMEL_SERVICE_URL_NEED_PATH);
-		row++;
-	}
-
-	if (st->authtypes) {
-		auth = gtk_label_new (_("Authentication:"));
-		gtk_table_attach (GTK_TABLE (table), auth, 0, 1,
-				  row, row + 1, GTK_FILL, 0, 0, 0);
-		gtk_misc_set_alignment (GTK_MISC (auth), 1, 0.5);
-
-		auth_optionmenu = gtk_option_menu_new ();
-		gtk_table_attach (GTK_TABLE (table), auth_optionmenu, 1, 2,
-				  row, row + 1, GTK_FILL | GTK_EXPAND,
-				  0, 0, 0);
-		gtk_object_set_data (GTK_OBJECT (table), "auth_optionmenu",
-				     auth_optionmenu);
-
-		autodetect = gtk_button_new_with_label (_("Detect supported types..."));
-		gtk_table_attach (GTK_TABLE (table), autodetect, 2, 3,
-				  row, row + 1, 0, 0, 0, 0);
-		gtk_widget_set_sensitive (autodetect, FALSE);
-		gtk_signal_connect (GTK_OBJECT (autodetect), "clicked",
-				    GTK_SIGNAL_FUNC (autodetect_cb), table);
-		gtk_object_set_data (GTK_OBJECT (table), "autodetect",
-				     autodetect);
-
-		auth_html = html_new (TRUE);
-		gtk_table_attach (GTK_TABLE (table), auth_html->parent->parent,
-				  0, 3, row + 1, row + 2,
-				  GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-		gtk_object_set_data (GTK_OBJECT (table), "auth_html",
-				     auth_html);
-
-		fill_auth_menu (GTK_OPTION_MENU (auth_optionmenu),
-				GTK_HTML (auth_html), st->authtypes);
-
-		row += 2;
-	}
-
-	if (row != 0) {
-		GtkWidget *check;
-
-		check = gtk_check_button_new_with_label (
-			_("Test these values before continuing"));
-		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
-		gtk_table_attach (GTK_TABLE (table), check, 0, 3,
-				  row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
-		gtk_object_set_data (GTK_OBJECT (table), "check", check);
-		row += 1;
-	}
-
-	gtk_table_resize (GTK_TABLE (table), row, 3);
-	gtk_widget_show_all (table);
-
-	return table;
-}
-
-static GtkWidget *
-create_transport (struct service_type *st)
-{
-	GtkWidget *table;
-	GtkWidget *auth, *auth_optionmenu, *auth_html;
-	GtkWidget *autodetect;
-	int row, service_flags;
-
-	table = gtk_table_new (5, 3, FALSE);
-	gtk_table_set_row_spacings (GTK_TABLE (table), 2);
-	gtk_table_set_col_spacings (GTK_TABLE (table), 10);
-	gtk_container_set_border_width (GTK_CONTAINER (table), 8);
-	gtk_object_set_data (GTK_OBJECT (table), "protocol",
-			     st->provider->protocol);
-	gtk_object_set_data (GTK_OBJECT (table), "service_type",
-			     GUINT_TO_POINTER (CAMEL_PROVIDER_TRANSPORT));
-
-	row = 0;
-	service_flags = st->service->url_flags &
-		~CAMEL_SERVICE_URL_NEED_AUTH;
-
-	if (service_flags & CAMEL_SERVICE_URL_NEED_HOST) {
-		add_row (table, row, _("Server:"), "server_entry",
-			 CAMEL_SERVICE_URL_NEED_HOST);
-		row++;
-	}
-
-	if (st->authtypes) {
-		auth = gtk_label_new (_("Authentication:"));
-		gtk_table_attach (GTK_TABLE (table), auth, 0, 1,
-				  row, row + 1, GTK_FILL, 0, 0, 0);
-		gtk_misc_set_alignment (GTK_MISC (auth), 1, 0.5);
-
-		auth_optionmenu = gtk_option_menu_new ();
-		gtk_table_attach (GTK_TABLE (table), auth_optionmenu, 1, 2,
-				  row, row + 1, GTK_FILL | GTK_EXPAND,
-				  0, 0, 0);
-		gtk_object_set_data (GTK_OBJECT (table), "auth_optionmenu",
-				     auth_optionmenu);
-
-		autodetect = gtk_button_new_with_label (_("Detect supported types..."));
-		gtk_table_attach (GTK_TABLE (table), autodetect, 2, 3,
-				  row, row + 1, 0, 0, 0, 0);
-		gtk_widget_set_sensitive (autodetect, FALSE);
-		gtk_object_set_data (GTK_OBJECT (table), "autodetect",
-				     autodetect);
-
-		auth_html = html_new (TRUE);
-		gtk_table_attach (GTK_TABLE (table), auth_html->parent->parent,
-				  0, 3, row + 1, row + 2,
-				  GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-		fill_auth_menu (GTK_OPTION_MENU (auth_optionmenu),
-				GTK_HTML (auth_html), st->authtypes);
-
-		row += 2;
-	}
-
-	if (row != 0) {
-		GtkWidget *check;
-
-		check = gtk_check_button_new_with_label (
-			_("Test these values before continuing"));
-		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
-		gtk_table_attach (GTK_TABLE (table), check, 0, 3,
-				  row, row + 1, GTK_FILL | GTK_EXPAND,
-				  GTK_FILL, 0, 0);
-		gtk_object_set_data (GTK_OBJECT (table), "check", check);
-		row += 1;
-	}
-
-	gtk_table_resize (GTK_TABLE (table), row, 3);
-	gtk_widget_show_all (table);
-
-	return table;
-}
-
-static void
-stype_menuitem_activate (GtkObject *menuitem, GtkObject *table)
-{
-	GtkHTML *html;
-	char *text;
-	int page;
-	GtkNotebook *notebook;
-
-	text = gtk_object_get_data (menuitem, "description");
-	html = gtk_object_get_data (table, "html");
-	put_html (html, text);
-
-	page = GPOINTER_TO_UINT (gtk_object_get_data (menuitem, "page"));
-	notebook = gtk_object_get_data (table, "notebook");
-	gtk_notebook_set_page (notebook, page);
-	service_note_doneness (GTK_OBJECT (gtk_notebook_get_nth_page (notebook,
-								      page)),
-			       NULL);			       
-}
-
-/* Create the mail source/transport page. */
-static void
-create_service_page (GtkWidget *vbox, const char *label_text, GList *services,
-		     GtkWidget *(*create_service)(struct service_type *),
-		     char **urlp)
-{
-	GtkWidget *hbox, *stype, *stype_optionmenu, *stype_menu;
-	GtkWidget *menuitem, *first_menuitem = NULL;
-	GtkWidget *stype_html, *notebook, *service;
-	int page;
-	GList *s;
-
-	hbox = gtk_hbox_new (FALSE, 8);
-	gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
-
-	stype = gtk_label_new (label_text);
-	gtk_box_pack_start (GTK_BOX (hbox), stype, FALSE, FALSE, 0);
-	gtk_misc_set_alignment (GTK_MISC (stype), 1, 0.5);
-
-	stype_optionmenu = gtk_option_menu_new ();
-	gtk_box_pack_start (GTK_BOX (hbox), stype_optionmenu, TRUE, TRUE, 0);
-	stype_menu = gtk_menu_new ();
-	gtk_option_menu_set_menu (GTK_OPTION_MENU (stype_optionmenu),
-				  stype_menu);
-
-	stype_html = html_new (TRUE);
-	gtk_object_set_data (GTK_OBJECT (vbox), "html", stype_html);
-	gtk_box_pack_start (GTK_BOX (vbox), stype_html->parent->parent,
-			    TRUE, TRUE, 0);
-
-	notebook = gtk_notebook_new ();
-	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE);
-	gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
-	gtk_object_set_data (GTK_OBJECT (vbox), "notebook", notebook);
-	gtk_signal_connect (GTK_OBJECT (notebook), "destroy",
-			    GTK_SIGNAL_FUNC (destroy_service), urlp);
-
-	for (s = services, page = 0; s; s = s->next, page++) {
-		struct service_type *st = s->data;
-
-		menuitem = gtk_menu_item_new_with_label (_(st->provider->name));
-		if (!first_menuitem)
-			first_menuitem = menuitem;
-		gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
-				    GTK_SIGNAL_FUNC (stype_menuitem_activate),
-				    vbox);
-		gtk_menu_append (GTK_MENU (stype_menu), menuitem);
-
-		service = (*create_service) (st);
-		gtk_notebook_append_page (GTK_NOTEBOOK (notebook), service,
-					  NULL);
-		gtk_object_set_data (GTK_OBJECT (service), "box", vbox);
-
-		gtk_object_set_data (GTK_OBJECT (menuitem), "page",
-				     GUINT_TO_POINTER (page));
-		gtk_object_set_data (GTK_OBJECT (menuitem), "description",
-				     st->provider->description);
-	}
-
-	stype_menuitem_activate (GTK_OBJECT (first_menuitem),
-				 GTK_OBJECT (vbox));
-	gtk_option_menu_set_history (GTK_OPTION_MENU (stype_optionmenu), 0);
-
-	gtk_widget_show_all (vbox);
-}
-
-static void
-create_source_page (GtkWidget *vbox, GList *sources, char **urlp)
-{
-	GtkWidget *html;
-
-	html = html_new (FALSE);
-	put_html (GTK_HTML (html),
-		  _("Select the kind of mail server you have, and enter "
-		    "the relevant information about it.\n\nIf the server "
-		    "requires authentication, you can click the "
-		    "\"Detect supported types...\" button after entering "
-		    "the other information."));
-	gtk_box_pack_start (GTK_BOX (vbox), html->parent, FALSE, TRUE, 0);
-
-	create_service_page (vbox, "Mail source type:", sources,
-			     create_source, urlp);
-}
-
-static void
-create_transport_page (GtkWidget *vbox, GList *transports, char **urlp)
-{
-	GtkWidget *html;
-
-	html = html_new (FALSE);
-	put_html (GTK_HTML (html),
-		  _("Select the method you would like to use to deliver "
-		    "your mail."));
-	gtk_box_pack_start (GTK_BOX (vbox), html->parent, FALSE, TRUE, 0);
-
-	create_service_page (vbox, "Mail transport type:", transports,
-			     create_transport, urlp);
-}
-
-
-/* Generic stuff */
-
-static GList *
-add_service (GList *services, CamelProviderType type, CamelProvider *prov)
-{
-	CamelService *service;
-	CamelException *ex;
-	char *url;
-	struct service_type *st;
-
-	ex = camel_exception_new ();
-
-	url = g_strdup_printf ("%s:", prov->protocol);
-	service = camel_session_get_service (session, url, type, ex);
-	g_free (url);
-	if (!service) {
-		camel_exception_free (ex);
-		return services;
-	}
-
-	st = g_new (struct service_type, 1);
-	st->provider = prov;
-	st->service = service;
-	st->authtypes = camel_service_query_auth_types (st->service, ex);
-	camel_exception_free (ex);
-
-	return g_list_append (services, st);
-}
-
-static GdkImlibImage *
-load_image (const char *name)
-{
-	char *path;
-	GdkImlibImage *image;
-
-	path = g_strdup_printf ("/usr/local/share/images/evolution/%s", name);
-	image = gdk_imlib_load_image (path);
-	g_free (path);
-
-	return image;
-}
-
-static void
-prepare_first (GnomeDruidPage *page, GnomeDruid *druid, gpointer user_data)
-{
-	gnome_druid_set_buttons_sensitive (druid, TRUE, TRUE, TRUE);
-}
-
-static struct identity_record idrec;
-static char *source, *transport;
-
-static void
-cancel (GnomeDruid *druid, gpointer window)
-{
-	gtk_window_set_modal (window, FALSE);
-	gtk_widget_destroy (window);
-	gtk_main_quit ();
-}
-
-static void
-finish (GnomeDruidPage *page, gpointer arg1, gpointer window)
-{
-	char *path;
-
-	cancel (arg1, window);
-
-	/* According to the API docs, there's an easier way to do this,
-	 * except that it doesn't work. Anyway, this will be replaced
-	 * by GConf eventually. FIXME.
-	 */
-
-	path = g_strdup_printf ("=%s/config=/mail/configured", evolution_dir);
-	gnome_config_set_bool (path, TRUE);
-	g_free (path);
-
-	path = g_strdup_printf ("=%s/config=/mail/id_name", evolution_dir);
-	gnome_config_set_string (path, idrec.name);
-	g_free (path);
-
-	path = g_strdup_printf ("=%s/config=/mail/id_addr", evolution_dir);
-	gnome_config_set_string (path, idrec.address);
-	g_free (path);
-
-	path = g_strdup_printf ("=%s/config=/mail/id_org", evolution_dir);
-	gnome_config_set_string (path, idrec.organization);
-	g_free (path);
-
-	path = g_strdup_printf ("=%s/config=/mail/id_sig", evolution_dir);
-	gnome_config_set_string (path, idrec.sigfile);
-	g_free (path);
-
-	path = g_strdup_printf ("=%s/config=/mail/source", evolution_dir);
-	gnome_config_set_string (path, source);
-	g_free (path);
-
-	path = g_strdup_printf ("=%s/config=/mail/transport", evolution_dir);
-	gnome_config_set_string (path, transport);
-	g_free (path);
-
-	gnome_config_sync ();
-}
-
-void
-mail_config_druid (void)
-{
-	GnomeDruid *druid;
-	GtkWidget *page, *window;
-	GnomeDruidPageStandard *dpage;
-	GList *providers, *p, *sources, *transports;
-	GdkImlibImage *mail_logo, *identity_logo;
-	GdkImlibImage *source_logo, *transport_logo;
-
-	/* Fetch list of all providers. */
-	providers = camel_session_list_providers (session, TRUE);
-	sources = transports = NULL;
-	for (p = providers; p; p = p->next) {
-		CamelProvider *prov = p->data;
-
-		if (strcmp (prov->domain, "mail") != 0)
-			continue;
-
-		if (prov->object_types[CAMEL_PROVIDER_STORE]) {
-			sources = add_service (sources,
-					       CAMEL_PROVIDER_STORE,
-					       prov);
-		} else if (prov->object_types[CAMEL_PROVIDER_TRANSPORT]) {
-			transports = add_service (transports,
-						  CAMEL_PROVIDER_TRANSPORT,
-						  prov);
-		}
-	}
-
-	mail_logo = load_image ("evolution-inbox.png");
-	identity_logo = load_image ("malehead.png");
-	source_logo = mail_logo;
-	transport_logo = load_image ("envelope.png");
-
-	window = gtk_window_new (GTK_WINDOW_DIALOG);
-	druid = GNOME_DRUID (gnome_druid_new ());
-	gtk_signal_connect (GTK_OBJECT (druid), "cancel",
-			    GTK_SIGNAL_FUNC (cancel), window);
-
-	/* Start page */
-	page = gnome_druid_page_start_new_with_vals (
-		_("Mail Configuration"),
-		"Welcome to the Evolution Mail configuration wizard!\n"
-		"By filling in some information about your email\n"
-		"settings,you can start sending and receiving email\n"
-		"right away. Click \"Next\" to continue.",
-		mail_logo, NULL);
-
-	gnome_druid_page_start_set_logo_bg_color (
-		GNOME_DRUID_PAGE_START (page),
-		&GNOME_DRUID_PAGE_START (page)->background_color);
-	gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
-	gtk_signal_connect (GTK_OBJECT (page), "prepare",
-			    GTK_SIGNAL_FUNC (prepare_first), NULL);
-	gtk_widget_show_all (page);
-
-
-	/* Identity page */
-	page = gnome_druid_page_standard_new_with_vals (_("Identity"),
-							identity_logo);
-	dpage = GNOME_DRUID_PAGE_STANDARD (page);
-	gnome_druid_page_standard_set_logo_bg_color (dpage,
-						     &dpage->background_color);
-	gtk_container_set_border_width (GTK_CONTAINER (dpage->vbox), 8);
-	gtk_box_set_spacing (GTK_BOX (dpage->vbox), 5);
-	create_identity_page (dpage->vbox, &idrec);
-	gtk_object_set_data (GTK_OBJECT (dpage->vbox), "exit_button",
-			     druid->next);
-	gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
-	gtk_signal_connect (GTK_OBJECT (page), "prepare",
-			    GTK_SIGNAL_FUNC (prepare_identity), dpage->vbox);
-	gtk_signal_connect (GTK_OBJECT (page), "next",
-			    GTK_SIGNAL_FUNC (identity_next), dpage->vbox);
-	gtk_widget_show (page);
-
-
-	/* Source page */
-	page = gnome_druid_page_standard_new_with_vals (_("Mail Source"),
-							source_logo);
-	dpage = GNOME_DRUID_PAGE_STANDARD (page);
-	gnome_druid_page_standard_set_logo_bg_color (dpage,
-						     &dpage->background_color);
-	gtk_container_set_border_width (GTK_CONTAINER (dpage->vbox), 8);
-	gtk_box_set_spacing (GTK_BOX (dpage->vbox), 5);
-	create_source_page (dpage->vbox, sources, &source);
-	gtk_object_set_data (GTK_OBJECT (dpage->vbox), "exit_button",
-			     druid->next);
-	gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
-	gtk_signal_connect (GTK_OBJECT (page), "prepare", 
-			    GTK_SIGNAL_FUNC (prepare_service), dpage->vbox);
-	gtk_signal_connect (GTK_OBJECT (page), "next", 
-			    GTK_SIGNAL_FUNC (service_next),
-			    gtk_object_get_data (GTK_OBJECT (dpage->vbox),
-						 "notebook"));
-	gtk_widget_show (page);
-
-
-	/* Transport page */
-	page = gnome_druid_page_standard_new_with_vals (_("Mail Transport"),
-							transport_logo);
-	dpage = GNOME_DRUID_PAGE_STANDARD (page);
-	gnome_druid_page_standard_set_logo_bg_color (dpage,
-						     &dpage->background_color);
-	gtk_container_set_border_width (GTK_CONTAINER (dpage->vbox), 8);
-	gtk_box_set_spacing (GTK_BOX (dpage->vbox), 5);
-	create_transport_page (dpage->vbox, transports, &transport);
-	gtk_object_set_data (GTK_OBJECT (dpage->vbox), "exit_button",
-			     druid->next);
-	gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
-	gtk_signal_connect (GTK_OBJECT (page), "prepare", 
-			    GTK_SIGNAL_FUNC (prepare_service), dpage->vbox);
-	gtk_signal_connect (GTK_OBJECT (page), "next", 
-			    GTK_SIGNAL_FUNC (service_next),
-			    gtk_object_get_data (GTK_OBJECT (dpage->vbox),
-						 "notebook"));
-	gtk_widget_show (page);
-
-
-	/* Finish page */
-	page = gnome_druid_page_finish_new_with_vals (
-		_("Mail Configuration"),
-		"Your email configuration is now complete.\n"
-		"Click \"finish\" to save your new settings",
-		mail_logo, NULL);
-	gnome_druid_page_finish_set_logo_bg_color (
-		GNOME_DRUID_PAGE_FINISH (page),
-		&GNOME_DRUID_PAGE_FINISH (page)->background_color);
-	gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page));
-	gtk_signal_connect (GTK_OBJECT (page), "finish",
-			    GTK_SIGNAL_FUNC (finish), window);
-	gtk_widget_show_all (page);
-
-	gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (druid));
-
-	gtk_widget_show (GTK_WIDGET (druid));
-	gtk_widget_show (window);
-	gtk_widget_queue_resize (window);
-	gnome_druid_set_buttons_sensitive (druid, FALSE, TRUE, TRUE);
-
-	gtk_window_set_modal (GTK_WINDOW (window), TRUE);
-	gtk_main ();
-}
diff --git a/mail/mail-display.c b/mail/mail-display.c
deleted file mode 100644
index b72169327e..0000000000
--- a/mail/mail-display.c
+++ /dev/null
@@ -1,365 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * mail-display.c: Mail display widget
- *
- * Author:
- *   Miguel de Icaza
- *   Bertrand Guiheneuf (bg@aful.org)
- *
- * (C) 2000 Helix Code, Inc.
- */
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "e-util/e-setup.h"
-#include "e-util/e-util.h"
-#include "mail-display.h"
-#include "mail.h"
-
-#define PARENT_TYPE (gtk_vbox_get_type ())
-
-static GtkObjectClass *mail_display_parent_class;
-
-
-/*----------------------------------------------------------------------*
- *                        Callbacks
- *----------------------------------------------------------------------*/
-
-static void
-save_data_eexist_cb (int reply, gpointer user_data)
-{
-	gboolean *ok = user_data;
-
-	*ok = reply == 0;
-	gtk_main_quit ();
-}
-
-static void
-save_data_cb (GtkWidget *widget, gpointer user_data)
-{
-	CamelDataWrapper *data = user_data;
-	CamelStream *stream_fs;
-	GtkFileSelection *file_select = (GtkFileSelection *)
-		gtk_widget_get_ancestor (widget, GTK_TYPE_FILE_SELECTION);
-	char *name;
-	int fd;
-
-	name = gtk_file_selection_get_filename (file_select);
-
-	fd = open (name, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
-	if (fd == -1 && errno == EEXIST) {
-		gboolean ok = FALSE;
-
-		gnome_ok_cancel_dialog_modal_parented (
-			"A file by that name already exists.\nOverwrite it?",
-			save_data_eexist_cb, &ok, GTK_WINDOW (file_select));
-		gtk_main ();
-		if (!ok)
-			return;
-		fd = open (name, O_WRONLY | O_TRUNC);
-	}
-
-	if (fd == -1) {
-		char *msg;
-
-		msg = g_strdup_printf ("Could not open file %s:\n%s",
-				       name, g_strerror (errno));
-		gnome_error_dialog_parented (msg, GTK_WINDOW (file_select));
-		return;
-	}
-
-	stream_fs = camel_stream_fs_new_with_fd (fd);
-	if (camel_data_wrapper_write_to_stream (data, stream_fs) == -1
-	    || camel_stream_flush (stream_fs) == -1) {
-		char *msg;
-
-		msg = g_strdup_printf ("Could not write data: %s", strerror(errno));
-		gnome_error_dialog_parented (msg, GTK_WINDOW (file_select));
-	}
-	gtk_object_unref (GTK_OBJECT (stream_fs));
-
-	gtk_widget_destroy (GTK_WIDGET (file_select));
-}
-
-static void
-save_data (const char *cid, CamelMimeMessage *message)
-{
-	CamelDataWrapper *data;
-	GtkFileSelection *file_select;
-	char *filename;
-
-	g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message));
-	data = gtk_object_get_data (GTK_OBJECT (message), cid);
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data));
-
-	file_select = GTK_FILE_SELECTION (gtk_file_selection_new ("Save Attachment"));
-	filename = gtk_object_get_data (GTK_OBJECT (data), "filename");
-	if (filename)
-		filename = g_strdup_printf ("%s/%s", evolution_dir, filename);
-	else
-		filename = g_strdup_printf ("%s/attachment", evolution_dir);
-	gtk_file_selection_set_filename (file_select, filename);
-	g_free (filename);
-
-	gtk_signal_connect (GTK_OBJECT (file_select->ok_button), "clicked", 
-			    GTK_SIGNAL_FUNC (save_data_cb), data);
-	gtk_signal_connect_object (GTK_OBJECT (file_select->cancel_button),
-				   "clicked",
-				   GTK_SIGNAL_FUNC (gtk_widget_destroy),
-				   GTK_OBJECT (file_select));
-
-	gtk_widget_show (GTK_WIDGET (file_select));
-}
-
-static void
-on_link_clicked (GtkHTML *html, const char *url, gpointer user_data)
-{
-	if (!strncasecmp (url, "news:", 5) ||
-	    !strncasecmp (url, "nntp:", 5))
-		g_warning ("Can't handle news URLs yet.");
-	else if (!strncasecmp (url, "mailto:", 7))
-		send_to_url (url);
-	else if (!strncasecmp (url, "cid:", 4))
-		save_data (url + 4, user_data);
-	else
-		gnome_url_show (url);
-}
-
-static void
-on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle,
-		  gpointer user_data)
-{
-	CamelMimeMessage *message = CAMEL_MIME_MESSAGE (user_data);
-
-	if (strncmp (url, "x-gnome-icon:", 13) == 0) {
-		const char *name = url + 13;
-		/* FIXME: gnome_pixmap_file will cheerily accept icon
-		 * names like "../../../dev/zero". Anyway, this whole
-		 * hack needs to be replaced with something more
-		 * efficient anyway.
-		 */
-		char *path = gnome_pixmap_file (name), buf[1024];
-		int fd, nread;
-
-		g_return_if_fail (path != NULL);
-		fd = open (path, O_RDONLY);
-		g_free (path);
-		g_return_if_fail (fd != -1);
-
-		while (1) {
-			nread = read (fd, buf, sizeof (buf));
-			if (nread < 1)
-				break;
-			gtk_html_write (html, handle, buf, nread);
-		}
-		close (fd);
-	} else if (strncmp (url, "cid:", 4) == 0) {
-		const char *cid = url + 4;
-		CamelDataWrapper *data;
-		CamelStream *stream_mem;
-		GByteArray *ba;
-
-		data = gtk_object_get_data (GTK_OBJECT (message), cid);
-		g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data));
-
-		ba = g_byte_array_new ();
-		stream_mem = camel_stream_mem_new_with_byte_array (ba);
-		camel_data_wrapper_write_to_stream (data, stream_mem);
-		gtk_html_write (html, handle, ba->data, ba->len);
-		gtk_object_unref (GTK_OBJECT (stream_mem));
-	} else
-		return;
-}
-
-/* HTML part code */
-static void
-html_size_req (GtkWidget *widget, GtkRequisition *requisition)
-{
-	requisition->height = GTK_LAYOUT (widget)->height;
-	requisition->width = GTK_LAYOUT (widget)->width;
-}
-
-void
-mail_html_new (GtkHTML **html, GtkHTMLStream **stream,
-	       CamelMimeMessage *root, gboolean init)
-{
-	*html = GTK_HTML (gtk_html_new ());
-	gtk_html_set_editable (*html, FALSE);
-	gtk_signal_connect (GTK_OBJECT (*html), "size_request",
-			    GTK_SIGNAL_FUNC (html_size_req), NULL);
-	gtk_signal_connect (GTK_OBJECT (*html), "url_requested",
-			    GTK_SIGNAL_FUNC (on_url_requested), root);
-	gtk_signal_connect (GTK_OBJECT (*html), "link_clicked",
-			    GTK_SIGNAL_FUNC (on_link_clicked), root);
-
-	*stream = gtk_html_begin (*html);
-	if (init) {
-		mail_html_write (*html, *stream, HTML_HEADER
-				 "\n");
-	}
-}
-
-void
-mail_html_write (GtkHTML *html, GtkHTMLStream *stream,
-		 const char *format, ...)
-{
-	char *buf;
-	va_list ap;
-
-	va_start (ap, format);
-	buf = g_strdup_vprintf (format, ap);
-	va_end (ap);
-	gtk_html_write (html, stream, buf, strlen (buf));
-	g_free (buf);
-}
-
-void
-mail_html_end (GtkHTML *html, GtkHTMLStream *stream, gboolean finish, GtkBox *box)
-{
-	GtkWidget *scroll;
-
-	scroll = gtk_scrolled_window_new (NULL, NULL);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
-					GTK_POLICY_NEVER,
-					GTK_POLICY_NEVER);
-	gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (html));
-
-	if (finish)
-		mail_html_write (html, stream, "\n");
-	gtk_html_end (html, stream, GTK_HTML_STREAM_OK);
-
-	gtk_box_pack_start (box, scroll, FALSE, TRUE, 0);
-	gtk_widget_show (GTK_WIDGET (html));
-	gtk_widget_show (scroll);
-}
-
-
-
-
-/**
- * mail_display_set_message:
- * @mail_display: the mail display object
- * @mime_message: the input camel medium
- *
- * Makes the mail_display object show the contents of the medium
- * param. This means feeding mail_display->body_stream and
- * mail_display->headers_stream with html.
- *
- **/
-void 
-mail_display_set_message (MailDisplay *mail_display, 
-			  CamelMedium *medium)
-{
-	GtkAdjustment *adj;
-
-	/*
-	 * for the moment, camel-formatter deals only with 
-	 * mime messages, but in the future, it should be 
-	 * able to deal with any medium.
-	 * It can work on pretty much data wrapper, but in 
-	 * fact, only the medium class has the distinction 
-	 * header / body 
-	 */
-	if (!CAMEL_IS_MIME_MESSAGE (medium))
-		return;
-
-	/* Clean up from previous message. */
-	if (mail_display->current_message) {
-		GtkContainer *container =
-			GTK_CONTAINER (mail_display->inner_box);
-		GList *htmls;
-
-		htmls = gtk_container_children (container);
-		while (htmls) {
-			gtk_container_remove (container, htmls->data);
-			htmls = htmls->next;
-		}
-
-		gtk_object_unref (GTK_OBJECT (mail_display->current_message));
-	}
-
-	mail_display->current_message = CAMEL_MIME_MESSAGE (medium);
-	gtk_object_ref (GTK_OBJECT (medium));
-
-	mail_format_mime_message (CAMEL_MIME_MESSAGE (medium),
-				  mail_display->inner_box);
-
-	adj = gtk_scrolled_window_get_vadjustment (mail_display->scroll);
-	gtk_adjustment_set_value (adj, 0);
-	gtk_scrolled_window_set_vadjustment (mail_display->scroll, adj);
-
-	adj = gtk_scrolled_window_get_hadjustment (mail_display->scroll);
-	gtk_adjustment_set_value (adj, 0);
-	gtk_scrolled_window_set_hadjustment (mail_display->scroll, adj);
-}
-
-
-/*----------------------------------------------------------------------*
- *                     Standard Gtk+ Class functions
- *----------------------------------------------------------------------*/
-
-static void
-mail_display_init (GtkObject *object)
-{
-	MailDisplay *mail_display = MAIL_DISPLAY (object);
-
-	/* various other initializations */
-	mail_display->current_message = NULL;
-}
-
-static void
-mail_display_destroy (GtkObject *object)
-{
-	/* MailDisplay *mail_display = MAIL_DISPLAY (object); */
-
-	mail_display_parent_class->destroy (object);
-}
-
-static void
-mail_display_class_init (GtkObjectClass *object_class)
-{
-	object_class->destroy = mail_display_destroy;
-	mail_display_parent_class = gtk_type_class (PARENT_TYPE);
-}
-
-GtkWidget *
-mail_display_new (FolderBrowser *parent_folder_browser)
-{
-	MailDisplay *mail_display = gtk_type_new (mail_display_get_type ());
-	GtkWidget *scroll, *vbox;
-
-	g_assert (parent_folder_browser);
-
-	mail_display->parent_folder_browser = parent_folder_browser;
-
-	gtk_box_set_homogeneous (GTK_BOX (mail_display), FALSE);
-	gtk_widget_show (GTK_WIDGET (mail_display));
-
-	/* For now, the box only contains a single scrolled window,
-	 * which in turn contains a vbox itself.
-	 */
-	scroll = gtk_scrolled_window_new (NULL, NULL);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
-					GTK_POLICY_AUTOMATIC,
-					GTK_POLICY_ALWAYS);
-	gtk_box_pack_start_defaults (GTK_BOX (mail_display),
-				     GTK_WIDGET (scroll));
-	gtk_widget_show (GTK_WIDGET (scroll));
-
-	vbox = gtk_vbox_new (FALSE, 2);
-	gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll),
-					       vbox);
-	gtk_widget_show (GTK_WIDGET (vbox));
-
-	mail_display->scroll = GTK_SCROLLED_WINDOW (scroll);
-	mail_display->inner_box = GTK_BOX (vbox);
-
-	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-display.h b/mail/mail-display.h
deleted file mode 100644
index 0d38d4e432..0000000000
--- a/mail/mail-display.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-#ifndef _MAIL_DISPLAY_H_
-#define _MAIL_DISPLAY_H_
-
-#include 
-#include 
-#include "camel/camel-stream.h"
-#include "camel/camel-mime-message.h"
-#include "folder-browser.h"
-
-
-#define MAIL_DISPLAY_TYPE        (mail_display_get_type ())
-#define MAIL_DISPLAY(o)          (GTK_CHECK_CAST ((o), MAIL_DISPLAY_TYPE, MailDisplay))
-#define MAIL_DISPLAY_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), MAIL_DISPLAY_TYPE, MailDisplayClass))
-#define IS_MAIL_DISPLAY(o)       (GTK_CHECK_TYPE ((o), MAIL_DISPLAY_TYPE))
-#define IS_MAIL_DISPLAY_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MAIL_DISPLAY_TYPE))
-
-struct _MailDisplay {
-	GtkVBox parent;
-
-	GtkScrolledWindow *scroll;
-	GtkBox *inner_box;
-
-	FolderBrowser *parent_folder_browser;
-	CamelMimeMessage *current_message;
-};
-
-typedef struct {
-	GtkVBoxClass parent_class;
-} MailDisplayClass;
-
-GtkType        mail_display_get_type    (void);
-GtkWidget *    mail_display_new         (FolderBrowser *parent_folder_browser);
-
-void           mail_display_set_message (MailDisplay *mail_display, 
-					 CamelMedium *medium);
-
-
-#define HTML_HEADER "\n\n\n\n\n"
-
-void           mail_html_new            (GtkHTML **html,
-					 GtkHTMLStream **stream,
-					 CamelMimeMessage *root,
-					 gboolean init);
-void           mail_html_write          (GtkHTML *html,
-					 GtkHTMLStream *stream,
-					 const char *format, ...);
-void           mail_html_end            (GtkHTML *html,
-					 GtkHTMLStream *stream,
-					 gboolean finish,
-					 GtkBox *box);
-
-#endif /* _MAIL_DISPLAY_H_ */
diff --git a/mail/mail-format.c b/mail/mail-format.c
deleted file mode 100644
index 429e94f2d0..0000000000
--- a/mail/mail-format.c
+++ /dev/null
@@ -1,1532 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/*
- * Authors:
- *  Matt Loper 
- *  Dan Winship 
- *
- *  Copyright 2000, Helix Code, Inc. (http://www.helixcode.com)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include 
-#include "mail-display.h"
-#include "mail.h"
-#include "e-util/e-html-utils.h"
-
-#include 
-#include 
-#include 
-#include 
-
-#include     /* for isprint */
-#include    /* for strstr  */
-#include 
-
-static void handle_text_plain            (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_text_plain_flowed     (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_text_enriched         (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_text_html             (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_image                 (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_multipart_mixed       (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_multipart_related     (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_multipart_alternative (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_multipart_appledouble (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_audio                 (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_message_rfc822        (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_message_external_body (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-
-static void handle_unknown_type          (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-static void handle_via_bonobo            (CamelMimePart *part,
-					  const char *mime_type,
-					  CamelMimeMessage *root,
-					  GtkBox *box);
-
-/* writes the header info for a mime message into an html stream */
-static void write_headers (CamelMimeMessage *mime_message, GtkBox *box);
-
-/* dispatch html printing via mimetype */
-static void call_handler_function (CamelMimePart *part,
-				   CamelMimeMessage *root,
-				   GtkBox *box);
-
-
-/**
- * mail_format_mime_message: 
- * @mime_message: the input mime message
- * @box: GtkBox to stack elements into.
- *
- * Writes a CamelMimeMessage out, as a series of GtkHTML objects,
- * into the provided box.
- **/
-void
-mail_format_mime_message (CamelMimeMessage *mime_message, GtkBox *box)
-{
-	g_return_if_fail (CAMEL_IS_MIME_MESSAGE (mime_message));
-	g_return_if_fail (GTK_IS_BOX (box));
-
-	write_headers (mime_message, box);
-	call_handler_function (CAMEL_MIME_PART (mime_message),
-			       mime_message, box);
-}
-
-static char *
-get_cid (CamelMimePart *part, CamelMimeMessage *root)
-{
-	CamelDataWrapper *wrapper =
-		camel_medium_get_content_object (CAMEL_MEDIUM (part));
-	char *cid;
-	const char *filename;
-
-	/* If we have a real Content-ID, use it. If we don't,
-	 * make a (syntactically invalid) fake one.
-	 */
-	if (camel_mime_part_get_content_id (part))
-		cid = g_strdup (camel_mime_part_get_content_id (part));
-	else
-		cid = g_strdup_printf ("@@@%p", wrapper);
-
-	gtk_object_set_data (GTK_OBJECT (root), cid, wrapper);
-
-	/* Record the filename, in case the user wants to save this
-	 * data later.
-	 */
-	filename = camel_mime_part_get_filename (part);
-	if (filename) {
-		char *safe, *p;
-
-		safe = strrchr (filename, '/');
-		if (safe)
-			safe = g_strdup (safe + 1);
-		else
-			safe = g_strdup (filename);
-
-		for (p = safe; *p; p++) {
-			if (!isascii ((unsigned char)*p) ||
-			    strchr (" /'\"`&();|<>${}!", *p))
-				*p = '_';
-		}
-
-		gtk_object_set_data (GTK_OBJECT (wrapper), "filename", safe);
-	}
-
-	return cid;
-}
-
-
-/* We're maintaining a hashtable of mimetypes -> functions;
- * Those functions have the following signature...
- */
-typedef void (*mime_handler_fn) (CamelMimePart *part, const char *mime_type,
-				 CamelMimeMessage *root, GtkBox *box);
-
-static GHashTable *mime_function_table, *mime_fallback_table;
-
-static void
-setup_function_table (void)
-{
-	mime_function_table = g_hash_table_new (g_str_hash, g_str_equal);
-	mime_fallback_table = g_hash_table_new (g_str_hash, g_str_equal);
-
-	g_hash_table_insert (mime_function_table, "text/plain",
-			     handle_text_plain);
-	g_hash_table_insert (mime_function_table, "text/richtext",
-			     handle_text_enriched);
-	g_hash_table_insert (mime_function_table, "text/enriched",
-			     handle_text_enriched);
-	g_hash_table_insert (mime_function_table, "text/html",
-			     handle_text_html);
-
-	g_hash_table_insert (mime_function_table, "image/*",
-			     handle_image);
-
-	g_hash_table_insert (mime_function_table, "audio/*",
-			     handle_audio);
-
-	g_hash_table_insert (mime_function_table, "message/rfc822",
-			     handle_message_rfc822);
-	g_hash_table_insert (mime_function_table, "message/external-body",
-			     handle_message_external_body);
-
-	g_hash_table_insert (mime_function_table, "multipart/alternative",
-			     handle_multipart_alternative);
-	g_hash_table_insert (mime_function_table, "multipart/related",
-			     handle_multipart_related);
-	g_hash_table_insert (mime_function_table, "multipart/mixed",
-			     handle_multipart_mixed);
-	g_hash_table_insert (mime_function_table, "multipart/appledouble",
-			     handle_multipart_appledouble);
-
-	/* RFC 2046 says unrecognized text subtypes can be treated
-	 * as text/plain (as long as you recognize the character set),
-	 * and unrecognized multipart subtypes as multipart/mixed.
-	 */
-	g_hash_table_insert (mime_fallback_table, "text/*",
-			     handle_text_plain);
-	g_hash_table_insert (mime_function_table, "multipart/*",
-			     handle_multipart_mixed);
-}
-
-static mime_handler_fn
-lookup_handler (const char *mime_type, gboolean *generic)
-{
-	mime_handler_fn handler_function;
-	const char *whole_goad_id, *generic_goad_id;
-	char *mime_type_main;
-
-	if (mime_function_table == NULL)
-		setup_function_table ();
-
-	mime_type_main = g_strdup_printf ("%.*s/*",
-					  (int)strcspn (mime_type, "/"),
-					  mime_type);
-
-	/* OK. There are 6 possibilities, which we try in this order:
-	 *   1) full match in the main table
-	 *   2) partial match in the main table
-	 *   3) full match in bonobo
-	 *   4) full match in the fallback table
-	 *   5) partial match in the fallback table
-	 *   6) partial match in bonobo
-	 *
-	 * Of these, 1-4 are considered exact matches, and 5 and 6 are
-	 * considered generic.
-	 */
-
-	/* Check for full match in mime_function_table. */
-	handler_function = g_hash_table_lookup (mime_function_table,
-						mime_type);
-	if (!handler_function) {
-		handler_function = g_hash_table_lookup (mime_function_table,
-							mime_type_main);
-		if (handler_function) {
-			/* Optimize this for the next time through. */
-			g_hash_table_insert (mime_function_table,
-					     g_strdup (mime_type),
-					     handler_function);
-		}
-	}
-
-	if (handler_function) {
-		g_free (mime_type_main);
-		*generic = FALSE;
-		return handler_function;
-	}
-
-	whole_goad_id = gnome_mime_get_value (mime_type, "bonobo-goad-id");
-	generic_goad_id = gnome_mime_get_value (mime_type_main,
-						"bonobo-goad-id");
-
-	if (whole_goad_id && (!generic_goad_id ||
-			      strcmp (whole_goad_id, generic_goad_id) != 0)) {
-		/* Optimize this for the next time through. */
-		g_hash_table_insert (mime_function_table,
-				     g_strdup (mime_type),
-				     handle_via_bonobo);
-		g_free (mime_type_main);
-		*generic = FALSE;
-		return handle_via_bonobo;
-	}
-
-	handler_function = g_hash_table_lookup (mime_fallback_table,
-						mime_type);
-	if (handler_function)
-		*generic = FALSE;
-	else {
-		handler_function = g_hash_table_lookup (mime_fallback_table,
-							mime_type_main);
-		if (!handler_function && generic_goad_id)
-			handler_function = handle_via_bonobo;
-		*generic = TRUE;
-	}
-
-	g_free (mime_type_main);
-	return handler_function;
-}
-
-static void
-call_handler_function (CamelMimePart *part, CamelMimeMessage *root,
-		       GtkBox *box)
-{
-	CamelDataWrapper *wrapper;
-	char *mime_type;
-	mime_handler_fn handler_function = NULL;
-	gboolean generic;
-
-	wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part));
-	mime_type = camel_data_wrapper_get_mime_type (wrapper);
-	g_strdown (mime_type);
-
-	handler_function = lookup_handler (mime_type, &generic);
-	if (handler_function)
-		(*handler_function) (part, mime_type, root, box);
-	else
-		handle_unknown_type (part, mime_type, root, box);
-
-	g_free (mime_type);
-}
-
-static void
-write_field_to_stream (const char *description, const char *value,
-		       gboolean bold, GtkHTML *html,
-		       GtkHTMLStream *stream)
-{
-	char *encoded_value;
-
-	if (value) {
-		unsigned char *p;
-
-		encoded_value = e_text_to_html (value,
-						E_TEXT_TO_HTML_CONVERT_NL |
-						E_TEXT_TO_HTML_CONVERT_URLS);
-		for (p = (unsigned char *)encoded_value; *p; p++) {
-			if (!isprint (*p))
-				*p = '?';
-		}
-	} else
-		encoded_value = "";
-
-	mail_html_write (html, stream,
-			 "<%s align=right>%s"
-			 "%s", bold ? "th" : "td",
-			 description, bold ? "th" : "td", encoded_value);
-	if (value)
-		g_free (encoded_value);
-}
-
-static void
-write_recipients_to_stream (const gchar *recipient_type,
-			    const CamelInternetAddress *recipients,
-			    gboolean optional, gboolean bold,
-			    GtkHTML *html, GtkHTMLStream *stream)
-{
-	int i;
-	char *recipients_string = NULL;
-	const char *name, *addr;
-
-	i = 0;
-	while (camel_internet_address_get (recipients, i++, &name, &addr)) {
-		char *old_string = recipients_string;
-
-		if (*name) {
-			recipients_string = g_strdup_printf (
-				"%s%s\"%s\" <%s>",
-				old_string ? old_string : "",
-				old_string ? ", " : "",
-				name, addr);
-		} else {
-			recipients_string = g_strdup_printf (
-				"%s%s%s", old_string ? old_string : "",
-				old_string ? ", " : "", addr);
-		}
-		g_free (old_string);
-	}
-
-	if (recipients_string || !optional) {
-		write_field_to_stream (recipient_type, recipients_string,
-				       bold, html, stream);
-	}
-	g_free (recipients_string);
-}
-
-
-
-static void
-write_headers (CamelMimeMessage *mime_message, GtkBox *box)
-{
-	const CamelInternetAddress *recipients;
-	GtkHTML *html;
-	GtkHTMLStream *stream;
-
-	mail_html_new (&html, &stream, mime_message, FALSE);
-	mail_html_write (html, stream, "%s%s", HTML_HEADER,
-			 "\n");
-
-	mail_html_write (html, stream, "");
-
-	/* A few fields will probably be available from the mime_message;
-	 * for each one that's available, write it to the output stream
-	 * with a helper function, 'write_field_to_stream'.
-	 */
-
-	write_field_to_stream ("From:",
-			       camel_mime_message_get_from (mime_message),
-			       TRUE, html, stream);
-
-	if (camel_mime_message_get_reply_to (mime_message)) {
-		write_field_to_stream ("Reply-To:",
-				       camel_mime_message_get_reply_to (mime_message),
-				       FALSE, html, stream);
-	}
-
-	write_recipients_to_stream ("To:",
-				    camel_mime_message_get_recipients (mime_message, CAMEL_RECIPIENT_TYPE_TO),
-				    FALSE, TRUE, html, stream);
-
-	recipients = camel_mime_message_get_recipients (mime_message, CAMEL_RECIPIENT_TYPE_CC);
-	write_recipients_to_stream ("Cc:", recipients, TRUE, TRUE,
-				    html, stream);
-	write_field_to_stream ("Subject:",
-			       camel_mime_message_get_subject (mime_message),
-			       TRUE, html, stream);
-
-	mail_html_write (html, stream, "
"); - - mail_html_end (html, stream, TRUE, box); -} - -#define MIME_TYPE_WHOLE(a) (gmime_content_field_get_mime_type ( \ - camel_mime_part_get_content_type (CAMEL_MIME_PART (a)))) -#define MIME_TYPE_MAIN(a) ((camel_mime_part_get_content_type (CAMEL_MIME_PART (a)))->type) -#define MIME_TYPE_SUB(a) ((camel_mime_part_get_content_type (CAMEL_MIME_PART (a)))->subtype) - - -static char * -get_data_wrapper_text (CamelDataWrapper *data) -{ - CamelStream *memstream; - GByteArray *ba; - char *text; - - ba = g_byte_array_new (); - memstream = camel_stream_mem_new_with_byte_array (ba); - - camel_data_wrapper_write_to_stream (data, memstream); - text = g_malloc (ba->len + 1); - memcpy (text, ba->data, ba->len); - text[ba->len] = '\0'; - - gtk_object_unref (GTK_OBJECT (memstream)); - return text; -} - -/*----------------------------------------------------------------------* - * Mime handling functions - *----------------------------------------------------------------------*/ - -static void -handle_text_plain (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - GtkHTML *html; - GtkHTMLStream *stream; - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - char *text, *htmltext; - GMimeContentField *type; - const char *format; - - mail_html_new (&html, &stream, root, TRUE); - mail_html_write (html, stream, "\n\n
\n");
-
-	/* Check for RFC 2646 flowed text. */
-	type = camel_mime_part_get_content_type (part);
-	format = gmime_content_field_get_parameter (type, "format");
-	if (format && !g_strcasecmp (format, "flowed")) {
-		handle_text_plain_flowed (part, mime_type, root, box);
-		return;
-	}
-
-	text = get_data_wrapper_text (wrapper);
-	if (text && *text) {
-		htmltext = e_text_to_html (text, E_TEXT_TO_HTML_CONVERT_URLS);
-		mail_html_write (html, stream, "%s", htmltext);
-		g_free (htmltext);
-	} else
-		mail_html_write (html, stream, "(empty)");
-	g_free (text);
-
-	mail_html_write (html, stream, "
\n"); - mail_html_end (html, stream, TRUE, box); -} - -static void -handle_text_plain_flowed (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - GtkHTML *html; - GtkHTMLStream *stream; - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - char *buf, *text, *line, *eol, *p; - int prevquoting = 0, quoting, len; - gboolean br_pending = FALSE; - - mail_html_new (&html, &stream, root, TRUE); - mail_html_write (html, stream, - "\n\n\n"); - - buf = get_data_wrapper_text (wrapper); - for (line = buf; *line; line = eol + 1) { - /* Process next line */ - eol = strchr (line, '\n'); - if (eol) - *eol = '\0'; - - quoting = 0; - for (p = line; *p == '>'; p++) - quoting++; - if (quoting != prevquoting) { - mail_html_write (html, stream, "%s\n", - prevquoting == 0 ? "\n" : ""); - while (quoting > prevquoting) { - mail_html_write (html, stream, "
"); - prevquoting++; - } - while (quoting < prevquoting) { - mail_html_write (html, stream, - "
"); - prevquoting--; - } - mail_html_write (html, stream, "%s\n", - prevquoting == 0 ? "
\n" : ""); - } else if (br_pending) { - mail_html_write (html, stream, "
\n"); - br_pending = FALSE; - } - - if (*p == ' ') - p++; - - /* replace '<' with '<', etc. */ - 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, "%s", text); - g_free (text); - - len = strlen (p); - if (len == 0 || p[len - 1] != ' ' || !strcmp (p, "-- ")) - br_pending = TRUE; - - if (!eol) - break; - } - g_free (buf); - - mail_html_write (html, stream, "
\n"); - mail_html_end (html, stream, TRUE, box); -} - -/* text/enriched (RFC 1896) or text/richtext (included in RFC 1341) */ -static void -handle_text_enriched (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - static GHashTable *translations = NULL; - GtkHTML *html; - GtkHTMLStream *stream; - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelStream *memstream; - GByteArray *ba; - char *p; - int len, nofill = 0; - gboolean enriched; - - if (!translations) { - translations = g_hash_table_new (g_strcase_hash, - g_strcase_equal); - g_hash_table_insert (translations, "bold", ""); - g_hash_table_insert (translations, "/bold", ""); - g_hash_table_insert (translations, "italic", ""); - g_hash_table_insert (translations, "/italic", ""); - g_hash_table_insert (translations, "fixed", ""); - g_hash_table_insert (translations, "/fixed", ""); - g_hash_table_insert (translations, "smaller", ""); - g_hash_table_insert (translations, "/smaller", ""); - g_hash_table_insert (translations, "bigger", ""); - g_hash_table_insert (translations, "/bigger", ""); - g_hash_table_insert (translations, "underline", ""); - g_hash_table_insert (translations, "/underline", ""); - g_hash_table_insert (translations, "center", "

"); - g_hash_table_insert (translations, "/center", "

"); - g_hash_table_insert (translations, "flushleft", "

"); - g_hash_table_insert (translations, "/flushleft", "

"); - g_hash_table_insert (translations, "flushright", "

"); - g_hash_table_insert (translations, "/flushright", "

"); - g_hash_table_insert (translations, "excerpt", "
"); - g_hash_table_insert (translations, "/excerpt", "
"); - g_hash_table_insert (translations, "paragraph", "

"); - g_hash_table_insert (translations, "signature", "

"); - g_hash_table_insert (translations, "/signature", "
"); - g_hash_table_insert (translations, "comment", ""); - g_hash_table_insert (translations, "param", ""); - g_hash_table_insert (translations, "np", "
"); - } - - mail_html_new (&html, &stream, root, TRUE); - if (!g_strcasecmp (mime_type, "text/richtext")) { - enriched = FALSE; - mail_html_write (html, stream, "\n\n"); - } else { - enriched = TRUE; - mail_html_write (html, stream, "\n\n"); - } - - ba = g_byte_array_new (); - memstream = camel_stream_mem_new_with_byte_array (ba); - camel_data_wrapper_write_to_stream (wrapper, memstream); - g_byte_array_append (ba, "", 1); - - p = ba->data; - - while (p) { - len = strcspn (p, " <>&\n"); - if (len) - gtk_html_write (html, stream, p, len); - - p += len; - if (!*p) - break; - - switch (*p++) { - case ' ': - while (*p == ' ') { - mail_html_write (html, stream, " "); - p++; - } - mail_html_write (html, stream, " "); - break; - - case '\n': - mail_html_write (html, stream, " "); - if (enriched && nofill <= 0) { - while (*p == '\n') { - mail_html_write (html, stream, "
"); - p++; - } - } - break; - - case '>': - mail_html_write (html, stream, ">"); - break; - - case '&': - mail_html_write (html, stream, "&"); - break; - - case '<': - if (enriched) { - if (*p == '<') { - mail_html_write (html, stream, "<"); - p++; - break; - } - } else { - if (strncmp (p, "lt>", 3) == 0) { - mail_html_write (html, stream, "<"); - p += 3; - break; - } else if (strncmp (p, "nl>", 3) == 0) { - mail_html_write (html, stream, "
"); - p += 3; - break; - } - } - - if (strncmp (p, "nofill>", 7) == 0) { - nofill++; - mail_html_write (html, stream, "
");
-			} else if (strncmp (p, "/nofill>", 8) == 0) {
-				nofill--;
-				mail_html_write (html, stream, "
"); - } else { - char *copy, *match; - - len = strcspn (p, ">"); - copy = g_strndup (p, len); - match = g_hash_table_lookup (translations, - copy); - g_free (copy); - if (match) { - mail_html_write (html, stream, "%s", - match); - } - } - - p = strchr (p, '>'); - if (p) - p++; - } - } - - mail_html_end (html, stream, TRUE, box); -} - -static void -handle_text_html (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - GtkHTML *html; - GtkHTMLStream *stream; - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - char *text; - - mail_html_new (&html, &stream, root, FALSE); - mail_html_write (html, stream, "\n\n"); - - text = get_data_wrapper_text (wrapper); - mail_html_write (html, stream, "%s", text); - g_free (text); - - mail_html_end (html, stream, FALSE, box); -} - -static void -handle_image (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - GtkHTML *html; - GtkHTMLStream *stream; - char *cid; - - cid = get_cid (part, root); - mail_html_new (&html, &stream, root, TRUE); - mail_html_write (html, stream, "", cid); - mail_html_end (html, stream, TRUE, box); - g_free (cid); -} - -static void -handle_multipart_mixed (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelMultipart *mp; - int i, nparts; - - g_return_if_fail (CAMEL_IS_MULTIPART (wrapper)); - mp = CAMEL_MULTIPART (wrapper); - - nparts = camel_multipart_get_number (mp); - for (i = 0; i < nparts; i++) { - part = camel_multipart_get_part (mp, i); - - call_handler_function (part, root, box); - } -} - -/* As seen in RFC 2387! */ -static void -handle_multipart_related (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelMultipart *mp; - CamelMimePart *body_part, *display_part = NULL; - GMimeContentField *content_type; - const char *start; - int i, nparts; - - g_return_if_fail (CAMEL_IS_MULTIPART (wrapper)); - mp = CAMEL_MULTIPART (wrapper); - nparts = camel_multipart_get_number (mp); - - content_type = camel_mime_part_get_content_type (part); - start = gmime_content_field_get_parameter (content_type, "start"); - if (start) { - int len; - - /* The "start" parameter includes <>s, which Content-Id - * does not. - */ - len = strlen (start) - 2; - - for (i = 0; i < nparts; i++) { - const char *cid; - - body_part = camel_multipart_get_part (mp, i); - cid = camel_mime_part_get_content_id (body_part); - - if (!strncmp (cid, start + 1, len) && - strlen (cid) == len) { - display_part = body_part; - break; - } - } - - if (!display_part) { - /* Oops. Hrmph. */ - handle_multipart_mixed (part, mime_type, root, box); - } - } else { - /* No start parameter, so it defaults to the first part. */ - display_part = camel_multipart_get_part (mp, 0); - } - - /* Record the Content-IDs of any non-displayed parts. */ - for (i = 0; i < nparts; i++) { - char *cid; - - body_part = camel_multipart_get_part (mp, i); - if (body_part == display_part) - continue; - - cid = get_cid (body_part, root); - g_free (cid); - } - - /* Now, display the displayed part. */ - call_handler_function (display_part, root, box); -} - -/* RFC 2046 says "display the last part that you are able to display". */ -static CamelMimePart * -find_preferred_alternative (CamelMultipart *multipart) -{ - int i, nparts; - CamelMimePart *preferred_part = NULL; - gboolean generic; - - nparts = camel_multipart_get_number (multipart); - for (i = 0; i < nparts; i++) { - CamelMimePart *part = camel_multipart_get_part (multipart, i); - char *mime_type = gmime_content_field_get_mime_type ( - camel_mime_part_get_content_type (part)); - - g_strdown (mime_type); - if (lookup_handler (mime_type, &generic) && - (!preferred_part || !generic)) - preferred_part = part; - g_free (mime_type); - } - - return preferred_part; -} - -static void -handle_multipart_alternative (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelMultipart *multipart; - CamelMimePart *mime_part; - - g_return_if_fail (CAMEL_IS_MULTIPART (wrapper)); - multipart = CAMEL_MULTIPART (wrapper); - - mime_part = find_preferred_alternative (multipart); - if (mime_part) - call_handler_function (mime_part, root, box); - else - handle_unknown_type (part, mime_type, root, box); -} - -/* RFC 1740 */ -static void -handle_multipart_appledouble (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelMultipart *multipart; - - g_return_if_fail (CAMEL_IS_MULTIPART (wrapper)); - multipart = CAMEL_MULTIPART (wrapper); - - /* The first part is application/applefile and is not useful - * to us. The second part _may_ be displayable data. Most - * likely it's application/octet-stream though. - */ - part = camel_multipart_get_part (multipart, 1); - call_handler_function (part, root, box); -} - -static void -handle_mystery (CamelMimePart *part, CamelMimeMessage *root, GtkBox *box, - const char *url, const char *icon_name, const char *id, - const char *action) -{ - GtkHTML *html; - GtkHTMLStream *stream; - const char *info; - char *htmlinfo; - GMimeContentField *content_type; - - mail_html_new (&html, &stream, root, TRUE); - mail_html_write (html, stream, "
"); - - /* Draw the icon, surrounded by an if we have a URL, - * or a plain inactive border if not. - */ - if (url) - mail_html_write (html, stream, "", url); - else - mail_html_write (html, stream, "
"); - mail_html_write (html, stream, "", - icon_name); - if (url) - mail_html_write (html, stream, ""); - else - mail_html_write (html, stream, "
"); - mail_html_write (html, stream, "
%s
", id); - - /* Write a description, if we have one. */ - info = camel_mime_part_get_description (part); - if (info) { - htmlinfo = e_text_to_html (info, E_TEXT_TO_HTML_CONVERT_URLS); - mail_html_write (html, stream, "Description: %s
", - htmlinfo); - g_free (htmlinfo); - } - - /* Write the name, if we have it. */ - content_type = camel_mime_part_get_content_type (part); - info = gmime_content_field_get_parameter (content_type, "name"); - if (!info) - info = camel_mime_part_get_filename (part); - if (info) { - htmlinfo = e_text_to_html (info, 0); - mail_html_write (html, stream, "Name: %s
", - htmlinfo); - g_free (htmlinfo); - } - - /* Describe the click action, if any. */ - if (action) { - mail_html_write (html, stream, - "
Click on the icon to %s.", action); - } - - mail_html_write (html, stream, "
"); - mail_html_end (html, stream, TRUE, box); -} - -static void -handle_audio (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - char *id, *cid; - const char *desc; - - desc = gnome_mime_get_value (mime_type, "description"); - if (desc) - id = g_strdup_printf ("%s data", desc); - else { - id = g_strdup_printf ("Audio data in \"%s\" format.", - mime_type); - } - cid = g_strdup_printf ("cid:%s", get_cid (part, root)); - handle_mystery (part, root, box, cid, "gnome-audio2.png", - id, "play it"); - g_free (cid); - g_free (id); -} - -static void -handle_message_rfc822 (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - GtkWidget *subbox, *frame; - - g_return_if_fail (CAMEL_IS_MIME_MESSAGE (wrapper)); - - subbox = gtk_vbox_new (FALSE, 2); - mail_format_mime_message (CAMEL_MIME_MESSAGE (wrapper), - GTK_BOX (subbox)); - - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_container_set_border_width (GTK_CONTAINER (frame), 8); - gtk_box_pack_start (box, frame, FALSE, FALSE, 0); - gtk_container_add (GTK_CONTAINER (frame), subbox); - gtk_widget_show_all (frame); -} - -static void -handle_message_external_body (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - GMimeContentField *type; - const char *access_type; - char *url = NULL, *desc = NULL; - - type = camel_mime_part_get_content_type (part); - access_type = gmime_content_field_get_parameter (type, "access-type"); - if (!access_type) - goto fallback; - - if (!g_strcasecmp (access_type, "ftp") || - !g_strcasecmp (access_type, "anon-ftp")) { - const char *name, *site, *dir, *mode, *ftype; - char *path; - - name = gmime_content_field_get_parameter (type, "name"); - site = gmime_content_field_get_parameter (type, "site"); - if (name == NULL || site == NULL) - goto fallback; - dir = gmime_content_field_get_parameter (type, "directory"); - mode = gmime_content_field_get_parameter (type, "mode"); - - /* Generate the path. */ - if (dir) { - const char *p = dir + strlen (dir); - - path = g_strdup_printf ("%s%s%s%s", - *dir == '/' ? "" : "/", - dir, - *p == '/' ? "" : "/", - name); - } else { - path = g_strdup_printf ("%s%s", - *name == '/' ? "" : "/", - name); - } - - if (mode && *mode == 'A') - ftype = ";type=A"; - else if (mode && *mode == 'I') - ftype = ";type=I"; - else - ftype = ""; - - url = g_strdup_printf ("ftp://%s%s%s", site, path, ftype); - g_free (path); - desc = g_strdup_printf ("Pointer to FTP site (%s)", url); - } else if (!g_strcasecmp (access_type, "local-file")) { - const char *name, *site; - - name = gmime_content_field_get_parameter (type, "name"); - if (name == NULL) - goto fallback; - site = gmime_content_field_get_parameter (type, "site"); - - url = g_strdup_printf ("file://%s%s", *name == '/' ? "" : "/", - name); - desc = g_strdup_printf ("Pointer to local file (%s)%s%s%s", - name, site ? " valid at site \"" : "", - site ? site : "", site ? "\"" : ""); - } else if (!g_strcasecmp (access_type, "URL")) { - const char *urlparam; - char *s, *d; - - /* RFC 2017 */ - - urlparam = gmime_content_field_get_parameter (type, "url"); - if (urlparam == NULL) - goto fallback; - - /* For obscure MIMEy reasons, the URL may be split into - * multiple words, and needs to be rejoined. (The URL - * must have any real whitespace %-encoded, so we just - * get rid of all of it. - */ - url = g_strdup (urlparam); - s = d = url; - - while (*s) { - if (!isspace ((unsigned char)*s)) - *d++ = *s; - s++; - } - *d = *s; - - desc = g_strdup_printf ("Pointer to remote data (%s)", url); - } - - fallback: - if (!desc) { - if (access_type) { - desc = g_strdup_printf ("Pointer to unknown external " - "data (\"%s\" type)", - access_type); - } else - desc = g_strdup ("Malformed external-body part."); - } - - handle_mystery (part, root, box, url, "gnome-globe.png", desc, - url ? "open it in a browser" : NULL); - - g_free (desc); - g_free (url); -} - -static void -handle_undisplayable (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - const char *desc; - char *id, *cid; - - desc = gnome_mime_get_value (mime_type, "description"); - if (desc) - id = g_strdup (desc); - else - id = g_strdup_printf ("Data of type \"%s\".", mime_type); - cid = g_strdup_printf ("cid:%s", get_cid (part, root)); - handle_mystery (part, root, box, cid, "gnome-question.png", id, - "save it to disk"); - g_free (cid); - g_free (id); -} - -static void -handle_unknown_type (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - char *type; - - /* Don't give up quite yet. */ - type = mail_identify_mime_part (part); - if (type) { - mime_handler_fn handler_function; - gboolean generic; - - handler_function = lookup_handler (type, &generic); - if (handler_function && - handler_function != handle_unknown_type) { - (*handler_function) (part, type, root, box); - g_free (type); - return; - } - } else - type = g_strdup (mime_type); - - /* OK. Give up. */ - handle_undisplayable (part, type, root, box); - g_free (type); -} - -static void -embeddable_destroy_cb (GtkObject *obj, gpointer user_data) -{ - BonoboWidget *be; /* bonobo embeddable */ - BonoboViewFrame *vf; /* the embeddable view frame */ - BonoboObjectClient* server; - CORBA_Environment ev; - - be = BONOBO_WIDGET (obj); - server = bonobo_widget_get_server (be); - - vf = bonobo_widget_get_view_frame (be); - bonobo_control_frame_control_deactivate ( - BONOBO_CONTROL_FRAME (vf)); - /* w = bonobo_control_frame_get_widget (BONOBO_CONTROL_FRAME (vf)); */ - - /* gtk_widget_destroy (w); */ - - CORBA_exception_init (&ev); - Bonobo_Unknown_unref ( - bonobo_object_corba_objref (BONOBO_OBJECT(server)), &ev); - CORBA_Object_release ( - bonobo_object_corba_objref (BONOBO_OBJECT(server)), &ev); - - CORBA_exception_free (&ev); - bonobo_object_unref (BONOBO_OBJECT (vf)); -} - -static void -handle_via_bonobo (CamelMimePart *part, const char *mime_type, - CamelMimeMessage *root, GtkBox *box) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - const char *goad_id; - GtkWidget *embedded; - BonoboObjectClient *server; - Bonobo_PersistStream persist; - CORBA_Environment ev; - GByteArray *ba; - CamelStream *cstream; - BonoboStream *bstream; - - goad_id = gnome_mime_get_value (mime_type, "bonobo-goad-id"); - - if (!goad_id) { - char *main_type = g_strndup (mime_type, - strcspn (mime_type, "/")); - - goad_id = gnome_mime_get_value (main_type, - "bonobo-goad-id"); - g_free (main_type); - } - if (!goad_id) { - handle_undisplayable (part, mime_type, root, box); - return; - } - - embedded = bonobo_widget_new_subdoc (goad_id, NULL); - if (!embedded) { - handle_undisplayable (part, mime_type, root, box); - return; - } - server = bonobo_widget_get_server (BONOBO_WIDGET (embedded)); - - persist = (Bonobo_PersistStream) bonobo_object_client_query_interface ( - server, "IDL:Bonobo/PersistStream:1.0", NULL); - if (persist == CORBA_OBJECT_NIL) { - bonobo_object_unref (BONOBO_OBJECT (embedded)); - handle_undisplayable (part, mime_type, root, box); - return; - } - - /* Write the data to a CamelStreamMem... */ - ba = g_byte_array_new (); - cstream = camel_stream_mem_new_with_byte_array (ba); - camel_data_wrapper_write_to_stream (wrapper, cstream); - - /* ...convert the CamelStreamMem to a BonoboStreamMem... */ - bstream = bonobo_stream_mem_create (ba->data, ba->len, TRUE, FALSE); - gtk_object_unref (GTK_OBJECT (cstream)); - - /* ...and hydrate the PersistStream from the BonoboStream. */ - CORBA_exception_init (&ev); - Bonobo_PersistStream_load (persist, - bonobo_object_corba_objref ( - BONOBO_OBJECT (bstream)), - mime_type, &ev); - bonobo_object_unref (BONOBO_OBJECT (bstream)); - Bonobo_Unknown_unref (persist, &ev); - CORBA_Object_release (persist, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - bonobo_object_unref (BONOBO_OBJECT (embedded)); - CORBA_exception_free (&ev); - handle_undisplayable (part, mime_type, root, box); - return; - } - CORBA_exception_free (&ev); - - /* Embed the widget. */ - gtk_widget_show (embedded); - gtk_box_pack_start (box, embedded, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (embedded), "destroy", - embeddable_destroy_cb, NULL); -} - - -static char * -reply_body (CamelDataWrapper *data, gboolean *html) -{ - CamelMultipart *mp; - CamelMimePart *subpart; - int i, nparts; - char *subtext, *old; - const char *boundary, *disp; - char *text = NULL; - GMimeContentField *mime_type; - - /* We only include text, message, and multipart bodies. */ - mime_type = camel_data_wrapper_get_mime_type_field (data); - - /* FIXME: This is wrong. We don't want to include large - * images. But if we don't do it this way, we don't get - * the headers... - */ - if (g_strcasecmp (mime_type->type, "message") == 0) { - *html = FALSE; - return get_data_wrapper_text (data); - } - - if (g_strcasecmp (mime_type->type, "text") == 0) { - *html = !g_strcasecmp (mime_type->subtype, "html"); - return get_data_wrapper_text (data); - } - - /* If it's not message and it's not text, and it's not - * multipart, we don't want to deal with it. - */ - if (g_strcasecmp (mime_type->type, "multipart") != 0) - return NULL; - - mp = CAMEL_MULTIPART (data); - - if (g_strcasecmp (mime_type->subtype, "alternative") == 0) { - /* Pick our favorite alternative and reply to it. */ - - subpart = find_preferred_alternative (mp); - if (!subpart) - return NULL; - - data = camel_medium_get_content_object ( - CAMEL_MEDIUM (subpart)); - return reply_body (data, html); - } - - nparts = camel_multipart_get_number (mp); - - /* Otherwise, concatenate all the parts that we can. If we find - * an HTML part in there though, return just that: We don't want - * to deal with merging HTML and non-HTML parts. - */ - boundary = camel_multipart_get_boundary (mp); - for (i = 0; i < nparts; i++) { - subpart = camel_multipart_get_part (mp, i); - - disp = camel_mime_part_get_disposition (subpart); - if (disp && g_strcasecmp (disp, "inline") != 0) - continue; - - data = camel_medium_get_content_object ( - CAMEL_MEDIUM (subpart)); - subtext = reply_body (data, html); - if (!subtext) - continue; - if (*html) { - g_free (text); - return subtext; - } - - if (text) { - old = text; - text = g_strdup_printf ("%s\n--%s\n%s", text, - boundary, subtext); - g_free (subtext); - g_free (old); - } else - text = subtext; - } - - if (!text) - return NULL; - - return text; -} - -EMsgComposer * -mail_generate_reply (CamelMimeMessage *message, gboolean to_all) -{ - CamelDataWrapper *contents; - char *text, *subject; - EMsgComposer *composer; - gboolean html; - const char *repl_to, *message_id, *references; - GList *to, *cc; - - contents = camel_medium_get_content_object (CAMEL_MEDIUM (message)); - text = reply_body (contents, &html); - - composer = E_MSG_COMPOSER (e_msg_composer_new ()); - - /* Set the quoted reply text. */ - if (text) { - char *repl_text; - - if (html) { - repl_text = g_strdup_printf ("
\n%s\n" - "
\n", - text); - } else { - char *s, *d, *quoted_text; - int lines, len; - - /* Count the number of lines in the body. If - * the text ends with a \n, this will be one - * too high, but that's ok. Allocate enough - * space for the text and the "> "s. - */ - for (s = text, lines = 0; s; s = strchr (s + 1, '\n')) - lines++; - quoted_text = g_malloc (strlen (text) + lines * 2); - - s = text; - d = quoted_text; - - /* Copy text to quoted_text line by line, - * prepending "> ". - */ - while (1) { - len = strcspn (s, "\n"); - if (len == 0 && !*s) - break; - sprintf (d, "> %.*s\n", len, s); - s += len; - if (!*s++) - break; - d += len + 3; - } - - /* Now convert that to HTML. */ - repl_text = e_text_to_html (quoted_text, - E_TEXT_TO_HTML_PRE); - g_free (quoted_text); - } - e_msg_composer_set_body_text (composer, repl_text); - g_free (repl_text); - g_free (text); - } - - /* Set the recipients */ - repl_to = camel_mime_message_get_reply_to (message); - if (!repl_to) - repl_to = camel_mime_message_get_from (message); - to = g_list_append (NULL, (gpointer)repl_to); - - if (to_all) { - const CamelInternetAddress *recip; - const char *name, *addr; - char *fulladdr; - int i; - - recip = camel_mime_message_get_recipients (message, - CAMEL_RECIPIENT_TYPE_TO); - i = 0; - cc = NULL; - while (camel_internet_address_get (recip, i++, &name, &addr)) { - fulladdr = g_strdup_printf ("%s <%s>", name, addr); - cc = g_list_append (cc, fulladdr); - } - - recip = camel_mime_message_get_recipients (message, - CAMEL_RECIPIENT_TYPE_CC); - i = 0; - while (camel_internet_address_get (recip, i++, &name, &addr)) { - fulladdr = g_strdup_printf ("%s <%s>", name, addr); - cc = g_list_append (cc, fulladdr); - } - } else - cc = NULL; - - /* Set the subject of the new message. */ - subject = (char *)camel_mime_message_get_subject (message); - if (!subject) - subject = g_strdup (""); - else if (!strncasecmp (subject, "Re: ", 4)) - subject = g_strdup (subject); - else - subject = g_strdup_printf ("Re: %s", subject); - - e_msg_composer_set_headers (composer, to, cc, NULL, subject); - g_list_free (to); - g_list_free (cc); - g_free (subject); - - /* Add In-Reply-To and References. */ - message_id = camel_medium_get_header (CAMEL_MEDIUM (message), - "Message-Id"); - references = camel_medium_get_header (CAMEL_MEDIUM (message), - "References"); - if (message_id) { - e_msg_composer_add_header (composer, "In-Reply-To", - message_id); - if (references) { - char *reply_refs; - reply_refs = g_strdup_printf ("%s %s", references, - message_id); - e_msg_composer_add_header (composer, "References", - reply_refs); - g_free (reply_refs); - } - } else if (references) - e_msg_composer_add_header (composer, "References", references); - - return composer; -} - -/* This is part of the temporary kludge below. */ -#ifndef HAVE_MKSTEMP -#include -#include -#endif - -EMsgComposer * -mail_generate_forward (CamelMimeMessage *mime_message, - gboolean forward_as_attachment, - gboolean keep_attachments) -{ - EMsgComposer *composer; - char *tmpfile; - int fd; - CamelStream *stream; - - if (!forward_as_attachment) - g_warning ("Forward as non-attachment not implemented."); - if (!keep_attachments) - g_warning ("Forwarding without attachments not implemented."); - - /* For now, we kludge by writing out a temp file. Later, - * EMsgComposer will support attaching CamelMimeParts directly, - * or something. FIXME. - */ - tmpfile = g_strdup ("/tmp/evolution-kludge-XXXX"); -#ifdef HAVE_MKSTEMP - fd = mkstemp (tmpfile); -#else - if (mktemp (tmpfile)) { - fd = open (tmpfile, O_RDWR | O_CREAT | O_EXCL, - S_IRUSR | S_IWUSR); - } else - fd = -1; -#endif - if (fd == -1) { - g_warning ("Couldn't create temp file for forwarding"); - g_free (tmpfile); - return NULL; - } - - stream = camel_stream_fs_new_with_fd (fd); - camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (mime_message), stream); - camel_stream_flush (stream); - gtk_object_unref (GTK_OBJECT (stream)); - - composer = E_MSG_COMPOSER (e_msg_composer_new ()); - e_msg_composer_attachment_bar_attach (E_MSG_COMPOSER_ATTACHMENT_BAR (composer->attachment_bar), tmpfile); - g_free (tmpfile); - - /* FIXME: should we default a subject? */ - - return composer; -} diff --git a/mail/mail-identify.c b/mail/mail-identify.c deleted file mode 100644 index 8b8e61487d..0000000000 --- a/mail/mail-identify.c +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Dan Winship - * - * Copyright 2000, Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. - * - */ - -#include - -#include -#include - -#include -#include -#include "mail.h" - -/** - * mail_identify_mime_part: - * @part: a CamelMimePart - * - * Try to identify the MIME type of the data in @part (which presumably - * doesn't have a useful Content-Type). - **/ -char * -mail_identify_mime_part (CamelMimePart *part) -{ - GMimeContentField *content_type; - const char *filename, *type; - - content_type = camel_mime_part_get_content_type (part); - - - /* Try identifying based on name in Content-Type or - * filename in Content-Disposition. - */ - filename = gmime_content_field_get_parameter (content_type, "name"); - if (filename) { - type = gnome_mime_type_or_default (filename, NULL); - if (type) - return g_strdup (type); - } - - filename = camel_mime_part_get_filename (part); - if (filename) { - type = gnome_mime_type_or_default (filename, NULL); - if (type) - return g_strdup (type); - } - - - /* Try file magic. */ - /* FIXME */ - - - /* Another possibility to try is the x-mac-type / x-mac-creator - * parameter to Content-Type used by some Mac email clients. That - * would require a Mac type to mime type conversion table. - */ - - - /* We give up. */ - return NULL; -} diff --git a/mail/mail-ops.c b/mail/mail-ops.c deleted file mode 100644 index 150231297e..0000000000 --- a/mail/mail-ops.c +++ /dev/null @@ -1,607 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* mail-ops.c: callbacks for the mail toolbar/menus */ - -/* - * Author : - * Dan Winship - * - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include -#include -#include -#include "mail.h" -#include "folder-browser.h" -#include "e-util/e-setup.h" -#include "filter/filter-editor.h" -#include "filter/filter-driver.h" - -/* FIXME: is there another way to do this? */ -#include "Evolution.h" -#include "evolution-storage.h" - -#ifndef HAVE_MKSTEMP -#include -#include -#endif - -static void -mail_exception_dialog (char *head, CamelException *ex, gpointer widget) -{ - char *msg; - GtkWindow *window = - GTK_WINDOW (gtk_widget_get_ancestor (widget, GTK_TYPE_WINDOW)); - - msg = g_strdup_printf ("%s:\n%s", head, - camel_exception_get_description (ex)); - gnome_error_dialog_parented (msg, window); - g_free (msg); -} - -static gboolean -check_configured (void) -{ - char *path; - gboolean configured; - - path = g_strdup_printf ("=%s/config=/mail/configured", evolution_dir); - if (gnome_config_get_bool (path)) { - g_free (path); - return TRUE; - } - - mail_config_druid (); - - configured = gnome_config_get_bool (path); - g_free (path); - return configured; -} - -/* FIXME: This is BROKEN! It fetches mail into whatever folder you're - * currently viewing. - */ -void -fetch_mail (GtkWidget *button, gpointer user_data) -{ - FolderBrowser *fb = FOLDER_BROWSER (user_data); - CamelException *ex; - CamelStore *store = NULL; - CamelFolder *folder = NULL; - char *path, *url = NULL; - FilterDriver *filter = NULL; - char *userrules, *systemrules; - char *tmp_mbox = NULL, *source; - - if (!check_configured ()) - return; - - path = g_strdup_printf ("=%s/config=/mail/source", evolution_dir); - url = gnome_config_get_string (path); - g_free (path); - if (!url) { - GtkWidget *win = gtk_widget_get_ancestor (GTK_WIDGET (fb), - GTK_TYPE_WINDOW); - - gnome_error_dialog_parented ("You have no remote mail source " - "configured", GTK_WINDOW (win)); - return; - } - - path = CAMEL_SERVICE (fb->folder->parent_store)->url->path; - ex = camel_exception_new (); - - tmp_mbox = g_strdup_printf ("%s/movemail", path); - - /* If fetching mail from an mbox store, safely copy it to a - * temporary store first. - */ - if (!strncmp (url, "mbox:", 5)) { - int tmpfd; - - printf("moving from a local mbox\n"); - - tmpfd = open (tmp_mbox, O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR); - - if (tmpfd == -1) { - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - "Couldn't create temporary " - "mbox: %s", g_strerror (errno)); - mail_exception_dialog ("Unable to move mail", ex, fb); - goto cleanup; - } - close (tmpfd); - - /* Skip over "mbox:" plus host part (if any) of url. */ - source = url + 5; - if (!strncmp (source, "//", 2)) - source = strchr (source + 2, '/'); - - switch (camel_movemail (source, tmp_mbox, ex)) { - case -1: - mail_exception_dialog ("Unable to move mail", ex, fb); - /* FALL THROUGH */ - - case 0: - goto cleanup; - } - - folder = camel_store_get_folder (fb->folder->parent_store, - strrchr (tmp_mbox, '/') + 1, - ex); - camel_folder_open (folder, FOLDER_OPEN_READ, ex); - - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - mail_exception_dialog ("Unable to move mail", ex, fb); - goto cleanup; - } - } else { - CamelFolder *sourcefolder; - - store = camel_session_get_store (session, url, ex); - if (!store) { - mail_exception_dialog ("Unable to get new mail", ex, fb); - goto cleanup; - } - camel_service_connect_with_url (CAMEL_SERVICE (store), - url, ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_USER_CANCEL) - mail_exception_dialog ("Unable to get new mail", ex, fb); - goto cleanup; - } - - sourcefolder = camel_store_get_folder (store, "inbox", ex); - camel_folder_open (sourcefolder, FOLDER_OPEN_READ, ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - mail_exception_dialog ("Unable to get new mail", ex, fb); - goto cleanup; - } - - /* can we perform filtering on this source? */ - if (!(sourcefolder->has_summary_capability - && sourcefolder->has_search_capability)) { - GPtrArray *uids; - int i; - - printf("folder isn't searchable, performing movemail ...\n"); - - folder = camel_store_get_folder (fb->folder->parent_store, - strrchr (tmp_mbox, '/') + 1, - ex); - - if (!camel_folder_exists(folder, ex)) { - camel_folder_create(folder, ex); - } - - camel_folder_open(folder, FOLDER_OPEN_RW, ex); - - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - mail_exception_dialog ("Unable to move mail", ex, fb); - goto cleanup; - } - - uids = camel_folder_get_uids (sourcefolder, ex); - printf("got %d messages in source\n", uids->len); - for (i = 0; i < uids->len; i++) { - CamelMimeMessage *msg; - printf("copying message %d to dest\n", i + 1); - msg = camel_folder_get_message_by_uid (sourcefolder, uids->pdata[i], ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - mail_exception_dialog ("Unable to read message", ex, fb); - gtk_object_unref((GtkObject *)msg); - gtk_object_unref((GtkObject *)sourcefolder); - goto cleanup; - } - - camel_folder_append_message (folder, msg, ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - mail_exception_dialog ("Unable to write message", ex, fb); - gtk_object_unref((GtkObject *)msg); - gtk_object_unref((GtkObject *)sourcefolder); - goto cleanup; - } - - camel_folder_delete_message_by_uid(sourcefolder, uids->pdata[i], ex); - gtk_object_unref((GtkObject *)msg); - } - camel_folder_free_uids (sourcefolder, uids); - gtk_object_unref((GtkObject *)sourcefolder); - } else { - printf("we can search on this folder, performing search!\n"); - folder = sourcefolder; - } - } - - /* apply filtering rules to this inbox */ - filter = filter_driver_new(); - userrules = g_strdup_printf ("%s/filters.xml", evolution_dir); - systemrules = g_strdup_printf("%s/evolution/filtertypes.xml", EVOLUTION_DATADIR); - filter_driver_set_rules(filter, systemrules, userrules); - filter_driver_set_session(filter, session); - g_free(userrules); - g_free(systemrules); - - if (filter_driver_run(filter, folder, fb->folder) == -1) { - mail_exception_dialog ("Unable to get new mail", ex, fb); - goto cleanup; - } - - /* Redisplay. Ick. FIXME */ - path = g_strdup_printf ("file://%s", path); - folder_browser_set_uri (fb, path); - g_free (path); - - cleanup: - g_free(tmp_mbox); - - if (filter) - gtk_object_unref((GtkObject *)filter); - if (url) - g_free (url); - if (folder) { - if (camel_folder_is_open (folder)) - camel_folder_close (folder, TRUE, ex); - gtk_object_unref (GTK_OBJECT (folder)); - } - if (store) { - camel_service_disconnect (CAMEL_SERVICE (store), ex); - gtk_object_unref (GTK_OBJECT (store)); - } - camel_exception_free (ex); -} - - -struct post_send_data { - CamelMimeMessage *message; - guint32 flags; -}; - -static void -composer_send_cb (EMsgComposer *composer, gpointer data) -{ - static CamelTransport *transport = NULL; - struct post_send_data *psd = data; - static char *from = NULL; - CamelException *ex; - CamelMimeMessage *message; - char *name, *addr, *path; - - ex = camel_exception_new (); - - if (!from) { - CamelInternetAddress *ciaddr; - - path = g_strdup_printf ("=%s/config=/mail/id_name", - evolution_dir); - name = gnome_config_get_string (path); - g_assert (name); - g_free (path); - path = g_strdup_printf ("=%s/config=/mail/id_addr", - evolution_dir); - addr = gnome_config_get_string (path); - g_assert (addr); - g_free (path); - - ciaddr = camel_internet_address_new (); - camel_internet_address_add (ciaddr, name, addr); - - from = camel_address_encode (CAMEL_ADDRESS (ciaddr)); - } - - if (!transport) { - char *url; - - path = g_strdup_printf ("=%s/config=/mail/transport", - evolution_dir); - url = gnome_config_get_string (path); - g_assert (url); - g_free (path); - - transport = camel_session_get_transport (session, url, ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - mail_exception_dialog ("Could not load mail transport", - ex, composer); - camel_exception_free (ex); - goto free_psd; - } - } - - message = e_msg_composer_get_message (composer); - gtk_object_destroy (GTK_OBJECT (composer)); - - camel_mime_message_set_from (message, from); - camel_medium_add_header (CAMEL_MEDIUM (message), "X-Mailer", - "Evolution (Developer Preview)"); - camel_mime_message_set_date (message, CAMEL_MESSAGE_DATE_CURRENT, 0); - - camel_service_connect (CAMEL_SERVICE (transport), ex); - if (!camel_exception_is_set (ex)) - camel_transport_send (transport, CAMEL_MEDIUM (message), ex); - if (!camel_exception_is_set (ex)) - camel_service_disconnect (CAMEL_SERVICE (transport), ex); - if (camel_exception_is_set (ex)) - mail_exception_dialog ("Could not send message", ex, composer); - else if (psd) { - guint32 set; - - set = camel_mime_message_get_flags (psd->message); - camel_mime_message_set_flags (psd->message, psd->flags, ~set); - } - - camel_exception_free (ex); - gtk_object_unref (GTK_OBJECT (message)); - - free_psd: - if (psd) { - gtk_object_unref (GTK_OBJECT (psd->message)); - g_free (psd); - } -} - - -void -send_msg (GtkWidget *widget, gpointer user_data) -{ - GtkWidget *composer; - - if (!check_configured ()) - return; - - composer = e_msg_composer_new (); - - gtk_signal_connect (GTK_OBJECT (composer), "send", - GTK_SIGNAL_FUNC (composer_send_cb), NULL); - gtk_widget_show (composer); -} - -/* Send according to a mailto (RFC 2368) URL. */ -void -send_to_url (const char *url) -{ - GtkWidget *composer; - - if (!check_configured ()) - return; - - composer = e_msg_composer_new_from_url (url); - - gtk_signal_connect (GTK_OBJECT (composer), "send", - GTK_SIGNAL_FUNC (composer_send_cb), NULL); - gtk_widget_show (composer); -} - -static void -reply (FolderBrowser *fb, gboolean to_all) -{ - EMsgComposer *composer; - struct post_send_data *psd; - - if (!check_configured ()) - return; - - psd = g_new (struct post_send_data, 1); - psd->message = fb->mail_display->current_message; - gtk_object_ref (GTK_OBJECT (psd->message)); - psd->flags = CAMEL_MESSAGE_ANSWERED; - - composer = mail_generate_reply (psd->message, to_all); - - gtk_signal_connect (GTK_OBJECT (composer), "send", - GTK_SIGNAL_FUNC (composer_send_cb), psd); - - gtk_widget_show (GTK_WIDGET (composer)); -} - -void -reply_to_sender (GtkWidget *button, gpointer user_data) -{ - reply (FOLDER_BROWSER (user_data), FALSE); -} - -void -reply_to_all (GtkWidget *button, gpointer user_data) -{ - reply (FOLDER_BROWSER (user_data), TRUE); -} - - -void -forward_msg (GtkWidget *button, gpointer user_data) -{ - FolderBrowser *fb; - EMsgComposer *composer; - - if (!check_configured ()) - return; - - fb = FOLDER_BROWSER (user_data); - composer = mail_generate_forward (fb->mail_display->current_message, - TRUE, TRUE); - - gtk_signal_connect (GTK_OBJECT (composer), "send", - GTK_SIGNAL_FUNC (composer_send_cb), NULL); - - gtk_widget_show (GTK_WIDGET (composer)); -} - -void -delete_msg (GtkWidget *button, gpointer user_data) -{ - FolderBrowser *fb = user_data; - - if (fb->mail_display->current_message) { - guint32 flags; - - /* FIXME: table should watch the message with a signal and update display! */ - - flags = camel_mime_message_get_flags(fb->mail_display->current_message); - camel_mime_message_set_flags(fb->mail_display->current_message, CAMEL_MESSAGE_DELETED, ~flags); - printf("Message %s set to %s\n", fb->mail_display->current_message->message_uid, flags&CAMEL_MESSAGE_DELETED?"UNDELETED":"DELETED"); - } -} - -void -expunge_folder (GtkWidget *button, gpointer user_data) -{ - FolderBrowser *fb = FOLDER_BROWSER(user_data); - CamelException ex; - - if (fb->message_list->folder) { - camel_exception_init(&ex); - - camel_folder_expunge(fb->message_list->folder, &ex); - - /* FIXME: is there a better way to force an update? */ - /* FIXME: Folder should raise a signal to say its contents has changed ... */ - e_table_model_changed (fb->message_list->table_model); - -/* this always throws an error, when it shouldn't? */ -#if 0 - if (camel_exception_get_id (&ex) != CAMEL_EXCEPTION_NONE) { - mail_exception_dialog ("Unable to expunge deleted messages", &ex, fb); - } -#endif - } -} - -static void -filter_druid_clicked(FilterEditor *fe, int button, FolderBrowser *fb) -{ - printf("closing dialog\n"); - if (button == 0) { - char *user; - - user = g_strdup_printf ("%s/filters.xml", evolution_dir); - filter_editor_save_rules(fe, user); - printf("saving filter options to '%s'\n", user); - g_free(user); - } - if (button != -1) { - gnome_dialog_close((GnomeDialog *)fe); - } -} - -void filter_edit (GtkWidget *button, gpointer user_data) -{ - FolderBrowser *fb = FOLDER_BROWSER(user_data); - FilterEditor *fe; - char *user, *system; - - printf("Editing filters ...\n"); - fe = filter_editor_new(); - - user = g_strdup_printf ("%s/filters.xml", evolution_dir); - system = g_strdup_printf("%s/evolution/filtertypes.xml", EVOLUTION_DATADIR); - filter_editor_set_rule_files(fe, system, user); - g_free(user); - g_free(system); - gnome_dialog_append_buttons((GnomeDialog *)fe, GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, 0); - gtk_signal_connect((GtkObject *)fe, "clicked", filter_druid_clicked, fb); - gtk_widget_show((GtkWidget *)fe); -} - -static void -vfolder_editor_clicked(FilterEditor *fe, int button, FolderBrowser *fb) -{ - printf("closing dialog\n"); - if (button == 0) { - char *user; - - user = g_strdup_printf ("%s/vfolders.xml", evolution_dir); - filter_editor_save_rules(fe, user); - printf("saving vfolders to '%s'\n", user); - g_free(user); - - /* FIXME: this is also not the way to do this, see also - component-factory.c */ - { - EvolutionStorage *storage; - FilterDriver *fe; - int i, count; - char *user, *system; - extern char *evolution_dir; - - storage = gtk_object_get_data((GtkObject *)fb, "e-storage"); - - fe = filter_driver_new(); - user = g_strdup_printf ("%s/vfolders.xml", evolution_dir); - system = g_strdup_printf("%s/evolution/vfoldertypes.xml", EVOLUTION_DATADIR); - filter_driver_set_rules(fe, system, user); - g_free(user); - g_free(system); - count = filter_driver_rule_count(fe); - for (i=0;idescription) - desc = fo->description->data; - if (desc) - desctext = desc->data; - else { - sprintf(descunknown, "volder-%p", fo); - desctext = descunknown; - } - g_string_sprintf(query, "vfolder:/%s/vfolder/%s?", evolution_dir, desctext); - filter_driver_expand_option(fe, query, NULL, fo); - name = g_strdup_printf("/%s", desctext); - printf("Adding new vfolder: %s\n", query->str); - evolution_storage_new_folder (storage, name, - "mail", - query->str, - name+1); - g_string_free(query, TRUE); - g_free(name); - } - gtk_object_unref((GtkObject *)fe); - } - - } - if (button != -1) { - gnome_dialog_close((GnomeDialog *)fe); - } -} - -void vfolder_edit (GtkWidget *button, gpointer user_data) -{ - FolderBrowser *fb = FOLDER_BROWSER(user_data); - FilterEditor *fe; - char *user, *system; - - printf("Editing vfolders ...\n"); - fe = filter_editor_new(); - - user = g_strdup_printf ("%s/vfolders.xml", evolution_dir); - system = g_strdup_printf("%s/evolution/vfoldertypes.xml", EVOLUTION_DATADIR); - filter_editor_set_rule_files(fe, system, user); - g_free(user); - g_free(system); - gnome_dialog_append_buttons((GnomeDialog *)fe, GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, 0); - gtk_signal_connect((GtkObject *)fe, "clicked", vfolder_editor_clicked, fb); - gtk_widget_show((GtkWidget *)fe); -} - - diff --git a/mail/mail-sources.c b/mail/mail-sources.c deleted file mode 100644 index 3e5fbaed91..0000000000 --- a/mail/mail-sources.c +++ /dev/null @@ -1,771 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* mail-sources.c: Mail source selection wizard */ - -/* - * Author : - * Dan Winship - * - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include - -#include -#include - -/* XXX */ -#define default_mail_path "/var/mail" - -struct { - char *protocol, *name, *description, *authname[4], *authproto[4]; - gboolean authpasswd[4]; -} providers[] = { - { "POP3", "Post Office Protocol, version 3", - "For connecting to POP3 servers. Some web mail providers and " - "proprietary email systems also provide POP3 interfaces.", - { "Password/APOP", "Kerberos 4" }, - { NULL, "KERBEROS_V4" }, - { TRUE, FALSE } - }, - { "IMAP", "Internet Mail Access Protocol", - "For connecting to IMAP servers. Allows you to keep all of " - "your mail on the IMAP server so that you can access it from " - "anywhere.", - { "Password/CRAM-MD5", "S/Key", "Kerberos 4", "GSSAPI" }, - { NULL, "SKEY", "KERBEROS_V4", "GSSAPI" }, - { TRUE, TRUE, FALSE, FALSE }, - } -}; -#define nproviders 2 - -struct msinfo { - GtkHTML *html; - GtkWidget *prev, *next; - int page; - - /* Locally-delivered mail. */ - gboolean get_local_mail, default_local_mail_path; - char *local_mail_path; - gboolean use_movemail; - - /* Remotely-delivered mail. */ - gboolean get_remote_mail; - int remote_provider; - char *remote_host, *remote_user, *remote_password; - int remote_auth; - gboolean remember_password; - gboolean copy_local; - - /* Local store. */ - gboolean store_local; - char *local_store_path; -}; - -static void display_intro (struct msinfo *msi); -static int finish_intro (struct msinfo *msi, int direction); -static void display_local (struct msinfo *msi); -static int finish_local (struct msinfo *msi, int direction); -static void display_remote (struct msinfo *msi); -static int finish_remote (struct msinfo *msi, int direction); -static void display_remconf (struct msinfo *msi); -static int finish_remconf (struct msinfo *msi, int direction); - -static struct { - void (*display) (struct msinfo *msi); - int (*finish) (struct msinfo *msi, int direction); -} pages[] = { - { display_intro, finish_intro }, - { display_local, finish_local }, -#if 0 - { display_movemail, finish_movemail }, -#endif - { display_remote, finish_remote }, - { display_remconf, finish_remconf }, - { NULL, NULL } -}; - - -/* Wrappers around gtkhtml */ - -static void -write_html (GtkHTML *html, GtkHTMLStreamHandle handle, const char *text) -{ - gtk_html_write (html, handle, text, strlen (text)); -} - -static GtkHTMLStreamHandle -start_html (GtkHTML *html) -{ - GtkHTMLStreamHandle handle; - - handle = gtk_html_begin (html, ""); - write_html (html, handle, "\n"); - return handle; -} - -void -end_html (GtkHTML *html, GtkHTMLStreamHandle handle) -{ - write_html (html, handle, ""); - gtk_html_end (html, handle, GTK_HTML_STREAM_OK); -} - - -/* Button callbacks */ - -static void -prev_clicked (GtkButton *button, gpointer data) -{ - struct msinfo *msi = data; - - if (msi->page == 3) - gtk_widget_set_sensitive (msi->next, TRUE); - msi->page = pages[msi->page].finish (data, -1); - pages[msi->page].display (data); - if (msi->page == 0) - gtk_widget_set_sensitive (msi->prev, FALSE); -} - -static void -next_clicked (GtkButton *button, gpointer data) -{ - struct msinfo *msi = data; - - if (msi->page == 0) - gtk_widget_set_sensitive (msi->prev, TRUE); - msi->page = pages[msi->page].finish (data, 1); - pages[msi->page].display (data); - if (msi->page == 3) - gtk_widget_set_sensitive (msi->next, FALSE); -} - -static void -cancel_clicked (GtkButton *button, gpointer data) -{ - exit (1); -} - -static void -object_requested(GtkHTML *html, GtkHTMLEmbedded *eb) -{ - GtkWidget *w; - - w = gtk_object_get_data (GTK_OBJECT(html), eb->classid); - gtk_container_add (GTK_CONTAINER(eb), w); - gtk_widget_show_all (GTK_WIDGET(eb)); -} - - - -int -main (int argc, char **argv) -{ - struct msinfo *msi; - GtkWidget *window, *vbox, *frame, *scrolled, *hbbox; - GtkWidget *cancel; - int page; - - gtk_init (&argc, &argv); - gdk_imlib_init (); - gdk_rgb_init (); - gtk_widget_set_default_colormap (gdk_rgb_get_cmap ()); - gtk_widget_set_default_visual (gdk_rgb_get_visual ()); - - msi = g_new (struct msinfo, 1); - - /* Build window */ - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (window), - "Mail Source Configuration"); - gtk_window_set_default_size (GTK_WINDOW (window), 600, 400); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 8); - gtk_container_add (GTK_CONTAINER (window), vbox); - - frame = gtk_frame_new (NULL); - gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); - - scrolled = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_ALWAYS); - gtk_container_add (GTK_CONTAINER (frame), scrolled); - - msi->html = GTK_HTML (gtk_html_new()); - gtk_html_set_editable (msi->html, FALSE); - gtk_container_add (GTK_CONTAINER (scrolled), GTK_WIDGET (msi->html)); - gtk_signal_connect (GTK_OBJECT (msi->html), "object_requested", - GTK_SIGNAL_FUNC (object_requested), NULL); - - hbbox= gtk_hbutton_box_new (); - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbbox), - GTK_BUTTONBOX_END); - gtk_box_pack_end (GTK_BOX (vbox), hbbox, FALSE, FALSE, 0); - - msi->prev = gnome_stock_button (GNOME_STOCK_BUTTON_PREV); - msi->next = gnome_stock_button (GNOME_STOCK_BUTTON_NEXT); - cancel = gnome_stock_button (GNOME_STOCK_BUTTON_CANCEL); - - gtk_box_pack_start (GTK_BOX (hbbox), msi->prev, TRUE, FALSE, 0); - gtk_box_pack_end (GTK_BOX (hbbox), msi->next, TRUE, FALSE, 0); - gtk_box_pack_end (GTK_BOX (hbbox), cancel, TRUE, FALSE, 0); - - GTK_WIDGET_SET_FLAGS (msi->prev, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS (msi->next, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT); - gtk_widget_grab_default (msi->next); - - gtk_signal_connect (GTK_OBJECT (msi->prev), "clicked", - prev_clicked, msi); - gtk_signal_connect (GTK_OBJECT (msi->next), "clicked", - next_clicked, msi); - gtk_signal_connect (GTK_OBJECT (cancel), "clicked", - cancel_clicked, NULL); - - msi->page = 0; - msi->get_local_mail = msi->default_local_mail_path = -1; - msi->use_movemail = -1; - msi->get_remote_mail = msi->store_local = -1; - msi->remember_password = msi->copy_local = -1; - msi->local_mail_path = msi->local_store_path = NULL; - msi->remote_provider = msi->remote_auth = -1; - msi->remote_host = msi->remote_user = msi->remote_password = NULL; - - display_intro (msi); - - gtk_widget_show_all (window); - gtk_main (); - exit (0); -} - -#define intro_text \ - "

Evolution Mail Source Wizard

\n" \ - "

Welcome to the Evolution Mail Source Wizard. This will " \ - "help you blah blah blah blah blah.

" - -static void -display_intro (struct msinfo *msi) -{ - GtkHTMLStreamHandle handle; - - handle = start_html (msi->html); - write_html (msi->html, handle, intro_text); - end_html (msi->html, handle); -} - -static int -finish_intro (struct msinfo *msi, int direction) -{ - return msi->page + direction; -} - -#define local_text_1 \ - "

Local mail source

\n
\n" \ - "

First you need to tell Evolution whether or not you " \ - "receive mail locally, and if so, where.

\n" \ - "

Your default mail file on this system is " - -#define local_text_2 \ - ".

\n" - -#define local_text_3_file \ - "

That file exists, so you almost certainly want to use it " \ - "as a mail source.

\n" - -#define local_text_3_dir \ - "

That directory exists, but you currently have no mail " \ - "there. If you aren't sure whether or not you receive mail " \ - "on this machine, it's safest to leave it selected.

\n" - -#define local_text_3_none \ - "

However, that directory does not exist.

\n" - -#define local_text_label_1 \ - "Don't fetch local mail." - -#define local_text_label_2 \ - "Fetch local mail from the default location." - -#define local_text_label_3 \ - "Fetch local mail from an alternate location:" - -void -display_local (struct msinfo *msi) -{ - GtkHTMLStreamHandle handle; - struct stat st; - char *default_user_mail_path; - GtkWidget *radio, *text; - GSList *group = NULL; - - default_user_mail_path = g_strdup_printf ("%s/%s", default_mail_path, - getenv ("USER")); - - handle = start_html (msi->html); - write_html (msi->html, handle, local_text_1); - write_html (msi->html, handle, default_user_mail_path); - write_html (msi->html, handle, local_text_2); - - if (stat (default_mail_path, &st) == 0) { - if (stat (default_user_mail_path, &st) == 0) - write_html (msi->html, handle, local_text_3_file); - else - write_html (msi->html, handle, local_text_3_dir); - if (msi->get_local_mail == -1) - msi->get_local_mail = TRUE; - } else { - write_html (msi->html, handle, local_text_3_none); - if (msi->get_local_mail == -1) - msi->get_local_mail = FALSE; - } - g_free (default_user_mail_path); - - radio = gtk_radio_button_new_with_label (group, local_text_label_1); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - if (!msi->get_local_mail) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); - gtk_object_set_data (GTK_OBJECT (msi->html), "local:no", radio); - write_html (msi->html, handle, - "
\n"); - - radio = gtk_radio_button_new_with_label (group, local_text_label_2); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - if (msi->get_local_mail && msi->default_local_mail_path) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); - gtk_object_set_data (GTK_OBJECT (msi->html), "local:default", radio); - write_html (msi->html, handle, - "
\n"); - - radio = gtk_radio_button_new_with_label (group, local_text_label_3); - text = gtk_entry_new (); - if (msi->get_local_mail && !msi->default_local_mail_path) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); - gtk_entry_set_text (GTK_ENTRY (text), msi->local_mail_path); - } - gtk_object_set_data (GTK_OBJECT (msi->html), "local:alt", radio); - gtk_object_set_data (GTK_OBJECT (msi->html), "local:text", text); - write_html (msi->html, handle, - " " - ""); - - end_html (msi->html, handle); -} - -static int -finish_local (struct msinfo *msi, int direction) -{ - GtkWidget *radio, *text; - - radio = gtk_object_get_data (GTK_OBJECT (msi->html), "local:no"); - msi->get_local_mail = - !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio)); - - g_free (msi->local_mail_path); - if (!msi->get_local_mail) - msi->local_mail_path = NULL; - else { - radio = gtk_object_get_data (GTK_OBJECT (msi->html), - "local:default"); - msi->default_local_mail_path = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio)); - if (msi->default_local_mail_path) - msi->local_mail_path = NULL; - else { - text = gtk_object_get_data (GTK_OBJECT (msi->html), - "local:text"); - msi->local_mail_path = - g_strdup (gtk_entry_get_text (GTK_ENTRY (text))); - } - } - - return msi->page + direction; -} - -#define remote_text_1 \ - "

Remote mail source

\n
\n

Now you need to " \ - "configure a remote mail source, if you have one.

\n" \ - "

Evolution supports the following protocols for reading " \ - "mail from remote servers:

" - -#define remote_text_2 \ - "

To add a remote mail source, choose a protocol from " \ - "the list below and click \"Next\".

" - -#define remote_text_3_must \ - "

You have not configured a local mail source, so you " \ - "must configure a remote one.

" - -#define remote_label_none \ - "No remote mail source" - -void -display_remote (struct msinfo *msi) -{ - GtkHTMLStreamHandle handle; - char *table, *item, *button, *nolabel; - GtkWidget *widget; - int i; - GSList *group = NULL; - - handle = start_html (msi->html); - write_html (msi->html, handle, remote_text_1); - - /* Write the table of available providers */ - table = "
\n"; - write_html (msi->html, handle, table); - for (i = 0; i < nproviders; i++) { - table = g_strdup_printf ("" - "\n" - "\n", - providers[i].protocol, - providers[i].name, - providers[i].description); - write_html (msi->html, handle, table); - g_free (table); - } - table = "
%s%s
%s
\n"; - write_html (msi->html, handle, table); - - write_html (msi->html, handle, remote_text_2); - if (!msi->get_local_mail) - write_html (msi->html, handle, remote_text_3_must); - - /* Write the list of configurable sources */ - write_html (msi->html, handle, "
"); - if (msi->get_local_mail) { - widget = gtk_radio_button_new_with_label (NULL, - remote_label_none); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget)); - gtk_object_set_data (GTK_OBJECT (msi->html), "remote:no", - widget); - write_html (msi->html, handle, - "\n
"); - } - - for (i = 0; i < nproviders; i++) { - button = g_strdup_printf ("remote:%s", providers[i].protocol); - widget = gtk_radio_button_new_with_label (group, providers[i].protocol); - if (msi->remote_provider == i) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), - TRUE); - } - group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget)); - gtk_object_set_data (GTK_OBJECT (msi->html), button, widget); - g_free (button); - - button = g_strdup_printf ("\n" - "
", - providers[i].protocol); - write_html (msi->html, handle, button); - g_free (button); - } - write_html (msi->html, handle, "
"); - - end_html (msi->html, handle); -} - -static int -finish_remote (struct msinfo *msi, int direction) -{ - GtkToggleButton *radio; - char *button; - int i; - - radio = gtk_object_get_data (GTK_OBJECT (msi->html), "remote:no"); - msi->get_remote_mail = !radio || !gtk_toggle_button_get_active (radio); - if (msi->get_remote_mail) { - for (i = 0; i < nproviders; i++) { - button = g_strdup_printf ("remote:%s", - providers[i].protocol); - radio = gtk_object_get_data (GTK_OBJECT (msi->html), - button); - if (gtk_toggle_button_get_active (radio)) - break; - } - - msi->remote_provider = i; - } else if (direction == 1) - direction = 2; /* Skip remconf page. */ - - return msi->page + direction; -} - -#define remconf_text_title \ - "

Configure a remote mail source: %s


" - -#define remconf_text_host_label "Server name:" -#define remconf_text_user_label "Account name:" -#define remconf_text_path_label "Path to mail on server:" -#define remconf_text_auth_label "Authentication method:" - -#define remconf_text_password \ - "

If you would like to have Evolution remember the password " \ - "for this account, enter it below. If you would rather be " \ - "prompted for the password when Evolution needs it, choose " \ - "one of the other options.

\n" - -#define remconf_text_password_remember "Remember my password" -#define remconf_text_password_confirm "Enter password again for confirmation" -#define remconf_text_password_once \ - "Prompt me for the password once each Evolution session." -#define remconf_text_password_forget \ - "Prompt me for the password every time it is needed." - -static void -resize_password (GtkWidget *html, GtkAllocation *alloc, gpointer data) -{ - GtkWidget *scrolled; - - scrolled = gtk_object_get_data (GTK_OBJECT (html), "remconf:htmlwin"); - gtk_widget_set_usize (scrolled, alloc->width - 20, 300); -} - -static void -frob_password (GtkMenuItem *menuitem, gpointer data) -{ - struct msinfo *msi = data; - GtkHTML *subhtml; - GtkHTMLStreamHandle handle; - GtkWidget *radio, *table, *text, *label; - GSList *group = NULL; - int id; - - id = GPOINTER_TO_UINT (gtk_object_get_data (GTK_OBJECT (menuitem), - "id")); - gtk_object_set_data (GTK_OBJECT (msi->html), "remconf:authproto", - GUINT_TO_POINTER (id)); - subhtml = gtk_object_get_data (GTK_OBJECT (msi->html), "remconf:html"); - handle = start_html (subhtml); - if (providers[msi->remote_provider].authpasswd[id]) { - write_html (subhtml, handle, remconf_text_password); - - table = gtk_table_new (2, 2, FALSE); - radio = gtk_radio_button_new_with_label (NULL, remconf_text_password_remember); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - gtk_object_set_data (GTK_OBJECT (subhtml), "sub:remember", - radio); - gtk_table_attach (GTK_TABLE (table), radio, 0, 1, 0, 1, - GTK_FILL, GTK_SHRINK, 0, 0); - text = gtk_entry_new (); - gtk_entry_set_visibility (GTK_ENTRY (text), FALSE); - if (msi->remote_password) - gtk_entry_set_text (GTK_ENTRY (text), msi->remote_password); - gtk_object_set_data (GTK_OBJECT (subhtml), "sub:passwd1", - text); - gtk_table_attach (GTK_TABLE (table), text, 1, 2, 0, 1, - GTK_EXPAND, GTK_SHRINK, 0, 0); - label = gtk_label_new (remconf_text_password_confirm); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - GTK_SHRINK, GTK_SHRINK, 5, 0); - text = gtk_entry_new (); - gtk_entry_set_visibility (GTK_ENTRY (text), FALSE); - if (msi->remote_password) - gtk_entry_set_text (GTK_ENTRY (text), msi->remote_password); - gtk_object_set_data (GTK_OBJECT (subhtml), "sub:passwd2", - text); - gtk_table_attach (GTK_TABLE (table), text, 1, 2, 1, 2, - GTK_EXPAND, GTK_SHRINK, 0, 0); - - gtk_object_set_data (GTK_OBJECT (subhtml), "sub:table", table); - - write_html (subhtml, handle, "" - "\n"); - - radio = gtk_radio_button_new_with_label (group, remconf_text_password_once); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - gtk_object_set_data (GTK_OBJECT (subhtml), "sub:once", - radio); - write_html (subhtml, handle, "" - "\n"); - - radio = gtk_radio_button_new_with_label (group, remconf_text_password_forget); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - gtk_object_set_data (GTK_OBJECT (subhtml), "sub:forget", - radio); - write_html (subhtml, handle, "" - "\n"); - } else { - gtk_object_set_data (GTK_OBJECT (subhtml), "sub:remember", NULL); - gtk_object_set_data (GTK_OBJECT (subhtml), "sub:once", NULL); - gtk_object_set_data (GTK_OBJECT (subhtml), "sub:forget", NULL); - } - end_html (subhtml, handle); -} - -void -display_remconf (struct msinfo *msi) -{ - GtkHTMLStreamHandle handle; - char *text; - int prov = msi->remote_provider; - GtkWidget *widget, *menu, *menuitem, *mi1 = NULL; - GtkWidget *scrolled, *subhtml; - - handle = start_html (msi->html); - - text = g_strdup_printf (remconf_text_title, providers[prov].protocol); - write_html (msi->html, handle, text); - g_free (text); - - write_html (msi->html, handle, "\n"); - - if (1) { - write_html (msi->html, handle, ""); - } - - if (1) { - write_html (msi->html, handle, ""); - } - - if (0) { - write_html (msi->html, handle, ""); - } - - if (1) { - int i; - - write_html (msi->html, handle, ""); - } - write_html (msi->html, handle, "
"); - write_html (msi->html, handle, remconf_text_host_label); - widget = gtk_entry_new (); - if (msi->remote_host) { - gtk_entry_set_text (GTK_ENTRY (widget), - msi->remote_host); - } - gtk_object_set_data (GTK_OBJECT (msi->html), "remconf:host", - widget); - write_html (msi->html, handle, "
"); - write_html (msi->html, handle, remconf_text_user_label); - widget = gtk_entry_new (); - if (msi->remote_user) { - gtk_entry_set_text (GTK_ENTRY (widget), - msi->remote_user); - } - gtk_object_set_data (GTK_OBJECT (msi->html), "remconf:user", - widget); - write_html (msi->html, handle, "
"); - write_html (msi->html, handle, remconf_text_path_label); - widget = gtk_entry_new (); -#if 0 - if (msi->remote_path) { - gtk_entry_set_text (GTK_ENTRY (widget), - msi->remote_path); - } -#endif - gtk_object_set_data (GTK_OBJECT (msi->html), "remconf:path", - widget); - write_html (msi->html, handle, "
"); - write_html (msi->html, handle, remconf_text_auth_label); - menu = gtk_menu_new (); - for (i = 0; i < 4 && providers[prov].authname[i]; i++) { - menuitem = gtk_menu_item_new_with_label (providers[prov].authname[i]); - gtk_widget_show (menuitem); - gtk_signal_connect (GTK_OBJECT (menuitem), "activate", - GTK_SIGNAL_FUNC (frob_password), - msi); - gtk_object_set_data (GTK_OBJECT (menuitem), "id", - GUINT_TO_POINTER (i)); - if (!mi1) - mi1 = menuitem; - gtk_menu_append (GTK_MENU (menu), menuitem); - } - widget = gtk_option_menu_new (); - gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), menu); - gtk_option_menu_set_history (GTK_OPTION_MENU (widget), - msi->remote_auth ? - msi->remote_auth : 0); - gtk_object_set_data (GTK_OBJECT (msi->html), "remconf:auth", - widget); - write_html (msi->html, handle, "
\n"); - - subhtml = gtk_html_new (); - gtk_html_set_editable (GTK_HTML (subhtml), FALSE); - gtk_signal_connect (GTK_OBJECT (subhtml), "object_requested", - GTK_SIGNAL_FUNC (object_requested), NULL); - gtk_object_set_data (GTK_OBJECT (msi->html), "remconf:html", - subhtml); - frob_password (GTK_MENU_ITEM (mi1), msi); - scrolled = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), - GTK_POLICY_NEVER, GTK_POLICY_NEVER); - gtk_container_add (GTK_CONTAINER (scrolled), subhtml); - gtk_object_set_data (GTK_OBJECT (msi->html), "remconf:htmlwin", - scrolled); - write_html (msi->html, handle, "" - "\n"); - write_html (msi->html, handle, "

foo

"); - - gtk_signal_connect (GTK_OBJECT (msi->html), "size-allocate", - GTK_SIGNAL_FUNC (resize_password), NULL); - - end_html (msi->html, handle); -} - -static int -finish_remconf (struct msinfo *msi, int direction) -{ - GtkEntry *host, *user, *passwd1, *passwd2; - char *data; - GtkWidget *menu, *menuitem; - GtkObject *subhtml; - GtkToggleButton *radio; - - gtk_signal_disconnect_by_func (GTK_OBJECT (msi->html), - GTK_SIGNAL_FUNC (resize_password), - NULL); - - host = gtk_object_get_data (GTK_OBJECT (msi->html), "remconf:host"); - data = gtk_entry_get_text (GTK_ENTRY (host)); - if (data && *data) - msi->remote_host = g_strdup (data); - - user = gtk_object_get_data (GTK_OBJECT (msi->html), "remconf:user"); - data = gtk_entry_get_text (GTK_ENTRY (user)); - if (data && *data) - msi->remote_user = g_strdup (data); - - msi->remote_auth = GPOINTER_TO_UINT (gtk_object_get_data (GTK_OBJECT (msi->html), "remconf:authproto")); - - subhtml = gtk_object_get_data (GTK_OBJECT (msi->html), "remconf:html"); - radio = gtk_object_get_data (subhtml, "sub:remember"); - if (radio && gtk_toggle_button_get_active (radio)) { - passwd1 = gtk_object_get_data (subhtml, "sub:passwd1"); - passwd2 = gtk_object_get_data (subhtml, "sub:passwd2"); - - /* XXX compare */ - data = gtk_entry_get_text (GTK_ENTRY (passwd1)); - printf ("%s\n", data); - if (data && *data) { - msi->remote_password = g_strdup (data); - msi->remember_password = TRUE; - } - } else { - radio = gtk_object_get_data (subhtml, "sub:once"); - msi->remember_password = gtk_toggle_button_get_active (radio); - } - - return msi->page + direction; -} diff --git a/mail/mail-types.h b/mail/mail-types.h deleted file mode 100644 index c5b690563d..0000000000 --- a/mail/mail-types.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#ifndef MAIL_TYPES_H -#define MAIL_TYPES_H 1 - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus }*/ - - -typedef struct _FolderBrowser FolderBrowser; -typedef struct _MessageList MessageList; -typedef struct _MailDisplay MailDisplay; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* MAIL_TYPES_H */ diff --git a/mail/mail.h b/mail/mail.h deleted file mode 100644 index cfbe74b801..0000000000 --- a/mail/mail.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Copyright 2000, Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. - */ - -#include -#include "camel/camel.h" -#include "composer/e-msg-composer.h" - -/* FIXME FIXME FIXME this sucks sucks sucks sucks */ - -/* folder-browser-factory */ -void folder_browser_factory_init (void); -BonoboControl *folder_browser_factory_new_control (void); - -/* mail-config */ -void mail_config_druid (void); - -/* mail-format */ -void mail_format_mime_message (CamelMimeMessage *mime_message, GtkBox *box); - -EMsgComposer *mail_generate_reply (CamelMimeMessage *mime_message, - gboolean to_all); - -EMsgComposer *mail_generate_forward (CamelMimeMessage *mime_message, - gboolean forward_as_attachment, - gboolean keep_attachments); - -/* mail-identify */ -char *mail_identify_mime_part (CamelMimePart *part); - -/* mail-ops */ -void fetch_mail (GtkWidget *button, gpointer user_data); -void send_msg (GtkWidget *button, gpointer user_data); -void send_to_url (const char *url); -void forward_msg (GtkWidget *button, gpointer user_data); -void reply_to_sender (GtkWidget *button, gpointer user_data); -void reply_to_all (GtkWidget *button, gpointer user_data); -void delete_msg (GtkWidget *button, gpointer user_data); -void expunge_folder (GtkWidget *button, gpointer user_data); - -void filter_edit (GtkWidget *button, gpointer user_data); -void vfolder_edit (GtkWidget *button, gpointer user_data); - -/* session */ -void session_init (void); -extern CamelSession *session; diff --git a/mail/main.c b/mail/main.c deleted file mode 100644 index 0355c5534c..0000000000 --- a/mail/main.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * mail-component.c: The core of the mail component - * - * Author: - * Miguel de Icaza (miguel@helixcode.com) - * - * (C) 2000 Helix Code, Inc. - */ - -#include -#include -#include -#include - -#include "e-util/e-gui-utils.h" -#include "e-util/e-cursors.h" - -#include "component-factory.h" -#include "mail.h" - -#ifdef USING_OAF - -#include - -static void -init_corba (int *argc, char *argv []) -{ - gnome_init_with_popt_table ("evolution-mail-component", VERSION, *argc, argv, - oaf_popt_options, 0, NULL); - oaf_init (*argc, argv); -} - -#else /* USING_OAF */ - -#include - -static void -init_corba (int *argc, char *argv []) -{ - CORBA_Environment ev; - - CORBA_exception_init (&ev); - - gnome_CORBA_init_with_popt_table ( - "evolution-mail-component", "1.0", - argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev); - - CORBA_exception_free (&ev); -} - -#endif /* USING_OAF */ - -static void -init_bonobo (void) -{ - if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE){ - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("Mail Component: I could not initialize Bonobo")); - exit (1); - } -} - -int -main (int argc, char *argv []) -{ - bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR); - textdomain (PACKAGE); - - init_corba (&argc, argv); - init_bonobo (); - - glade_gnome_init (); - - session_init (); - e_cursors_init (); - - folder_browser_factory_init (); - component_factory_init (); - - bonobo_main (); - - return 0; -} diff --git a/mail/message-list.c b/mail/message-list.c deleted file mode 100644 index 1d6e898a7c..0000000000 --- a/mail/message-list.c +++ /dev/null @@ -1,885 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * message-list.c: Displays the messages. - * Implements CORBA's Evolution::MessageList - * - * Author: - * Miguel de Icaza (miguel@helixcode.com) - * Bertrand Guiheneuf (bg@aful.org) - * - * (C) 2000 Helix Code, Inc. - */ -#include -#include -#include -#include "e-util/e-util.h" -#include "camel/camel-exception.h" -#include -#include "message-list.h" -#include "Mail.h" -#include "widgets/e-table/e-table-header-item.h" -#include "widgets/e-table/e-table-item.h" - -#include "pixmaps.h" - -/* - * Default sizes for the ETable display - * - */ -#define N_CHARS(x) (CHAR_WIDTH * (x)) - -#define COL_ICON_WIDTH (16) -#define COL_CHECK_BOX_WIDTH (16) -#define COL_FROM_EXPANSION (24.0) -#define COL_FROM_WIDTH_MIN (32) -#define COL_SUBJECT_EXPANSION (30.0) -#define COL_SUBJECT_WIDTH_MIN (32) -#define COL_SENT_EXPANSION (4.0) -#define COL_SENT_WIDTH_MIN (1) -#define COL_RECEIVE_EXPANSION (20.0) -#define COL_RECEIVE_WIDTH_MIN (32) -#define COL_TO_EXPANSION (24.0) -#define COL_TO_WIDTH_MIN (32) -#define COL_SIZE_EXPANSION (6.0) -#define COL_SIZE_WIDTH_MIN (32) - -#define PARENT_TYPE (bonobo_object_get_type ()) - -static BonoboObjectClass *message_list_parent_class; -static POA_Evolution_MessageList__vepv evolution_message_list_vepv; - -static void -on_row_selection_cmd (ETable *table, - int row, - gboolean selected, - gpointer user_data); - - -static CamelMessageInfo *get_message_info(MessageList *message_list, gint row) -{ - CamelMessageInfo *info = NULL; - - if (message_list->search) { - if (rowmatch_count) { - info = message_list->summary_search_cache->pdata[row]; - if (info == NULL) { - char *uid = g_list_nth_data(message_list->matches, row); - if (uid) { - info = message_list->summary_search_cache->pdata[row] = - (CamelMessageInfo *) camel_folder_summary_get_by_uid(message_list->folder, uid); - } - } - } - } else { - if (rowsummary_table->len) - info = message_list->summary_table->pdata[row]; - } - - return info; -} - -static void -message_changed(CamelMimeMessage *m, enum _MessageChangeType type, MessageList *message_list) -{ - e_table_model_changed (message_list->table_model); -} - -/* select a message and display it */ -static void -select_msg (MessageList *message_list, gint row) -{ - CamelException ex; - CamelMimeMessage *message = NULL; - CamelMessageInfo *msg_info; - - camel_exception_init (&ex); - - msg_info = get_message_info(message_list, row); - if (msg_info) { - message = camel_folder_get_message_by_uid (message_list->folder, - msg_info->uid, - &ex); - if (camel_exception_get_id (&ex)) { - printf ("Unable to get message: %s\n", - ex.desc?ex.desc:"unknown_reason"); - return; - } - } - - if (message) { - gtk_signal_connect((GtkObject *)message, "message_changed", - message_changed, message_list); - mail_display_set_message (message_list->parent_folder_browser->mail_display, - CAMEL_MEDIUM (message)); - gtk_object_unref (GTK_OBJECT (message)); - } -} - -/* - * SimpleTableModel::col_count - */ -static int -ml_col_count (ETableModel *etm, void *data) -{ - return COL_LAST; -} - -/* - * SimpleTableModel::row_count - */ -static int -ml_row_count (ETableModel *etm, void *data) -{ - MessageList *message_list = data; - int v; - - if (!message_list->folder) { - return 0; - } - - if (message_list->search) { - v = message_list->match_count; - } else { - v = message_list->summary_table->len; - } - - /* in the case where no message is available, return 1 - * however, cause we want to be able to show a text */ - return (v ? v:1); - -} - -static void * -ml_value_at (ETableModel *etm, int col, int row, void *data) -{ - static char buffer [10]; - MessageList *message_list = data; - CamelFolder *folder; - CamelMessageInfo *msg_info; - CamelException ex; - void *retval = NULL; - - camel_exception_init (&ex); - - folder = message_list->folder; - if (!folder) - goto nothing_to_see; - - - /* retrieve the message information array */ - msg_info = get_message_info(message_list, row); - - /* - * in the case where it is zero message long - * display nothing - */ - if (msg_info == NULL) - goto nothing_to_see; - - switch (col){ - case COL_ONLINE_STATUS: - retval = GINT_TO_POINTER (0); - break; - - case COL_MESSAGE_STATUS: - if (msg_info->flags & CAMEL_MESSAGE_DELETED) - retval = GINT_TO_POINTER (2); - else - retval = GINT_TO_POINTER (1); - break; - - case COL_PRIORITY: - retval = GINT_TO_POINTER (1); - break; - - case COL_ATTACHMENT: - retval = GINT_TO_POINTER (0); - break; - - case COL_FROM: - if (msg_info->from) - retval = msg_info->from; - else - retval = ""; - break; - - case COL_SUBJECT: - if (msg_info->subject) - retval = msg_info->subject; - else - retval = ""; - break; - - case COL_SENT: - retval = "sent"; - break; - - case COL_RECEIVE: - retval = "receive"; - break; - - case COL_TO: - retval = "dudes@server"; - break; - - case COL_SIZE: - sprintf (buffer, "%d", msg_info->size); - retval = buffer; - break; - - case COL_DELETED: - retval = GINT_TO_POINTER(!!(msg_info->flags & CAMEL_MESSAGE_DELETED)); - break; - - default: - g_assert_not_reached (); - } - - return retval; - - - nothing_to_see: - /* - * in the case there is nothing to look at, - * notify the user. - */ - if (col == COL_SUBJECT) - return "No item in this view"; - else - return NULL; -} - -static void -ml_set_value_at (ETableModel *etm, int col, int row, const void *value, void *data) -{ -} - -static gboolean -ml_is_cell_editable (ETableModel *etm, int col, int row, void *data) -{ - return FALSE; -} - -static void * -ml_duplicate_value (ETableModel *etm, int col, const void *value, void *data) -{ - switch (col){ - case COL_ONLINE_STATUS: - case COL_MESSAGE_STATUS: - case COL_PRIORITY: - case COL_ATTACHMENT: - case COL_DELETED: - return (void *) value; - - case COL_FROM: - case COL_SUBJECT: - case COL_SENT: - case COL_RECEIVE: - case COL_TO: - case COL_SIZE: - return g_strdup (value); - default: - g_assert_not_reached (); - } - return NULL; -} - -static void -ml_free_value (ETableModel *etm, int col, void *value, void *data) -{ - switch (col){ - case COL_ONLINE_STATUS: - case COL_MESSAGE_STATUS: - case COL_PRIORITY: - case COL_ATTACHMENT: - case COL_DELETED: - break; - - case COL_FROM: - case COL_SUBJECT: - case COL_SENT: - case COL_RECEIVE: - case COL_TO: - case COL_SIZE: - g_free (value); - break; - default: - g_assert_not_reached (); - } -} - -static void * -ml_initialize_value (ETableModel *etm, int col, void *data) -{ - switch (col){ - case COL_ONLINE_STATUS: - case COL_MESSAGE_STATUS: - case COL_PRIORITY: - case COL_ATTACHMENT: - case COL_DELETED: - return NULL; - - case COL_FROM: - case COL_SUBJECT: - case COL_SENT: - case COL_RECEIVE: - case COL_TO: - case COL_SIZE: - return g_strdup(""); - default: - g_assert_not_reached (); - } - - return NULL; -} - -static gboolean -ml_value_is_empty (ETableModel *etm, int col, const void *value, void *data) -{ - switch (col){ - case COL_ONLINE_STATUS: - case COL_MESSAGE_STATUS: - case COL_PRIORITY: - case COL_ATTACHMENT: - case COL_DELETED: - return value == NULL; - - case COL_FROM: - case COL_SUBJECT: - case COL_SENT: - case COL_RECEIVE: - case COL_TO: - case COL_SIZE: - return !(value && *(char *)value); - default: - g_assert_not_reached (); - return FALSE; - } -} - -static void -ml_thaw (ETableModel *etm, void *data) -{ - e_table_model_changed (etm); -} - -static struct { - char **image_base; - GdkPixbuf *pixbuf; -} states_pixmaps [] = { - { envelope_opened_xpm, NULL }, - { envelope_closed_xpm, NULL }, - { empty_xpm, NULL }, - { attachment_xpm, NULL }, - { attachment_header_xpm, NULL }, - { online_status_xpm, NULL }, - { message_status_xpm, NULL }, - { envelope_deleted_xpm, NULL }, - { NULL, NULL }, -}; - -static void -message_list_init_images (void) -{ - int i; - - /* - * Only load once, and share - */ - if (states_pixmaps [0].pixbuf) - return; - - for (i = 0; states_pixmaps [i].image_base; i++){ - states_pixmaps [i].pixbuf = gdk_pixbuf_new_from_xpm_data ( - (const char **) states_pixmaps [i].image_base); - } -} - -static void -message_list_init_renderers (MessageList *message_list) -{ - g_assert (message_list); - g_assert (message_list->table_model); - - message_list->render_text = e_cell_text_new ( - message_list->table_model, - NULL, GTK_JUSTIFY_LEFT); - - gtk_object_set(GTK_OBJECT(message_list->render_text), - "strikeout_column", COL_DELETED, - NULL); - - message_list->render_online_status = e_cell_checkbox_new (); - - /* - * Message status - */ - { - GdkPixbuf *images [3]; - - images [0] = states_pixmaps [0].pixbuf; - images [1] = states_pixmaps [1].pixbuf; - images [2] = states_pixmaps [7].pixbuf; - - message_list->render_message_status = e_cell_toggle_new (0, 3, images); - } - - /* - * Attachment - */ - { - GdkPixbuf *images [2]; - - images [0] = states_pixmaps [2].pixbuf; - images [1] = states_pixmaps [3].pixbuf; - - message_list->render_attachment = e_cell_toggle_new (0, 2, images); - } - - /* - * FIXME: We need a real renderer here - */ - message_list->render_priority = e_cell_checkbox_new (); -} - -static void -message_list_init_header (MessageList *message_list) -{ - int i; - - /* - * FIXME: - * - * Use the font metric to compute this. - */ - - message_list->header_model = e_table_header_new (); - gtk_object_ref (GTK_OBJECT (message_list->header_model)); - gtk_object_sink (GTK_OBJECT (message_list->header_model)); - - message_list->table_cols [COL_ONLINE_STATUS] = - e_table_col_new_with_pixbuf ( - COL_ONLINE_STATUS, states_pixmaps [5].pixbuf, - 0.0, COL_CHECK_BOX_WIDTH, - message_list->render_online_status, - g_int_compare, FALSE); - - message_list->table_cols [COL_MESSAGE_STATUS] = - e_table_col_new_with_pixbuf ( - COL_MESSAGE_STATUS, states_pixmaps [0].pixbuf, - 0.0, COL_CHECK_BOX_WIDTH, - message_list->render_message_status, - g_int_compare, FALSE); - - message_list->table_cols [COL_PRIORITY] = - e_table_col_new ( - COL_PRIORITY, _("Priority"), - 0.0, COL_CHECK_BOX_WIDTH, - message_list->render_priority, - g_int_compare, FALSE); - - message_list->table_cols [COL_ATTACHMENT] = - e_table_col_new_with_pixbuf ( - COL_ATTACHMENT, states_pixmaps [4].pixbuf, - 0.0, COL_ICON_WIDTH, - message_list->render_attachment, - g_int_compare, FALSE); - - message_list->table_cols [COL_FROM] = - e_table_col_new ( - COL_FROM, _("From"), - COL_FROM_EXPANSION, COL_FROM_WIDTH_MIN, - message_list->render_text, - g_str_compare, TRUE); - - message_list->table_cols [COL_SUBJECT] = - e_table_col_new ( - COL_SUBJECT, _("Subject"), - COL_SUBJECT_EXPANSION, COL_SUBJECT_WIDTH_MIN, - message_list->render_text, - g_str_compare, TRUE); - - message_list->table_cols [COL_SENT] = - e_table_col_new ( - COL_SENT, _("Sent"), - COL_SENT_EXPANSION, COL_SENT_WIDTH_MIN, - message_list->render_text, - g_str_compare, TRUE); - - message_list->table_cols [COL_RECEIVE] = - e_table_col_new ( - COL_RECEIVE, _("Receive"), - COL_RECEIVE_EXPANSION, COL_RECEIVE_WIDTH_MIN, - message_list->render_text, - g_str_compare, TRUE); - - message_list->table_cols [COL_TO] = - e_table_col_new ( - COL_TO, _("To"), - COL_TO_EXPANSION, COL_TO_WIDTH_MIN, - message_list->render_text, - g_str_compare, TRUE); - - message_list->table_cols [COL_SIZE] = - e_table_col_new ( - COL_SIZE, _("Size"), - COL_SIZE_EXPANSION, COL_SIZE_WIDTH_MIN, - message_list->render_text, - g_str_compare, TRUE); - - /* - * Dummy init: It setups the headers to match the order in which - * they are defined. In the future e-table widget will take care - * of this. - */ - for (i = 0; i < COL_LAST; i++) { - if (i != COL_DELETED) { - gtk_object_ref (GTK_OBJECT (message_list->table_cols [i])); - e_table_header_add_column (message_list->header_model, - message_list->table_cols [i], i); - } - } -} - -static char * -message_list_get_layout (MessageList *message_list) -{ - if (0) - return g_strdup (" 0 1 2 3 4 5 6 7 8 9 "); - else { - /* Message status, From, Sent, Subject */ - return g_strdup (" 1 4 5 "); - } -} - -/* - * GtkObject::init - */ -static void -message_list_init (GtkObject *object) -{ - MessageList *message_list = MESSAGE_LIST (object); - char *spec; - - message_list->table_model = e_table_simple_new ( - ml_col_count, ml_row_count, ml_value_at, - ml_set_value_at, ml_is_cell_editable, - ml_duplicate_value, ml_free_value, - ml_initialize_value, ml_value_is_empty, - ml_thaw, message_list); - - message_list_init_renderers (message_list); - message_list_init_header (message_list); - - /* - * The etable - */ - - spec = message_list_get_layout (message_list); - message_list->etable = e_table_new ( - message_list->header_model, message_list->table_model, spec); - g_free (spec); - - gtk_signal_connect (GTK_OBJECT (message_list->etable), "row_selection", - GTK_SIGNAL_FUNC (on_row_selection_cmd), message_list); - - gtk_widget_show (message_list->etable); - - gtk_object_ref (GTK_OBJECT (message_list->table_model)); - gtk_object_sink (GTK_OBJECT (message_list->table_model)); - - /* - * We do own the Etable, not some widget container - */ - gtk_object_ref (GTK_OBJECT (message_list->etable)); - gtk_object_sink (GTK_OBJECT (message_list->etable)); - - message_list->summary_search_cache = g_ptr_array_new(); -} - -static void -message_list_destroy (GtkObject *object) -{ - MessageList *message_list = MESSAGE_LIST (object); - int i; - - - gtk_object_unref (GTK_OBJECT (message_list->table_model)); - gtk_object_unref (GTK_OBJECT (message_list->header_model)); - - /* - * Renderers - */ - gtk_object_unref (GTK_OBJECT (message_list->render_text)); - gtk_object_unref (GTK_OBJECT (message_list->render_online_status)); - gtk_object_unref (GTK_OBJECT (message_list->render_message_status)); - gtk_object_unref (GTK_OBJECT (message_list->render_priority)); - gtk_object_unref (GTK_OBJECT (message_list->render_attachment)); - - gtk_object_unref (GTK_OBJECT (message_list->etable)); - - if (message_list->summary_search_cache) - g_ptr_array_free(message_list->summary_search_cache, TRUE); - if (message_list->summary_table) - g_ptr_array_free(message_list->summary_table, TRUE); - - for (i = 0; i < COL_LAST; i++) - gtk_object_unref (GTK_OBJECT (message_list->table_cols [i])); - - GTK_OBJECT_CLASS (message_list_parent_class)->destroy (object); -} - -/* - * CORBA method: Evolution::MessageList::select_message - */ -static void -MessageList_select_message (PortableServer_Servant _servant, - const CORBA_long message_number, - CORBA_Environment *ev) -{ - printf ("FIXME: select message method\n"); -} - -/* - * CORBA method: Evolution::MessageList::open_message - */ -static void -MessageList_open_message (PortableServer_Servant _servant, - const CORBA_long message_number, - CORBA_Environment *ev) -{ - printf ("FIXME: open message method\n"); -} - -static POA_Evolution_MessageList__epv * -evolution_message_list_get_epv (void) -{ - POA_Evolution_MessageList__epv *epv; - - epv = g_new0 (POA_Evolution_MessageList__epv, 1); - - epv->select_message = MessageList_select_message; - epv->open_message = MessageList_open_message; - - return epv; -} - -static void -message_list_corba_class_init (void) -{ - evolution_message_list_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv (); - evolution_message_list_vepv.Evolution_MessageList_epv = evolution_message_list_get_epv (); -} - -/* - * GtkObjectClass::init - */ -static void -message_list_class_init (GtkObjectClass *object_class) -{ - message_list_parent_class = gtk_type_class (PARENT_TYPE); - - object_class->destroy = message_list_destroy; - - message_list_corba_class_init (); - - message_list_init_images (); -} - -static void -message_list_construct (MessageList *message_list, Evolution_MessageList corba_message_list) -{ - bonobo_object_construct (BONOBO_OBJECT (message_list), corba_message_list); -} - -static Evolution_MessageList -create_corba_message_list (BonoboObject *object) -{ - POA_Evolution_MessageList *servant; - CORBA_Environment ev; - - servant = (POA_Evolution_MessageList *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &evolution_message_list_vepv; - - CORBA_exception_init (&ev); - POA_Evolution_MessageList__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION){ - g_free (servant); - CORBA_exception_free (&ev); - return CORBA_OBJECT_NIL; - } - - CORBA_exception_free (&ev); - return (Evolution_MessageList) bonobo_object_activate_servant (object, servant); -} - -BonoboObject * -message_list_new (FolderBrowser *parent_folder_browser) -{ - Evolution_MessageList corba_object; - MessageList *message_list; - - g_assert (parent_folder_browser); - - message_list = gtk_type_new (message_list_get_type ()); - - corba_object = create_corba_message_list (BONOBO_OBJECT (message_list)); - if (corba_object == CORBA_OBJECT_NIL){ - gtk_object_destroy (GTK_OBJECT (message_list)); - return NULL; - } - - message_list->parent_folder_browser = parent_folder_browser; - - message_list->idle_id = 0; - - message_list_construct (message_list, corba_object); - - return BONOBO_OBJECT (message_list); -} - -void -message_list_set_search (MessageList *message_list, const char *search) -{ - if (message_list->matches) { - /* FIXME: free contents too ... */ - g_list_free(message_list->matches); - message_list->matches = NULL; - } - - if (message_list->search) { - g_free(message_list->search); - message_list->search = NULL; - } - - if (search) { - CamelException ex; - - camel_exception_init (&ex); - message_list->matches = camel_folder_search_by_expression(message_list->folder, search, &ex); - message_list->search = g_strdup(search); - message_list->match_count = g_list_length(message_list->matches); - g_ptr_array_set_size(message_list->summary_search_cache, message_list->match_count); - memset(message_list->summary_search_cache->pdata, 0, sizeof(message_list->summary_search_cache->pdata[0]) * message_list->match_count); - } - - e_table_model_changed (message_list->table_model); - select_msg (message_list, 0); -} - -static void -folder_changed(CamelFolder *f, int type, MessageList *message_list) -{ - if (message_list->summary_table) - camel_folder_free_summary(f, message_list->summary_table); - message_list->summary_table = camel_folder_get_summary (f, NULL); - - message_list_set_search(message_list, message_list->search); -} - -void -message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder) -{ - CamelException ex; - gboolean folder_exists; - - g_return_if_fail (message_list != NULL); - g_return_if_fail (camel_folder != NULL); - g_return_if_fail (IS_MESSAGE_LIST (message_list)); - g_return_if_fail (CAMEL_IS_FOLDER (camel_folder)); - g_return_if_fail (camel_folder_has_summary_capability (camel_folder)); - - if (message_list->matches) { - /* FIXME: free contents too ... */ - g_list_free(message_list->matches); - message_list->matches = NULL; - } - - if (message_list->summary_table) - g_ptr_array_free(message_list->summary_table, TRUE); - message_list->summary_table = NULL; - - camel_exception_init (&ex); - - if (message_list->folder) - gtk_object_unref (GTK_OBJECT (message_list->folder)); - - message_list->folder = camel_folder; - - folder_exists = camel_folder_exists (camel_folder, NULL); - - if (camel_exception_get_id (&ex)) { - printf ("Unable to test for folder existence: %s\n", - ex.desc?ex.desc:"unknown reason"); - return; - } - - if (!folder_exists) { - g_warning ("Folder does not exist, creating it\n"); - /* - if you don't want the directory to be created - automatically here remove this. - */ - camel_folder_create (camel_folder, &ex); - if (camel_exception_get_id (&ex)) { - printf ("Unable to create folder: %s\n", - ex.desc?ex.desc:"unknown_reason"); - return; - } - - } - - camel_folder_open (camel_folder, FOLDER_OPEN_RW, &ex); - if (camel_exception_get_id (&ex)) { - printf ("Unable to open folder: %s\n", - ex.desc?ex.desc:"unknown_reason"); - return; - } - - gtk_signal_connect((GtkObject *)camel_folder, "folder_changed", folder_changed, message_list); - - gtk_object_ref (GTK_OBJECT (camel_folder)); - - message_list->summary_table = camel_folder_get_summary (message_list->folder, NULL); - e_table_model_changed (message_list->table_model); - - select_msg (message_list, 0); -} - -GtkWidget * -message_list_get_widget (MessageList *message_list) -{ - return message_list->etable; -} - -E_MAKE_TYPE (message_list, "MessageList", MessageList, message_list_class_init, message_list_init, PARENT_TYPE); - -static gboolean -on_row_selection_idle (gpointer data) -{ - MessageList *message_list = data; - - select_msg (message_list, message_list->row_to_select); - - message_list->idle_id = 0; - return FALSE; -} - -static void -on_row_selection_cmd (ETable *table, - int row, - gboolean selected, - gpointer user_data) -{ - if (selected) { - MessageList *message_list; - - message_list = MESSAGE_LIST (user_data); - - message_list->row_to_select = row; - - if (!message_list->idle_id) - g_idle_add_full (G_PRIORITY_LOW, on_row_selection_idle, message_list, NULL); - } -} - diff --git a/mail/message-list.h b/mail/message-list.h deleted file mode 100644 index 21d51875f8..0000000000 --- a/mail/message-list.h +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef _MESSAGE_LIST_H_ -#define _MESSAGE_LIST_H_ - -#include "mail-types.h" -#include -#include -#include "camel/camel-folder.h" -#include "e-table/e-table.h" -#include "e-table/e-table-simple.h" -#include "e-table/e-cell-text.h" -#include "e-table/e-cell-toggle.h" -#include "e-table/e-cell-checkbox.h" -#include "folder-browser.h" - - -#define MESSAGE_LIST_TYPE (message_list_get_type ()) -#define MESSAGE_LIST(o) (GTK_CHECK_CAST ((o), MESSAGE_LIST_TYPE, MessageList)) -#define MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_CAST((k), MESSAGE_LIST_TYPE, MessageListClass)) -#define IS_MESSAGE_LIST(o) (GTK_CHECK_TYPE ((o), MESSAGE_LIST_TYPE)) -#define IS_MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MESSAGE_LIST_TYPE)) - -typedef struct _Renderer Renderer; - - -enum { - COL_ONLINE_STATUS, - COL_MESSAGE_STATUS, - COL_PRIORITY, - COL_ATTACHMENT, - COL_FROM, - COL_SUBJECT, - COL_SENT, - COL_RECEIVE, - COL_TO, - COL_SIZE, - COL_DELETED, - - COL_LAST -}; - -struct _MessageList { - BonoboObject parent; - - /* the folder browser that contains the - * this message list */ - FolderBrowser *parent_folder_browser; - - ETableModel *table_model; - ETableHeader *header_model; - ETableCol *table_cols [COL_LAST]; - - ECell *render_text; - ECell *render_online_status; - ECell *render_message_status; - ECell *render_priority; - ECell *render_attachment; - - GtkWidget *etable; - - CamelFolder *folder; - - GPtrArray *summary_table; /* the summary of all messages */ - - char *search; /* search string */ - /* FIXME: This should use a better format ... */ - GList *matches; /* when a search has been performed ... */ - int match_count; - GPtrArray *summary_search_cache; /* summary info cache for searches */ - - /* used by the idle-call to select a row */ - int row_to_select; - guint idle_id; -} ; - -typedef struct { - BonoboObjectClass parent_class; -} MessageListClass; - -GtkType message_list_get_type (void); -BonoboObject *message_list_new (FolderBrowser *parent_folder_browser); -void message_list_set_folder (MessageList *message_list, - CamelFolder *camel_folder); -void message_list_set_search (MessageList *message_list, const char *search); -GtkWidget *message_list_get_widget (MessageList *message_list); - -#endif /* _MESSAGE_LIST_H_ */ diff --git a/mail/pixmaps.h b/mail/pixmaps.h deleted file mode 100644 index fdbb932771..0000000000 --- a/mail/pixmaps.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef EVOLUTION_PIXMAPS_H -#define EVOLUTION_PIXMAPS_H - -#include "pixmaps/envelope-opened.xpm" -#include "pixmaps/envelope-closed.xpm" -#include "pixmaps/empty.xpm" -#include "pixmaps/attachment.xpm" -#include "pixmaps/attachment-header.xpm" -#include "pixmaps/online-status.xpm" -#include "pixmaps/message-status.xpm" -#include "pixmaps/envelope-deleted.xpm" - -#endif /* EVOLUTION_PIXMAPS_H */ - diff --git a/mail/pixmaps/attachment-header.xpm b/mail/pixmaps/attachment-header.xpm deleted file mode 100644 index d3b0f96301..0000000000 --- a/mail/pixmaps/attachment-header.xpm +++ /dev/null @@ -1,22 +0,0 @@ -/* XPM */ -static char * attachment_header_xpm[] = { -"16 16 3 1", -" c None", -". c #000000", -"+ c #FFFFFF", -" ", -" ", -" ", -" .. ", -" + .. ..... ", -" .. .. . ", -" . .. . ", -" .. . .. ", -" . . . ", -" .. . ", -" . .. ", -" . .. ", -" ....... ", -" ", -" ", -" "}; diff --git a/mail/pixmaps/attachment.xpm b/mail/pixmaps/attachment.xpm deleted file mode 100644 index f154cceb18..0000000000 --- a/mail/pixmaps/attachment.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * attachment_xpm[] = { -"16 16 2 1", -" c None", -". c #000000", -" ", -" .. ", -" . . . ", -" . . .. ", -" . . . ", -" . . . ", -" . . . ", -" . . . ", -" . . . ", -" . . ", -" . . ", -" .. .. ", -" .. .. ", -" .. ", -" ", -" "}; diff --git a/mail/pixmaps/empty.xpm b/mail/pixmaps/empty.xpm deleted file mode 100644 index 93b02c0164..0000000000 --- a/mail/pixmaps/empty.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * empty_xpm[] = { -"16 16 2 1", -" c None", -". c #FFFFFF", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................"}; diff --git a/mail/pixmaps/envelope-closed.xpm b/mail/pixmaps/envelope-closed.xpm deleted file mode 100644 index 060b659c78..0000000000 --- a/mail/pixmaps/envelope-closed.xpm +++ /dev/null @@ -1,65 +0,0 @@ -/* XPM */ -static char * envelope_closed_xpm[] = { -"16 16 46 1", -" c None", -". c #000000", -"+ c #837D71", -"@ c #FFFFFF", -"# c #4E4B42", -"$ c #767165", -"% c #FFFEFE", -"& c #FFF4DB", -"* c #FFFEFD", -"= c #F4E9D1", -"- c #625D54", -"; c #D0C7B2", -"> c #767166", -", c #FFFDFA", -"' c #F2E7CF", -") c #666257", -"! c #C8BFAB", -"~ c #736D63", -"{ c #FFFEFC", -"] c #F6EBD3", -"^ c #EEE3CC", -"/ c #FAEFD6", -"( c #918A7C", -"_ c #7E786B", -": c #E0D6C0", -"< c #C7BEAA", -"[ c #FDF2D9", -"} c #8A8476", -"| c #746F63", -"1 c #CEC4B0", -"2 c #8C8678", -"3 c #F9EED5", -"4 c #F1E6CE", -"5 c #F7ECD3", -"6 c #EFE4CD", -"7 c #D1C7B2", -"8 c #555149", -"9 c #CDC4B0", -"0 c #666258", -"a c #C1B8A5", -"b c #C2B9A6", -"c c #C0B7A4", -"d c #C3BAA7", -"e c #C4BBA8", -"f c #CAC1AD", -"g c #4E4B43", -" ", -" ", -" ", -" ", -" ", -" ........... ", -" .+@@@@@@@@@#. ", -" .@$%&@&*&=-;. ", -" .@&>%&,&')'!. ", -" .@&&~{&])&^!. ", -" .@&/()@)_=:<. ", -" .@[}&&)]]|1<. ", -" .@2&^3456789. ", -" .0abbbcddefg. ", -" ........... ", -" "}; diff --git a/mail/pixmaps/envelope-deleted.xpm b/mail/pixmaps/envelope-deleted.xpm deleted file mode 100644 index 9588ad2f0b..0000000000 --- a/mail/pixmaps/envelope-deleted.xpm +++ /dev/null @@ -1,54 +0,0 @@ -/* XPM */ -static char * envelope_deleted_xpm[] = { -"16 16 35 1", -" c None", -". c #FF0000", -"+ c #000000", -"@ c #837D71", -"# c #FFFFFF", -"$ c #4E4B42", -"% c #767165", -"& c #FFFEFE", -"* c #FFF4DB", -"= c #F4E9D1", -"- c #625D54", -"; c #D0C7B2", -"> c #767166", -", c #FFFDFA", -"' c #666257", -") c #F2E7CF", -"! c #C8BFAB", -"~ c #FFFEFC", -"{ c #F6EBD3", -"] c #EEE3CC", -"^ c #918A7C", -"/ c #E0D6C0", -"( c #C7BEAA", -"_ c #8A8476", -": c #F9EED5", -"< c #F1E6CE", -"[ c #F7ECD3", -"} c #EFE4CD", -"| c #D1C7B2", -"1 c #C1B8A5", -"2 c #C2B9A6", -"3 c #C0B7A4", -"4 c #C3BAA7", -"5 c #C4BBA8", -"6 c #CAC1AD", -" ", -" ", -" . ", -" ... ... ", -" ... .. ", -" ++..++..+++ ", -" +@###...###$+ ", -" +#%&*...*=-;+ ", -" +#*>..,..')!+ ", -" +#*..~*{.*]!+ ", -" +#..^'#'../(+ ", -" +#._**'{{..(+ ", -" +..*]:<[}|..+ ", -" +.122234456.+ ", -" +++++++++++ ", -" "}; diff --git a/mail/pixmaps/envelope-opened.xpm b/mail/pixmaps/envelope-opened.xpm deleted file mode 100644 index 40de0d743d..0000000000 --- a/mail/pixmaps/envelope-opened.xpm +++ /dev/null @@ -1,74 +0,0 @@ -/* XPM */ -static char * envelope_opened_xpm[] = { -"16 16 55 1", -" c None", -". c #000000", -"+ c #F4EDDD", -"@ c #F1EBDB", -"# c #F1EAD8", -"$ c #EAE3CB", -"% c #F4EAD5", -"& c #F1E6CF", -"* c #DDD4BE", -"= c #ECE3CD", -"- c #D3CAB6", -"; c #C1C1C1", -"> c #BDBDBD", -", c #BFBFBF", -"' c #12110F", -") c #FFFFFF", -"! c #514D45", -"~ c #767165", -"{ c #D0C7B2", -"] c #FFF4DB", -"^ c #625D54", -"/ c #565249", -"( c #F2E7CF", -"_ c #C8BFAB", -": c #3B3732", -"< c #837D71", -"[ c #807A6D", -"} c #45423B", -"| c #EEE3CC", -"1 c #FBF0D7", -"2 c #918A7C", -"3 c #7E786B", -"4 c #F4E9D1", -"5 c #E0D6C0", -"6 c #C7BEAA", -"7 c #FDF2D9", -"8 c #6A665B", -"9 c #F6EBD3", -"0 c #656157", -"a c #CEC4B0", -"b c #6D675D", -"c c #F9EED5", -"d c #F1E6CE", -"e c #F7ECD3", -"f c #EFE4CD", -"g c #D1C7B2", -"h c #CDC4B0", -"i c #080707", -"j c #C1B8A5", -"k c #C2B9A6", -"l c #C0B7A4", -"m c #C3BAA7", -"n c #C4BBA8", -"o c #CAC1AD", -"p c #1E1D1A", -" ", -" ", -" ..... ", -" .+@##$. ", -" .%&&&&&*. ", -" .=&&&&&&&-. ", -" ..;>>>>>>>,'. ", -" .)!)))))))~{. ", -" .)]^)))))/(_. ", -" .)]]:<<[}]|_. ", -" .)]12]]]3456. ", -" .)78]]]990a6. ", -" .)b]|cdefg0h. ", -" .ijkkklmmnop. ", -" ........... ", -" "}; diff --git a/mail/pixmaps/message-status.xpm b/mail/pixmaps/message-status.xpm deleted file mode 100644 index a0c4414f3f..0000000000 --- a/mail/pixmaps/message-status.xpm +++ /dev/null @@ -1,22 +0,0 @@ -/* XPM */ -static char * message_status_xpm[] = { -"16 16 3 1", -" c None", -". c #09B0F2", -"+ c #33A8D6", -" ", -" .. ", -" .. ", -" ++++ ", -" ++++ ", -" ++++ ", -" +++++++++++ ", -"..+++++..++++.. ", -"..+++++..++++.. ", -" +++++++++++ ", -" ++++ ", -" ++++ ", -" ++++ ", -" .. ", -" .. ", -" "}; diff --git a/mail/pixmaps/online-status.xpm b/mail/pixmaps/online-status.xpm deleted file mode 100644 index 88009ea480..0000000000 --- a/mail/pixmaps/online-status.xpm +++ /dev/null @@ -1,23 +0,0 @@ -/* XPM */ -static char * online_status_xpm[] = { -"16 16 4 1", -" c None", -". c #000000", -"+ c #9B9B9B", -"@ c #5CE537", -" ", -" . ", -" . ", -" . ", -" . +........+ ", -" . .++++++++. ", -" .. .++++++@+. ", -" ...++++++++. ", -" .. .++++++++. ", -" . .++++++++. ", -" . +........+ ", -" . ", -" . ", -" . ", -" . ", -" "}; diff --git a/mail/session.c b/mail/session.c deleted file mode 100644 index b7b24920b0..0000000000 --- a/mail/session.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * session.c: handles the session infomration and resource manipulation - * - * Author: - * Miguel de Icaza (miguel@gnu.org) - * - * (C) 2000 Helix Code, Inc. http://www.helixcode.com - */ -#include -#include -#include "mail.h" -#include "e-util/e-setup.h" - -CamelSession *session; - -static void -request_callback (gchar *string, gpointer data) -{ - char **ans = data; - - if (string) - *ans = g_strdup(string); - else - *ans = NULL; -} - -static char * -evolution_auth_callback (char *prompt, gboolean secret, - CamelService *service, char *item, - CamelException *ex) -{ - GtkWidget *dialog; - char *ans; - - /* XXX look up stored passwords */ - - /* XXX parent window? */ - dialog = gnome_request_dialog (secret, prompt, NULL, 0, - request_callback, &ans, NULL); - if (!dialog) { - camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, - "Could not create dialog box."); - return NULL; - } - if (gnome_dialog_run_and_close (GNOME_DIALOG (dialog)) == -1 || - ans == NULL) { - camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, - "User cancelled query."); - return NULL; - } - - return ans; -} - -void -session_init (void) -{ - e_setup_base_dir (); - camel_init (); - - session = camel_session_new (evolution_auth_callback); -} diff --git a/mail/test-mail.c b/mail/test-mail.c deleted file mode 100644 index f2a39bf104..0000000000 --- a/mail/test-mail.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Tests the mail summary display bonobo component - * - * Author: - * Miguel de Icaza (miguel@kernel.org) - * - * (C) 2000 Helix Code, Inc. - */ - -#include - -#include -#include - -#ifdef USING_OAF - -#include - -static void -init_corba (int *argc, char *argv[]) -{ - gnome_init ("sample-control-container", "1.0", *argc, argv); - oaf_init (*argc, argv); -} - -#else /* USING_OAF */ - -#include - -static void -init_corba (int *argc, char *argv []) -{ - CORBA_Environment ev; - - CORBA_exception_init (&ev); - - gnome_CORBA_init ("sample-control-container", "1.0", argc, argv, 0, &ev); - - CORBA_exception_free (&ev); -} - -#endif /* USING_OAF */ - -static guint -create_container (void) -{ - GtkWidget *window, *control; - BonoboUIHandler *uih; - - gdk_rgb_init (); - - gtk_widget_set_default_colormap (gdk_rgb_get_cmap ()); - gtk_widget_set_default_visual (gdk_rgb_get_visual ()); - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_widget_set_usize (GTK_WIDGET (window), 640, 480); - gtk_widget_show (GTK_WIDGET (window)); - - uih = bonobo_ui_handler_new (); - -#ifdef USING_OAF - control = bonobo_widget_new_control ("OAFIID:control:evolution-mail:833d5a71-a201-4a0e-b7e6-5475c5c4cb45", - bonobo_object_corba_objref (BONOBO_OBJECT (uih))); -#else - control = bonobo_widget_new_control ("control:evolution-mail", - bonobo_object_corba_objref (BONOBO_OBJECT (uih))); -#endif - - if (control == NULL){ - printf ("Could not launch mail control\n"); - exit (1); - } - gtk_container_add (GTK_CONTAINER (window), control); - - gtk_widget_show (window); - gtk_widget_show (control); - - - return FALSE; -} - -int -main (int argc, char *argv []) -{ - init_corba (&argc, argv); - - if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) - g_error ("Could not initialize Bonobo\n"); - - gtk_idle_add ((GtkFunction) create_container, NULL); - - /* - * Main loop - */ - bonobo_main (); - - return 0; -} - - - - - -- cgit v1.2.3