diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 616 | ||||
-rw-r--r-- | mail/component-factory.c | 171 | ||||
-rw-r--r-- | mail/mail-accounts.c | 141 | ||||
-rw-r--r-- | mail/mail-callbacks.c | 850 | ||||
-rw-r--r-- | mail/mail-composer-prefs.c | 336 | ||||
-rw-r--r-- | mail/mail-display.c | 606 | ||||
-rw-r--r-- | mail/mail-preferences.c | 289 |
7 files changed, 1304 insertions, 1705 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index ddd57b115f..83a93c7f3c 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,4 +1,4 @@ -2002-12-03 Jeffrey Stedfast <fejj@ximian.com> +2002-12-02 Jeffrey Stedfast <fejj@ximian.com> * mail-callbacks.c (guess_me_from_accounts): Use the same logic as mail_generate_reply(). Fixes bug #34882 @@ -12,236 +12,28 @@ retval from message_rfc822_dnd() rather than relying on an exception, because one will not always necessarily be set. For MESSAGE_RFC822, also use the retval from message_rfc822_dnd(). - -2002-12-03 Not Zed <NotZed@Ximian.com> - - * folder-browser.c (folder_browser_finalise/destroy): frobbed - around with these till it exits without crashing. - - * message-list.c (message_list_destroy): made a destroy - handler again (was dispose). Frobbed around with this and - finalise till it can destroy without crashing. - - * message-browser.c (message_browser_new): ref/sink the - folderbrowser. + Based on preliminary work by Yuedong Du. 2002-11-25 Radek Doulik <rodo@ximian.com> * mail-preferences.c (mail_preferences_construct): magic_check --> magic_links_check -2002-11-27 Not Zed <NotZed@Ximian.com> - - * message-tag-followup.c (construct): gnome_pixmap -> gtkimage. - (construct): gtk_clist -> gtk_tree_view, setup columns. They dont - size well :-/ - (message_tag_followup_append_message): Append using model, remove - clist stuff. - (construct): Show date edit (glade bugs?) - - * folder-browser.c (folder_browser_class_init): gtk_marshal -> g_cclosure_marshal - (setup_popup_icons): gnome_pixmap -> gtk_image. - (on_right_click): gtk_pixmap -> gtk_image. - - * mail-accounts.c (account_delete_clicked): removed #if 0'd out code. - - * mail-send-recv.c (receive_done): remove FIXME and extra unref. - - * mail-session.c (request_password): Removed #if 0'd out stuff. - - * mail-vfolder.c (new_rule_clicked): proper cast for g_object_get_data. - - * mail-local.c (reconfigure_response): cast for g_object_get_data. - - * mail-account-editor.c (construct): GNOME_DIALOG -> GTK_DIALOG. - - * *.[ch]: re-ran fix.sh for e_notice change - - * mail-callbacks.c (save_msg_ok): g_object_get_data + - gtk_object_remove_no_notify -> g_object_steal_data. - (find_socket): gtk_container_children -> - gtk_container_get_children - (edit_msg): gnome_*_dialog -> gtk_message_dialog. - (resent_msg): " - (search_msg): " - (confirm_goto_next_folder): gtkmessagedialogised (even if not - used). - (confirm_expunge): gtkmessagedialogised - (filter_edit): " - (do_mail_print): e_notice -> gtk_message_dialog. - (are_you_sure): removed e_gnome_ok_cancel_dialog crap, replaced - with a gtk dialog. - (are_you_sure): gtkmessagedialogised. - (edit_msg_internal): Dont free uids array, are_you_sure() free's - it. - (resend_msg): Same. - (check_send_configuration): Use e_notice for stuff. Sigh, here we - go again ...! - (e_question): A utility function to ask a question, potentially - with 'dont ask again' as well. - (configure_mail): use e_question to save code. Here we go again, - again ... - (ask_confirm_for_unwanted_html_mail): " - (ask_confirm_for_only_bcc): " - (ask_confirm_for_only_bcc): " - (composer_get_message): Use e_notice. - (composer_save_draft_cb): Use e_question - (edit_msg): use e_notice, & change to an ERROR. - (resend_msg): same. - (save_msg_ok): Properly initialise ret to OK, and use e_question, - and use access() to determine existance/write access rather than - stat, display an error if we can't write to a file that exists, - and print the filename in all dialogues. - (confirm_goto_next_folder): Use e_question. - (confirm_expunge): use e_question. - (filter_edit): Use e_notice. - (do_mail_print): use e_notice. - -2002-11-26 Not Zed <NotZed@Ximian.com> - - * mail-vfolder.c (vfolder_gui_add_rule): clicked->response signal - for gtk dialogue. - (new_rule_clicked): Dont unref after destroy (duh, idiot again). - (edit_rule_response): Same here. - (mail_vfolder_delete_uri): Connect response signal to - gtk_widget_destroy directrly using g_signal_connect_swapped. - (close_dialogue): Removed, as no longer needed. - - * message-list.c (get_normalised_string): Duh idiot, "un-fixed" - the memleak i added. - - * mail-callbacks.c (composer_get_message): Set parent window in - message dialogue & DESTROY_WITH_PARENT flag. - (composer_save_draft_cb): - (configure_mail): - (check_send_configuration): Add DESTROY_WITH_PARENT flag to - gtk_message_dialog's - (local_configure_done): remove some unecessary/wrong casts. - (empty_trash_expunged_cb): " - (do_mail_print): use gtk_window_set_transient_for instead of - e_dialog_set_parent. - -2002-11-26 Not Zed <NotZed@Ximian.com> - - * mail-account-editor.c (mail_account_editor_new): - gtk_widget_set_parent_window -> gtk_window_set_transient_for. - - * mail-callbacks.c (composer_send_queued_cb): dont unref composer. - - * message-browser.c (message_browser_destroy): moved back from - finalise. - -2002-11-25 Not Zed <NotZed@Ximian.com> - - * message-list.c (message_list_dispose): move saving tree state - here. - (message_list_finalise): And take it from here. - - * mail-display.c (mail_display_destroy): @#$@# gtk. changed this - around a bit. - (mail_display_init): Fix prototype, its a gobject. - (mail_display_init): ref/sink the invisible gtkobject. - -2002-11-22 Not Zed <NotZed@Ximian.com> - - * mail-callbacks.c (ask_confirm_for_unwanted_html_mail): removed - e_messagebox, and use gtk_message_dialog directly. - (ask_confirm_for_empty_subject): and here. - (ask_confirm_for_only_bcc): And here too. - (msgbox_destroy_cb): Removed, since no longer needed. - 2002-11-15 Harry Lu <harry.lu@sun.com> * mail-display.c (write_data_to_file): Show file name when prompt - to user for overwrite. Fixes bug #34180. + to user for overwrite. -2002-11-21 Harry Lu <harry.lu@sun.com> +2002-11-20 Harry Lu <harry.lu@sun.com> - * mail-display.c (do_attachment_header): Enable dragging of all + * mail-display.c (do_attachment_header): Enable dragging of all attachments. For bug #34327. -2002-11-21 Jeffrey Stedfast <fejj@ximian.com> - - * mail-preferences.c (mail_preferences_construct): Since the - GSList returned from gconf needs to be free'd by us, we don't need - to strdup the values. Also make sure we don't leak the GSList - itself. - (mail_preferences_apply): Don't leak our GSList data. - -2002-08-30 Radek Doulik <rodo@ximian.com> - - * mail-display.c (mail_display_render): don't set margins for raw - message view - - * mail-format.c (mail_format_raw_message): as below - (handle_text_plain_flowed): as below - (mail_format_raw_message): don't use data_urls - - * mail-display.c (mail_text_write): put text in iframe, so it has - margins and should not be placed in table which changes wrapping - behavior - -2002-11-20 Jeffrey Stedfast <fejj@ximian.com> - - * mail-composer-prefs.c (mail_composer_prefs_construct): gconfify. - (mail_composer_prefs_apply): gconfify this also. - - * mail-preferences.c (mail_preferences_construct): - gconf_client_get_string() probably returns an allocated buffer. - -2002-11-20 Not Zed <NotZed@Ximian.com> - - * importers/Makefile.am (%.server.in): provide a proper implicit - rule for building .server.in from .server.in.in. The other one - just copied the first target to all destinations(!). - - * importers/evolution-outlook-importer.c (outlook_factory_fn): - destroy -> weak ref. - -2002-11-19 Jeffrey Stedfast <fejj@ximian.com> - - * mail-preferences.c (mail_preferences_apply): Save the settings - via gconf. - (mail_preferences_construct): Load the values from gconf. - 2002-11-19 Radek Doulik <rodo@ximian.com> * mail-composer-prefs.c (sig_load_preview): use gtk_html_begin_content to specify utf-8 -2002-11-19 Not Zed <NotZed@Ximian.com> - - * importers/evolution-mbox-importer.c (mail_importer_module_init): - fix warning message, outlook->mbox. - - * importers/Makefile.am: fix serverdir to point to - $libdir/bonobo/servers. - - * mail-callbacks.c (addrbook_sender): add type to - bonobo_widget_set_property. - - * mail-vfolder.c (vfolder_editor_response): dont unref after destroy. - - * mail-session.c (pass_response): dont unref aftrer destroy. - - * mail-local.c (reconfigure_response): dont unref after destroy. - - * mail-display.c (launch_cb): dont unref after destroy. - (launch_cb): " - (drag_data_get_cb): " - (html_button_press_event): add type to bonobo_widget::set_property - - * mail-config.c (mail_config_check_service): dont unref after - destroy. - - * component-factory.c (send_receive_cb): dont unref after destroy. - (request_quit): " - - * mail-signature-editor.c (mail_signature_editor): Use version 3.0 - of gtkhtml editor interfaces. - (do_exit): dont unref after destroy. - (format_html_cb): Add type to bonobo_widget::set_property. - 2002-11-18 Radek Doulik <rodo@ximian.com> * mail-composer-prefs.c (spell_setup_check_options): check @@ -249,407 +41,13 @@ 2002-11-18 Jeffrey Stedfast <fejj@ximian.com> - * mail-accounts.c (mail_accounts_load): Specify the default - account. Also, don't need to use e_utf8_to_gtk_string() here. - -2002-11-18 Not Zed <NotZed@Ximian.com> - - * Makefile.am (evolution_mail_LDADD): Added back - libevolution-importer stuff. - (SUBDIRS): Added back importers. - - * importers/evolution-mbox-importer.c (load_file_fn): build the - uri without deprecated funcs. - (load_file_fn): dont free/alloc a camel_exception for no obvious - purpose. - (mbox_factory_fn): use weak_ref rather than destroy. - (importer_destroy_cb): fix signature for weak ref notify. - (mbox_factory_fn): add cid param. - - * importers/*.[ch]: ran fix script over everything. - - * importers/*.server.in.in: Added bonobo activation files. Moved - evolution-mail to @LIBEXEC@ as below. - - * importers/Makefile.am: oaf->bonobo activation stuff. - - * importers/evolution-outlook-importer.c (outlook_factory_fn): Add - component id to callback. - -2002-11-15 Ettore Perazzoli <ettore@ximian.com> - - * Makefile.am: Add rules to substitute @LIBEXEC@ in - GNOME_Evolution_Mail.server.in.in and install evolution-mail in - $(libexecdir) instead of $(bindir). + * mail-accounts.c (mail_accounts_load): Specify which account is + the default account. - * GNOME_Evolution_Mail.server.in.in: Replaced evolution-mail with - @LIBEXECDIR@/evolution-mail. - -2002-11-15 Rodney Dawes <dobey@ximian.com> - - * component-factory.c: Use bonobo_main_quit instead of gtk - 2002-11-15 Jeffrey Stedfast <fejj@ximian.com> * mail-composer-prefs.c (sig_edit): Correctly spell Advanced. -2002-11-15 Not Zed <NotZed@Ximian.com> - - * mail-summary.c (create_summary_view): weak notify -> ref. - - * mail-send-recv.c (build_dialogue): weak notify -> ref. - - * mail-accounts.c (account_edit_clicked): weak notify -> ref, i - presume this is what jeff meant, 'cause it dont compile otherwise. - -2002-11-14 Jeffrey Stedfast <fejj@ximian.com> - - * mail-accounts.c (account_edit_clicked): Use g_object_weak_ref - rather than connecting to destroy. - (account_add_clicked): Same. - - * mail-callbacks.c (addrbook_sender): Make this use - g_object_weak_notify also. - (subscribe_dialog_destroy): Add NULL guards here since I think we - really do want to connect to the "destroy" signal in the function - that connects us to that signal. - - * mail-config-factory.c (config_control_factory_cb): Same. - - * mail-display.c (save_part): Here too. - (make_popup_window): And here. - - * mail-send-recv.c (build_dialogue): Same here. - - * mail-summary.c (create_summary_view): Use g_object_weak_notify - instead of connecting to the destroy signal. - -2002-11-14 Ettore Perazzoli <ettore@ximian.com> - - * component-factory.c (owner_set_cb): Want a (GWeakNotify) cast - here, not (GWeakNotify *). - - * subscribe-dialog.c (fete_init): g_object_set() instead of - gtk_object_set(). - (populate_store_list): Likewise. - (menu_item_selected): g_object_get_data() instead of - gtk_object_get_data(). - - * message-list.c (message_list_create_extras): g_object_set() - instead of gtk_object_set(). - - * message-browser.c (message_browser_message_list_built): - g_object_get_data() instead of gtk_object_get_data(). - - * mail-vfolder.c (edit_rule_response): g_object_get_data() instead - of gtk_object_get_data(). - - * mail-summary.c (generate_folder_summaries): g_object_unref() the - context instead of gtk_object_destroy(). - - * mail-local.c (reconfigure_response): g_object_get_data() instead - of gtk_object_get_data(). - - * mail-display.c (pixbuf_gen_idle): g_object_unref() the GdkPixbuf - loader instead of gtk_object_destroy(). - (pixbuf_gen_idle): Likewise. - (embeddable_destroy_cb): Likewise. - - * mail-config-druid.c (mail_config_druid_destroy): No need to - gtk_object_destroy() the GladeXML object. - (construct): g_object_set() instead of gtk_object_set(). - - * folder-browser.c (folder_browser_gui_init): g_object_get_data() - instead of gtk_object_get_data(). - -2002-11-14 Not Zed <NotZed@Ximian.com> - - * component-factory.c (create_view): shell client objref. - (mail_add_storage): " - (mail_remove_storage): " - -2002-11-13 Joe Shaw <joe@ximian.com> - - * Makefile.am: Remove a couple backslashes that were causing - automake to complain, even though they were on lines that were - -commented out-. Sigh. - -2002-11-13 Ettore Perazzoli <ettore@ximian.com> - - * folder-info.c (evolution_folder_info_factory_fn): Use - g_object_new() instead of gtk_type_new(). - * folder-browser.c (folder_browser_new): Likewise. - * mail-account-gui.c - (mail_account_gui_folder_selector_button_new): Likewise. - * mail-font-prefs.c (mail_font_prefs_new): Likewise. - -2002-11-13 Ettore Perazzoli <ettore@ximian.com> - - * mail-format.c: Do not #include <libgnome/gnome-defs.h>. - * mail-importer.c: Likewise. - * mail-mt.c: Likewise. - * mail-ops.c: Likewise. - * mail-search-dialogue.c: Likewise. - * mail-session.c: Likewise. - * mail-vfolder.c: Likewise. - * message-tag-followup.c: Likewise. - * main.c: Likewise, and <libgnomeui/gnome-init.h>. - - * mail-callbacks.c: Do not #include <libgnome/gnome-paper.h>. - (do_mail_print): Remove the GnomePaper local variable. - -2002-11-13 Not Zed <NotZed@Ximian.com> - - * component-factory.c (owner_set_cb): destroy->weak ref. - (owner_set_cb): shell client changes. - - * mail-signature-editor.c (mail_signature_editor): bonobo api changes. - - * mail-local.c (save_metainfo): go back to using xmlSaveFile. - - * Makefile.am: Removed libevolution-importer from mail. - -2002-11-13 Not Zed <NotZed@Ximian.com> - - * GNOME_Evolution_Mail.server.in.in: Added to cvs. Currently - contains no configurable stuff, but maybe it will one day. - - * Makefile.am (server_DATA): change oaf stuff to server stuff for - bonobo activation. - - * mail-preferences.c (mail_preferences_apply): handle const entry text. - - * mail-composer-prefs.c (url_requested): Fixed typo. - (mail_composer_prefs_construct): gnomepixmap->gtkimage. - - * mail-callbacks.c (configure_mail): destroy dialogue before dealing - with response. - (mail_generate_reply): Fix a typo. - (popup_listener_cb): fix prototype. - (tag_editor_response): Handle gtk dialog response. - (flag_for_followup): Change gnome dialog to gtk dialog stuff. - (tag_editor_destroy_cb): - (tag_editor_cancel): - (tag_editor_ok): Removed, handled in _response(). - (filter_editor_response): renamed from _clicked, handle gtk - dialogue signal. - (filter_editor_destroy): Removed. - (footer_info_new): gnome font api changes. - (do_mail_print): port to gnome print 2. - - * mail-autofilter.c (mail_filter_delete_uri): message_dialog uses - a specific button enum, not the stock ones. - - * mail-accounts.c (mail_accounts_tab_get_type): gobjectify. - (account_delete_clicked): gdkdialogise. - - * mail-account-gui.c (mail_account_gui_setup): Hack around font - metric determination code. - - * mail-account-editor.c (mail_account_editor_get_type): - gobjectise. - (mail_account_editor_new): "" - - * folder-info.c (evolution_folder_info_notify_ready): use pbclient - interface. - - * folder-browser-factory.c (control_destroy_cb): fix a typo. - (folder_browser_factory_new_control): More typos. - - * folder-browser.c (on_right_click): cast around const warning. - (context_menu_position_func): fix for api change. - - * e-searching-tokenizer.c (e_searching_tokenizer_finalise): - Changed from destroy since it only frees memory. - (e_searching_tokenizer_get_type): glibify. - - * component-factory.c (request_quit): gtkdialogise. - (send_receive_cb): " - (create_component): gdk_pixbuf api. - (component_factory_init): bonobo activation stuff. - (warning_response): renamed from warning_clicked. - (owner_set_cb): gtkdialogise. - -2002-11-12 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: Added files I've ported. - - * mail-config.c: Remove gnome-defs.h, this header no longer exists - in GNOME2. - -2002-11-13 Not Zed <NotZed@Ximian.com> - - * Makefile.am: Commented out stuff that doesn't build yet. Also - fixed idl build rule. importers still not built. - - * main.c (main): bonobactivationise. remove push visual/colormap. - (main): no longer activate activation, let bonobo_init do it. - - * mail-signature-editor.c (menu_help): Change help api. - - * mail-session.c (user_message_destroy_noreply): removed. Not - used? - - * mail-local.c (load_metainfo): xml root->children. - - * mail-format.c (g_string_append_len): Removed, it exists now. - -2002-11-12 Not Zed <NotZed@Ximian.com> - - * subscribe-dialog.c: gnome2ised, use gtkdialog. - (subscribe_get_global_extras): use a weak ref rather than destroy - signal. - - * message-tag-followup.c: gnome2ised. - - * message-tag-editor.c: gnome2ised & converted to gtkdialog. - - * message-list.c: gnome2ised. - (message_list_finalise): From destroy method. maybe should be - destroy still. - - * message-browser.c: port to gnome2 - (message_browser_finalise): renamed from destroy method. - - * mail-stream-gtkhtml.c: removed redundant - camel_class_get_global_classfuncs() call. - - * mail-signature-editor.c: gtkdialogised, & bonobo api changes. - - - * mail-search-dialogue.c: gtkdialogised. - - * mail-folder-cache.c: cleaned up camel ref/hook casts. - - * mail-composer-prefs.c (mail_composer_prefs_get_type): convert to - gtype. - - * mail-font-prefs.c (mail_font_prefs_destroy): from finalise. - - * mail-config.c: s/bonobo_config/e_config_listener/ Added - /apps/Evolution prefix to the evolution keys. Changed to use - e_config_listener, etc. - (mail_config_init): remove bonobo_config stuff. - (mail_config_check_service): gtk dialogise. - (check_response): from check_cancelled. - - * mail-config-druid.c (mail_config_druid_destroy): renamed from - _finalize, turned into destroy handler. - (construct): set type to toplevel, GTK_WINDOW_DIALOG no longer - exists. - - * mail-config-factory.c (mail_config_register_factory): bonobo api - changes. - - * mail-crypto.c (mail_crypto_get_pgp_cipher_context): cleaned up - unref casts. - - * mail-display.c (write_data_to_file): gnome->gtkdialog. - (on_link_clicked): use ascii_str*cmp on url. - (save_part): g_path stuff. - (launch_cb): gtk dialog. - (pixmap_press): de-oafify. - (pixbuf_for_mime_type): gnome-vfs api changes. - (do_attachment_header): Change the pixmap to a gtkimage. - (do_signature): " - (pixbuf_gen_idle): " - (do_attachment_header): ascii_str*cmp - (do_attachment_header): gnome pixmap->gtkimage. - (mail_display_destroy): protect against gtk mentalness. - (html_button_press_event): ascii_str*cmp - (drag_data_get_cb): added comment for translators of filename. - - * mail-format.c (component_supports): de-oafise. - (is_anonymous): ascii_strncmp - (attachment_header): remove utf8<>locale stuff, and gnomevfs api - changes. - (format_mime_part): fix g_strdown call. - (write_field_row_begin): kill utf8->gtk stuff. - (write_address): " - (default_header_index): ascii_strcasecmp - (handle_text_plain): " - (handle_text_enriched): " - (handle_multipart_encrypted): remove utf/gtk stuff. - (handle_message_external_body): ascii_str*cmp - - * mail-identify.c (mail_identify_mime_part): - (identify_by_magic): gnome vfs api changes. - - * mail-importer.c: Converted. - - * mail-local.c (load_metainfo): xml childs -> children. - (mls_get_folder): g_strerror. - (mls_delete_folder): g_strerror. - (reconfigure_got_folder): Gnome->GtkDialog - (reconfigure_response): from reconfigure_clicked. - - * mail-mt.c (mail_msg_check_error): gnome -> gtk dialog - (error_response): renmae from error_gone. destroy widget on any - response. - - * mail-offline-handler.c (impl_finalise): renamed from - impl_destroy since thats what it should be anyway. - - * mail-ops.c: removed utf8 widget conversion & camel_object_un/ref - casts. - - * mail-preferences.c (mail_preferences_get_type): glib2'ised. - - * mail-search.c (mail_search_finalise): renmaed from destroy & - properly chain. - (mail_search_get_type): glib2 & make gtkdialog parent. - (entry_run_search): run search when entry activated. not sure if - gtkdialog has anohter way to do this on an arbitrary widget. - - * mail-send-recv.c (dialogue_response): renamed from clicked. Use - gtkdialog. - - * mail-session.c (request_password_deleted): removed, redundant. - (pass_response): rename from pass_got, changed for gtkdialog. - (user_message_destroy): Removed, redundant. - (user_message_response): Renamed from user_message_clicked. - -2002-11-11 Not Zed <NotZed@Ximian.com> - - * mail-stream-gtkhtml.c (mail_stream_gtkhtml_class_init): dont use - get_global_classfuncs, just get the type - - * mail-tools.c: converted gnome2 api's. - - * mail-vfolder.c (vfolder_editor_response): clicked->response. - (vfolder_editor_destroy): Removed. - (vfolder_edit): gtk dialog api - (edit_rule_response): clicked->response. - (vfolder_edit_rule): gnomedialog->gtkdialog. - (vfolder_gui_add_rule): " - (new_rule_clicked): clicked->response - -2002-11-11 Jeffrey Stedfast <fejj@ximian.com> - - * mail-callbacks.c: Half way ported. I'll finish the rest later. - - * mail-autofilter.c: Ported. - - * mail-account-gui.c: Ported. - - * mail-account-editor.c: Ported. - - * folder-browser-ui.c: Ported. - - * folder-browser-factory.c: Ported. - - * folder-browser.c: Ported. - - * e-searching-tokenizer.c: Roughly ported. - -2002-11-10 Jeffrey Stedfast <fejj@ximian.com> - - * *.glade: Converted to libglade-2's format. - -2002-11-08 Jeffrey Stedfast <fejj@ximian.com> - - * mail-composer-prefs.c: Ported. - 2002-10-28 Jeffrey Stedfast <fejj@ximian.com> * folder-browser.c (folder_browser_query_changed): No longer need diff --git a/mail/component-factory.c b/mail/component-factory.c index 03aaa2c5b6..f1c94572a8 100644 --- a/mail/component-factory.c +++ b/mail/component-factory.c @@ -27,8 +27,6 @@ #include <bonobo/bonobo-generic-factory.h> #include <gal/widgets/e-gui-utils.h> -#include <string.h> - #include "camel.h" #include "Evolution.h" @@ -149,7 +147,7 @@ create_view (EvolutionShellComponent *shell_component, BonoboControl *control; shell_client = evolution_shell_component_get_owner (shell_component); - corba_shell = evolution_shell_client_corba_objref(shell_client); + corba_shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell_client)); if (type_is_mail (folder_type)) { const char *noselect; @@ -157,14 +155,14 @@ create_view (EvolutionShellComponent *shell_component, url = camel_url_new (physical_uri, NULL); noselect = url ? camel_url_get_param (url, "noselect") : NULL; - if (noselect && !strcasecmp (noselect, "yes")) + if (noselect && !g_strcasecmp (noselect, "yes")) control = create_noselect_control (); else control = folder_browser_factory_new_control (physical_uri, corba_shell); camel_url_free (url); } else if (type_is_vtrash (folder_type)) { - if (!strncasecmp (physical_uri, "file:", 5)) + if (!g_strncasecmp (physical_uri, "file:", 5)) control = folder_browser_factory_new_control ("vtrash:file:/", corba_shell); else control = folder_browser_factory_new_control (physical_uri, corba_shell); @@ -343,7 +341,7 @@ xfer_folder (EvolutionShellComponent *shell_component, if (remove && strcmp(src->protocol, dst->protocol) == 0) { char *sname, *dname; CamelStore *store; - + if (src->fragment) sname = src->fragment; else { @@ -352,7 +350,7 @@ xfer_folder (EvolutionShellComponent *shell_component, else sname = ""; } - + if (dst->fragment) dname = dst->fragment; else { @@ -361,11 +359,11 @@ xfer_folder (EvolutionShellComponent *shell_component, else dname = ""; } - + store = camel_session_get_store(session, source_physical_uri, &ex); if (store != NULL) camel_store_rename_folder(store, sname, dname, &ex); - + if (camel_exception_is_set(&ex)) GNOME_Evolution_ShellComponentListener_notifyResult (listener, GNOME_Evolution_ShellComponentListener_INVALID_URI, &ev); else { @@ -377,7 +375,7 @@ xfer_folder (EvolutionShellComponent *shell_component, camel_object_unref((CamelObject *)store); } else { source = mail_tool_uri_to_folder (source_physical_uri, 0, &ex); - + if (source) { xfer_folder_data *xfd; @@ -385,17 +383,17 @@ xfer_folder (EvolutionShellComponent *shell_component, xfd->remove_source = remove_source; xfd->source_uri = g_strdup (source_physical_uri); xfd->listener = CORBA_Object_duplicate (listener, &ev); - + uids = camel_folder_get_uids (source); mail_transfer_messages (source, uids, remove_source, destination_physical_uri, CAMEL_STORE_FOLDER_CREATE, xfer_folder_done, xfd); camel_object_unref (CAMEL_OBJECT (source)); } else GNOME_Evolution_ShellComponentListener_notifyResult (listener, GNOME_Evolution_ShellComponentListener_INVALID_URI, &ev); } - + CORBA_exception_free (&ev); camel_exception_clear (&ex); - + camel_url_free(src); camel_url_free(dst); } @@ -404,12 +402,13 @@ static void configure_folder_popup(BonoboUIComponent *component, void *user_data, const char *cname) { char *uri = user_data; - + + if (strncmp(uri, "vfolder:", 8) == 0) vfolder_edit_rule(uri); else { FolderBrowser *fb = folder_browser_factory_get_browser(uri); - + if (fb) configure_folder(component, fb, cname); else @@ -433,16 +432,14 @@ populate_folder_context_menu (EvolutionShellComponent *shell_component, if (!type_is_mail (type)) return; - + /* FIXME: handle other types */ - + /* the unmatched test is a bit of a hack but it works */ if ((strncmp(physical_uri, "vfolder:", 8) == 0 && strstr(physical_uri, "#" CAMEL_UNMATCHED_NAME) == NULL) || strncmp(physical_uri, "file:", 5) == 0) { - bonobo_ui_component_add_verb_full(uic, "ChangeFolderPropertiesPopUp", - g_cclosure_new(G_CALLBACK(configure_folder_popup), - g_strdup(physical_uri), (GClosureNotify)g_free)); + bonobo_ui_component_add_verb_full(uic, "ChangeFolderPropertiesPopUp", configure_folder_popup, g_strdup(physical_uri), g_free); bonobo_ui_component_set_translate (uic, EVOLUTION_SHELL_COMPONENT_POPUP_PLACEHOLDER, popup_xml, NULL); } } @@ -456,9 +453,9 @@ unpopulate_folder_context_menu (EvolutionShellComponent *shell_component, { if (!type_is_mail (type)) return; - + /* FIXME: handle other types */ - + /* the unmatched test is a bit of a hack but it works */ if ((strncmp(physical_uri, "vfolder:", 8) == 0 && strstr(physical_uri, "#" CAMEL_UNMATCHED_NAME) == NULL) @@ -496,7 +493,7 @@ destination_folder_handle_motion (EvolutionShellComponentDndDestinationFolder *f url = camel_url_new (physical_uri, NULL); noselect = url ? camel_url_get_param (url, "noselect") : NULL; - if (noselect && !strcasecmp (noselect, "yes")) + if (noselect && !g_strcasecmp (noselect, "yes")) /* uh, no way to say "illegal" */ *suggested_action_return = GNOME_Evolution_ShellComponentDnd_ACTION_DEFAULT; else @@ -526,7 +523,7 @@ message_rfc822_dnd (CamelFolder *dest, CamelStream *stream, CamelException *ex) msg = camel_mime_message_new (); if (camel_mime_part_construct_from_parser (CAMEL_MIME_PART (msg), mp) == -1) { - camel_object_unref (msg); + camel_object_unref (CAMEL_OBJECT (msg)); handled = FALSE; break; } @@ -534,7 +531,7 @@ message_rfc822_dnd (CamelFolder *dest, CamelStream *stream, CamelException *ex) /* append the message to the folder... */ info = g_new0 (CamelMessageInfo, 1); camel_folder_append_message (dest, msg, info, NULL, ex); - camel_object_unref (msg); + camel_object_unref (CAMEL_OBJECT (msg)); if (camel_exception_is_set (ex)) { handled = FALSE; @@ -545,7 +542,7 @@ message_rfc822_dnd (CamelFolder *dest, CamelStream *stream, CamelException *ex) camel_mime_parser_step (mp, 0, 0); } - camel_object_unref (mp); + camel_object_unref (CAMEL_OBJECT (mp)); return handled; } @@ -578,7 +575,7 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des uri = camel_url_new (physical_uri, NULL); noselect = uri ? camel_url_get_param (uri, "noselect") : NULL; - if (noselect && !strcasecmp (noselect, "yes")) { + if (noselect && !g_strcasecmp (noselect, "yes")) { camel_url_free (uri); return FALSE; } @@ -630,8 +627,8 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des stream = camel_stream_fs_new_with_fd (fd); retval = message_rfc822_dnd (folder, stream, &ex); - camel_object_unref (stream); - camel_object_unref (folder); + camel_object_unref (CAMEL_OBJECT (stream)); + camel_object_unref (CAMEL_OBJECT (folder)); if (action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE && retval) unlink (url); @@ -654,8 +651,8 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des camel_stream_reset (stream); retval = message_rfc822_dnd (folder, stream, &ex); - camel_object_unref (stream); - camel_object_unref (folder); + camel_object_unref (CAMEL_OBJECT (stream)); + camel_object_unref (CAMEL_OBJECT (folder)); break; case ACCEPTED_DND_TYPE_X_EVOLUTION_MESSAGE: folder = mail_tools_x_evolution_message_parse (data->bytes._buffer, @@ -669,7 +666,7 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE, physical_uri, 0, NULL, NULL); - camel_object_unref (folder); + camel_object_unref (CAMEL_OBJECT (folder)); break; default: break; @@ -741,7 +738,7 @@ shell_client_destroy (GtkObject *object) } static void -warning_response (GtkWidget *dialog, int button, gpointer user_data) +warning_clicked (GtkWidget *dialog, gpointer user_data) { gtk_widget_destroy (dialog); } @@ -758,7 +755,8 @@ owner_set_cb (EvolutionShellComponent *shell_component, /* FIXME: should we ref this? */ global_shell_client = shell_client; - g_object_weak_ref(G_OBJECT(shell_client), (GWeakNotify)shell_client_destroy, NULL); + gtk_signal_connect (GTK_OBJECT (shell_client), "destroy", + shell_client_destroy, NULL); evolution_dir = g_strdup (evolution_homedir); mail_session_init (); @@ -767,7 +765,7 @@ owner_set_cb (EvolutionShellComponent *shell_component, storages_hash = g_hash_table_new (NULL, NULL); - corba_shell = evolution_shell_client_corba_objref(shell_client); + corba_shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell_client)); for (i = 0; i < sizeof (standard_folders) / sizeof (standard_folders[0]); i++) *standard_folders[i].uri = g_strdup_printf ("file://%s/local/%s", evolution_dir, standard_folders[i].name); @@ -793,8 +791,8 @@ owner_set_cb (EvolutionShellComponent *shell_component, char *system = g_strdup (EVOLUTION_DATADIR "/evolution/vfoldertypes.xml"); search_context = rule_context_new (); - g_object_set_data_full(G_OBJECT(search_context), "user", user, g_free); - g_object_set_data_full(G_OBJECT(search_context), "system", system, g_free); + gtk_object_set_data_full (GTK_OBJECT (search_context), "user", user, g_free); + gtk_object_set_data_full (GTK_OBJECT (search_context), "system", system, g_free); rule_context_add_part_set (search_context, "partset", filter_part_get_type (), rule_context_add_part, rule_context_next_part); @@ -809,11 +807,11 @@ owner_set_cb (EvolutionShellComponent *shell_component, if (mail_config_is_corrupt ()) { GtkWidget *dialog; - - dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("Some of your mail settings seem corrupt, " + + dialog = gnome_warning_dialog (_("Some of your mail settings seem corrupt, " "please check that everything is in order.")); - g_signal_connect(dialog, "response", G_CALLBACK(warning_response), NULL); + gtk_signal_connect (GTK_OBJECT (dialog), "clicked", warning_clicked, NULL); + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_widget_show (dialog); } @@ -913,7 +911,7 @@ idle_quit (gpointer user_data) if (e_list_length (folder_browser_factory_get_control_list ())) return TRUE; - bonobo_main_quit (); + gtk_main_quit (); return FALSE; } @@ -923,16 +921,16 @@ static void owner_unset_cb (EvolutionShellComponent *shell_component, gpointer u /* Table for signal handler setup/cleanup */ static struct { char *sig; - GCallback func; + GtkSignalFunc func; int hand; } shell_component_handlers[] = { - { "owner_set", G_CALLBACK(owner_set_cb), }, - { "owner_unset", G_CALLBACK(owner_unset_cb), }, - { "debug", G_CALLBACK(debug_cb), }, - { "interactive", G_CALLBACK(interactive_cb) }, - { "destroy", G_CALLBACK(owner_unset_cb), }, - { "handle_external_uri", G_CALLBACK(handle_external_uri_cb), }, - { "user_create_new_item", G_CALLBACK(user_create_new_item_cb) } + { "owner_set", owner_set_cb, }, + { "owner_unset", owner_unset_cb, }, + { "debug", debug_cb, }, + { "interactive", interactive_cb }, + { "destroy", owner_unset_cb, }, + { "handle_external_uri", handle_external_uri_cb, }, + { "user_create_new_item", user_create_new_item_cb } }; static void @@ -941,7 +939,7 @@ owner_unset_cb (EvolutionShellComponent *shell_component, gpointer user_data) int i; for (i=0;i<sizeof(shell_component_handlers)/sizeof(shell_component_handlers[0]);i++) - g_signal_handler_disconnect((GtkObject *)shell_component, shell_component_handlers[i].hand); + gtk_signal_disconnect((GtkObject *)shell_component, shell_component_handlers[i].hand); if (mail_config_get_empty_trash_on_exit ()) empty_trash (NULL, NULL, NULL); @@ -952,7 +950,7 @@ owner_unset_cb (EvolutionShellComponent *shell_component, gpointer user_data) global_shell_client = NULL; mail_session_set_interactive (FALSE); - g_object_unref((search_context)); + gtk_object_unref (GTK_OBJECT (search_context)); search_context = NULL; g_timeout_add(100, idle_quit, NULL); @@ -975,10 +973,9 @@ send_receive_cb (EvolutionShellComponent *shell_component, if (!account || !account->transport) { GtkWidget *dialog; - dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, - _("You have not set a mail transport method")); - gtk_dialog_run((GtkDialog *)dialog); - gtk_widget_destroy(dialog); + dialog = gnome_error_dialog (_("You have not set a mail transport method")); + gnome_dialog_set_close (GNOME_DIALOG (dialog), TRUE); + gtk_widget_show (dialog); return; } @@ -991,21 +988,25 @@ request_quit (EvolutionShellComponent *shell_component, void *closure) { GtkWidget *dialog; - int resp; - + if (!e_msg_composer_request_close_all ()) return FALSE; if (!outbox_folder || !camel_folder_get_message_count (outbox_folder)) return TRUE; - - dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, - _("You have unsent messages, do you wish to quit anyway?")); - gtk_dialog_set_default_response((GtkDialog *)dialog, GTK_RESPONSE_NO); - resp = gtk_dialog_run((GtkDialog *)dialog); - gtk_widget_destroy(dialog); - - return resp == GTK_RESPONSE_YES; + + dialog = gnome_message_box_new (_("You have unsent messages, do you wish to quit anyway?"), + GNOME_MESSAGE_BOX_QUESTION, + GNOME_STOCK_BUTTON_YES, /* Quit */ + GNOME_STOCK_BUTTON_NO, /* Don't quit */ + NULL); + + gtk_window_set_title (GTK_WINDOW (dialog), _("Warning: Unsent Messages")); + gnome_dialog_set_default (GNOME_DIALOG (dialog), 1); + if (gnome_dialog_run_and_close (GNOME_DIALOG (dialog)) == 0) + return TRUE; + + return FALSE; } static BonoboObject * @@ -1028,8 +1029,8 @@ create_component (void) request_quit, NULL); - g_signal_connect((shell_component), "send_receive", - G_CALLBACK (send_receive_cb), NULL); + gtk_signal_connect (GTK_OBJECT (shell_component), "send_receive", + GTK_SIGNAL_FUNC (send_receive_cb), NULL); destination_interface = evolution_shell_component_dnd_destination_folder_new (destination_folder_handle_motion, destination_folder_handle_drop, @@ -1040,26 +1041,26 @@ create_component (void) evolution_mail_config_wizard_init (); - icon = gdk_pixbuf_new_from_file (EVOLUTION_ICONSDIR "/new-message.xpm", NULL); + icon = gdk_pixbuf_new_from_file (EVOLUTION_ICONSDIR "/new-message.xpm"); evolution_shell_component_add_user_creatable_item (shell_component, "message", _("New Mail Message"), _("_Mail Message"), _("Compose a new mail message"), "mail", 'm', icon); if (icon != NULL) - g_object_unref (icon); + gdk_pixbuf_unref (icon); - icon = gdk_pixbuf_new_from_file (EVOLUTION_ICONSDIR "/post-message-16.png", NULL); + icon = gdk_pixbuf_new_from_file (EVOLUTION_ICONSDIR "/post-message-16.png"); evolution_shell_component_add_user_creatable_item (shell_component, "post", _("New Message Post"), _("_Post Message"), _("Post a new mail message"), "mail/public", 'p', icon); if (icon != NULL) - g_object_unref (icon); + gdk_pixbuf_unref (icon); for (i=0;i<sizeof(shell_component_handlers)/sizeof(shell_component_handlers[0]);i++) { - shell_component_handlers[i].hand = g_signal_connect((shell_component), + shell_component_handlers[i].hand = gtk_signal_connect(GTK_OBJECT(shell_component), shell_component_handlers[i].sig, shell_component_handlers[i].func, NULL); } @@ -1077,24 +1078,24 @@ component_factory_init (void) int result; shell_component = create_component (); - result = bonobo_activation_active_server_register (COMPONENT_ID, bonobo_object_corba_objref (shell_component)); - if (result == Bonobo_ACTIVATION_REG_ERROR) { - e_notice (NULL, GTK_MESSAGE_ERROR, + result = oaf_active_server_register (COMPONENT_ID, bonobo_object_corba_objref (shell_component)); + if (result == OAF_REG_ERROR) { + e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, _("Cannot initialize the Evolution mail component.")); exit (1); - } else if (result == Bonobo_ACTIVATION_REG_ALREADY_ACTIVE) { + } else if (result == OAF_REG_ALREADY_ACTIVE) { g_warning ("evolution-mail is already running"); exit (1); } if (evolution_mail_config_factory_init () == FALSE) { - e_notice (NULL, GTK_MESSAGE_ERROR, + e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, _("Cannot initialize Evolution's mail config component.")); exit (1); } if (evolution_folder_info_factory_init () == FALSE) { - e_notice (NULL, GTK_MESSAGE_ERROR, + e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, _("Cannot initialize Evolution's folder info component.")); exit (1); } @@ -1357,10 +1358,10 @@ add_storage (const char *name, const char *uri, CamelService *store, EvolutionStorageResult res; storage = evolution_storage_new (name, FALSE); - g_signal_connect(storage, "open_folder", G_CALLBACK(storage_connect), store); - g_signal_connect(storage, "create_folder", G_CALLBACK(storage_create_folder), store); - g_signal_connect(storage, "remove_folder", G_CALLBACK(storage_remove_folder), store); - g_signal_connect(storage, "xfer_folder", G_CALLBACK(storage_xfer_folder), store); + gtk_signal_connect (GTK_OBJECT (storage), "open_folder", storage_connect, store); + gtk_signal_connect (GTK_OBJECT (storage), "create_folder", storage_create_folder, store); + gtk_signal_connect (GTK_OBJECT (storage), "remove_folder", storage_remove_folder, store); + gtk_signal_connect ((GtkObject *)storage, "xfer_folder", storage_xfer_folder, store); res = evolution_storage_register_on_shell (storage, corba_shell); @@ -1393,7 +1394,7 @@ mail_add_storage (CamelStore *store, const char *name, const char *uri) g_return_if_fail (CAMEL_IS_STORE (store)); shell_client = evolution_shell_component_get_owner (shell_component); - shell = evolution_shell_client_corba_objref (shell_client); + shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell_client)); camel_exception_init (&ex); @@ -1552,7 +1553,7 @@ mail_remove_storage (CamelStore *store) mail_note_store_remove(store); shell_client = evolution_shell_component_get_owner (shell_component); - corba_shell = evolution_shell_client_corba_objref(shell_client); + corba_shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell_client)); evolution_storage_deregister_on_shell (storage, corba_shell); diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c index 43b957ff05..1ad5c066fa 100644 --- a/mail/mail-accounts.c +++ b/mail/mail-accounts.c @@ -27,9 +27,12 @@ #include "mail-accounts.h" +#include <libgnomeui/gnome-stock.h> +#include <libgnomeui/gnome-messagebox.h> #include <gal/e-table/e-table-memory-store.h> #include <gal/e-table/e-table-scrolled.h> #include <gal/e-table/e-cell-toggle.h> +#include <gal/util/e-unicode-i18n.h> #include <gal/widgets/e-unicode.h> #include <camel/camel-url.h> @@ -47,7 +50,7 @@ static void mail_accounts_tab_class_init (MailAccountsTabClass *class); static void mail_accounts_tab_init (MailAccountsTab *prefs); -static void mail_accounts_tab_finalise (GObject *obj); +static void mail_accounts_tab_finalise (GtkObject *obj); static void mail_accounts_load (MailAccountsTab *tab); @@ -60,23 +63,23 @@ static GtkVBoxClass *parent_class = NULL; #define PREFS_WINDOW(prefs) GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (prefs), GTK_TYPE_WINDOW)) -GType +GtkType mail_accounts_tab_get_type (void) { - static GType type = 0; + static GtkType type = 0; if (!type) { - GTypeInfo type_info = { - sizeof (MailAccountsTabClass), - NULL, NULL, - (GClassInitFunc) mail_accounts_tab_class_init, - NULL, NULL, + GtkTypeInfo type_info = { + "MailAccountsTab", sizeof (MailAccountsTab), - 0, - (GInstanceInitFunc) mail_accounts_tab_init, + sizeof (MailAccountsTabClass), + (GtkClassInitFunc) mail_accounts_tab_class_init, + (GtkObjectInitFunc) mail_accounts_tab_init, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL }; - type = g_type_register_static (gtk_vbox_get_type (), "MailAccountsTab", &type_info, 0); + type = gtk_type_unique (gtk_vbox_get_type (), &type_info); } return type; @@ -85,10 +88,10 @@ mail_accounts_tab_get_type (void) static void mail_accounts_tab_class_init (MailAccountsTabClass *klass) { - GObjectClass *object_class; + GtkObjectClass *object_class; - object_class = (GObjectClass *) klass; - parent_class = g_type_class_ref(gtk_vbox_get_type ()); + object_class = (GtkObjectClass *) klass; + parent_class = gtk_type_class (gtk_vbox_get_type ()); object_class->finalize = mail_accounts_tab_finalise; /* override methods */ @@ -109,30 +112,29 @@ mail_accounts_tab_init (MailAccountsTab *prefs) } static void -mail_accounts_tab_finalise (GObject *obj) +mail_accounts_tab_finalise (GtkObject *obj) { MailAccountsTab *prefs = (MailAccountsTab *) obj; - g_object_unref((prefs->gui)); + gtk_object_unref (GTK_OBJECT (prefs->gui)); gdk_pixmap_unref (prefs->mark_pixmap); - g_object_unref (prefs->mark_bitmap); + gdk_bitmap_unref (prefs->mark_bitmap); - ((GObjectClass *)(parent_class))->finalize (obj); + ((GtkObjectClass *)(parent_class))->finalize (obj); } static void -account_add_finished (MailAccountsTab *prefs, GObject *deadbeef) +account_add_finished (GtkWidget *widget, gpointer user_data) { /* Either Cancel or Finished was clicked in the druid so reload the accounts */ + MailAccountsTab *prefs = user_data; + prefs->druid = NULL; -#warning "GTK_OBJECT_DESTROYED" -#if 0 if (!GTK_OBJECT_DESTROYED (prefs)) -#endif mail_accounts_load (prefs); - g_object_unref (prefs); + gtk_object_unref ((GtkObject *) prefs); } static void @@ -142,28 +144,27 @@ account_add_clicked (GtkButton *button, gpointer user_data) if (prefs->druid == NULL) { prefs->druid = (GtkWidget *) mail_config_druid_new (prefs->shell); - g_object_weak_ref ((GObject *) prefs->druid, - (GWeakNotify) account_add_finished, prefs); + gtk_signal_connect (GTK_OBJECT (prefs->druid), "destroy", + GTK_SIGNAL_FUNC (account_add_finished), prefs); gtk_widget_show (prefs->druid); - g_object_ref (prefs); + gtk_object_ref ((GtkObject *) prefs); } else { gdk_window_raise (prefs->druid->window); } } static void -account_edit_finished (MailAccountsTab *prefs, GObject *deadbeef) +account_edit_finished (GtkWidget *widget, gpointer user_data) { + MailAccountsTab *prefs = user_data; + prefs->editor = NULL; -#warning "GTK_OBJECT_DESTROYED" -#if 0 if (!GTK_OBJECT_DESTROYED (prefs)) -#endif mail_accounts_load (prefs); - g_object_unref (prefs); + gtk_object_unref ((GtkObject *) prefs); } static void @@ -190,9 +191,11 @@ account_edit_clicked (GtkButton *button, gpointer user_data) account = gtk_clist_get_row_data (prefs->table, row); #endif prefs->editor = (GtkWidget *) mail_account_editor_new (account, GTK_WINDOW (window), prefs); - g_object_weak_ref ((GObject *) prefs->editor, (GWeakNotify) account_edit_finished, prefs); + gtk_signal_connect (GTK_OBJECT (prefs->editor), "destroy", + GTK_SIGNAL_FUNC (account_edit_finished), + prefs); gtk_widget_show (prefs->editor); - g_object_ref (prefs); + gtk_object_ref ((GtkObject *) prefs); } } else { gdk_window_raise (prefs->editor->window); @@ -204,8 +207,7 @@ account_delete_clicked (GtkButton *button, gpointer user_data) { MailAccountsTab *prefs = user_data; const MailConfigAccount *account; - GtkDialog *confirm; - GtkButton *tmp; + GnomeDialog *confirm; const GSList *list; int row, ans; @@ -218,22 +220,19 @@ account_delete_clicked (GtkButton *button, gpointer user_data) /* make sure we have a valid account selected and that we aren't editing anything... */ if (row < 0 || prefs->editor != NULL) return; - - confirm = (GtkDialog *)gtk_message_dialog_new(PREFS_WINDOW (prefs), - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, - _("Are you sure you want to delete this account?")); - tmp = (GtkButton *)gtk_button_new_from_stock(GTK_STOCK_YES); - gtk_button_set_label(tmp, _("Delete")); - gtk_dialog_add_action_widget(confirm, (GtkWidget *)tmp, GTK_RESPONSE_YES); - tmp = (GtkButton *)gtk_button_new_from_stock(GTK_STOCK_NO); - gtk_button_set_label(tmp, _("Don't delete")); - gtk_dialog_add_action_widget(confirm, (GtkWidget *)tmp, GTK_RESPONSE_NO); - ans = gtk_dialog_run(confirm); - gtk_widget_destroy((GtkWidget *)confirm); - g_object_unref(confirm); - - if (ans == GTK_RESPONSE_YES) { + + confirm = GNOME_DIALOG (gnome_message_box_new (_("Are you sure you want to delete this account?"), + GNOME_MESSAGE_BOX_QUESTION, + NULL)); + gnome_dialog_append_button_with_pixmap (confirm, _("Delete"), GNOME_STOCK_BUTTON_YES); + gnome_dialog_append_button_with_pixmap (confirm, _("Don't delete"), GNOME_STOCK_BUTTON_NO); + gtk_window_set_policy (GTK_WINDOW (confirm), TRUE, TRUE, TRUE); + gtk_window_set_modal (GTK_WINDOW (confirm), TRUE); + gtk_window_set_title (GTK_WINDOW (confirm), _("Really delete account?")); + gnome_dialog_set_parent (confirm, PREFS_WINDOW (prefs)); + ans = gnome_dialog_run_and_close (confirm); + + if (ans == 0) { int select, len; #if USE_ETABLE @@ -457,18 +456,20 @@ mail_accounts_load (MailAccountsTab *prefs) #else { const MailConfigAccount *default_account; - char *text[3]; + char *str, *text[3]; default_account = mail_config_get_default_account (); + str = e_utf8_to_gtk_string (GTK_WIDGET (prefs->table), account->name); + text[0] = NULL; - text[1] = g_strdup_printf ("%s%s%s", account->name, - account == default_account ? " " : "", + text[1] = g_strdup_printf ("%s%s%s", str, account == default_account ? " " : "", account == default_account ? _("[Default]") : ""); text[2] = url && url->protocol ? url->protocol : (char *) _("None"); gtk_clist_insert (prefs->table, row, text); + g_free (str); g_free (text[1]); if (account->source->enabled) @@ -543,7 +544,7 @@ mail_accounts_etable_new (char *widget_name, char *string1, char *string2, int i gtk_container_add (GTK_CONTAINER (scrolled), table); - g_object_set_data(G_OBJECT(scrolled), "table", table); + gtk_object_set_data (GTK_OBJECT (scrolled), "table", table); gtk_widget_show (scrolled); gtk_widget_show (table); @@ -558,7 +559,7 @@ mail_accounts_tab_construct (MailAccountsTab *prefs) GtkWidget *toplevel, *widget; GladeXML *gui; - gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "accounts_tab", NULL); + gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "accounts_tab"); prefs->gui = gui; /* get our toplevel widget */ @@ -576,18 +577,19 @@ mail_accounts_tab_construct (MailAccountsTab *prefs) prefs->table = e_table_scrolled_get_table (E_TABLE_SCROLLED (widget)); prefs->model = prefs->table->model; - g_signal_connect((prefs->table), "cursor_change", + gtk_signal_connect (GTK_OBJECT (prefs->table), "cursor_change", account_cursor_change, prefs); - g_signal_connect((prefs->table), "double_click", + gtk_signal_connect (GTK_OBJECT (prefs->table), "double_click", account_double_click, prefs); mail_accounts_load (prefs); #else - prefs->table = GTK_CLIST (g_object_get_data(G_OBJECT(widget), "table")); + prefs->table = GTK_CLIST (gtk_object_get_data (GTK_OBJECT (widget), "table")); gtk_clist_set_column_justification (prefs->table, 0, GTK_JUSTIFY_RIGHT); - g_signal_connect(prefs->table, "select-row", G_CALLBACK(account_cursor_change), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->table), "select-row", + account_cursor_change, prefs); mail_accounts_load (prefs); @@ -601,19 +603,24 @@ mail_accounts_tab_construct (MailAccountsTab *prefs) #endif prefs->mail_add = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountAdd")); - g_signal_connect(prefs->mail_add, "clicked", G_CALLBACK(account_add_clicked), prefs); - + gtk_signal_connect (GTK_OBJECT (prefs->mail_add), "clicked", + account_add_clicked, prefs); + prefs->mail_edit = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountEdit")); - g_signal_connect(prefs->mail_edit, "clicked", G_CALLBACK(account_edit_clicked), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->mail_edit), "clicked", + account_edit_clicked, prefs); prefs->mail_delete = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountDelete")); - g_signal_connect(prefs->mail_delete, "clicked", G_CALLBACK(account_delete_clicked), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->mail_delete), "clicked", + account_delete_clicked, prefs); prefs->mail_default = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountDefault")); - g_signal_connect(prefs->mail_default, "clicked", G_CALLBACK(account_default_clicked), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->mail_default), "clicked", + account_default_clicked, prefs); prefs->mail_able = GTK_BUTTON (glade_xml_get_widget (gui, "cmdAccountAble")); - g_signal_connect(prefs->mail_able, "clicked", G_CALLBACK(account_able_clicked), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->mail_able), "clicked", + account_able_clicked, prefs); } @@ -622,7 +629,7 @@ mail_accounts_tab_new (GNOME_Evolution_Shell shell) { MailAccountsTab *new; - new = (MailAccountsTab *) g_object_new (mail_accounts_tab_get_type (), NULL); + new = (MailAccountsTab *) gtk_type_new (mail_accounts_tab_get_type ()); mail_accounts_tab_construct (new); new->shell = shell; diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index 4d655f6950..367b10d63d 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -29,22 +29,21 @@ #include <config.h> #endif -#include <time.h> #include <errno.h> -#include <gtkhtml/gtkhtml.h> - -#include <gtk/gtkmessagedialog.h> - +#include <time.h> +#include <libgnome/gnome-paper.h> +#include <libgnomeui/gnome-stock.h> +#include <libgnome/gnome-paper.h> #include <libgnomeprint/gnome-print-master.h> -#include <libgnomeprintui/gnome-print-dialog.h> -#include <libgnomeprintui/gnome-print-master-preview.h> - +#include <libgnomeprint/gnome-print-master-preview.h> #include <bonobo/bonobo-widget.h> #include <bonobo/bonobo-socket.h> #include <gal/e-table/e-table.h> #include <gal/widgets/e-gui-utils.h> +#include <gal/widgets/e-unicode.h> #include <e-util/e-dialog-utils.h> #include <filter/filter-editor.h> +#include <gtkhtml/gtkhtml.h> #include "mail.h" #include "message-browser.h" @@ -64,6 +63,7 @@ #include "subscribe-dialog.h" #include "message-tag-editor.h" #include "message-tag-followup.h" +#include "e-messagebox.h" #include "Evolution.h" #include "evolution-storage.h" @@ -75,40 +75,6 @@ #define FB_WINDOW(fb) GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (fb), GTK_TYPE_WINDOW)) -/* default is default gtk response - if again is != NULL, a checkbox "dont show this again" will appear, and the result stored in *again -*/ -static gboolean -e_question(GtkWindow *parent, int def, gboolean *again, const char *fmt, ...) -{ - GtkWidget *mbox, *check = NULL; - va_list ap; - int button; - char *str; - - va_start(ap, fmt); - str = g_strdup_vprintf(fmt, ap); - va_end(ap); - mbox = gtk_message_dialog_new(parent, GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, - "%s", str); - g_free(str); - gtk_dialog_set_default_response ((GtkDialog *)mbox, def); - if (again) { - check = gtk_check_button_new_with_label (_("Don't show this message again.")); - gtk_box_pack_start((GtkBox *)((GtkDialog *)mbox)->vbox, check, TRUE, TRUE, 10); - gtk_widget_show(check); - } - - button = gtk_dialog_run((GtkDialog *)mbox); - if (again) - *again = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)); - gtk_widget_destroy(mbox); - - return button == GTK_RESPONSE_YES; -} - - struct _composer_callback_data { unsigned int ref_count; @@ -166,14 +132,14 @@ ccd_unref (struct _composer_callback_data *ccd) static void -composer_destroy_cb (gpointer user_data, GObject *deadbeef) +composer_destroy_cb (GtkWidget *composer, gpointer user_data) { ccd_unref (user_data); } static void -druid_destroy_cb (gpointer user_data, GObject *deadbeef) +druid_destroyed (void) { gtk_main_quit (); } @@ -182,17 +148,37 @@ static gboolean configure_mail (FolderBrowser *fb) { MailConfigDruid *druid; - - if (e_question(FB_WINDOW(fb), GTK_RESPONSE_YES, NULL, - _("You have not configured the mail client.\n" - "You need to do this before you can send,\n" - "receive or compose mail.\n" - "Would you like to configure it now?"))) { + GtkWidget *dialog; + + dialog = gnome_message_box_new ( + _("You have not configured the mail client.\n" + "You need to do this before you can send,\n" + "receive or compose mail.\n" + "Would you like to configure it now?"), + GNOME_MESSAGE_BOX_QUESTION, + GNOME_STOCK_BUTTON_YES, + GNOME_STOCK_BUTTON_NO, NULL); + + /* + * Focus YES + */ + gnome_dialog_set_default (GNOME_DIALOG (dialog), 0); + gtk_widget_grab_focus (GTK_WIDGET (GNOME_DIALOG (dialog)->buttons->data)); + + e_gnome_dialog_set_parent (GNOME_DIALOG (dialog), FB_WINDOW (fb)); + + switch (gnome_dialog_run_and_close (GNOME_DIALOG (dialog))) { + case 0: druid = mail_config_druid_new (fb->shell); - g_object_weak_ref ((GObject *) druid, (GWeakNotify) druid_destroy_cb, NULL); - gtk_widget_show ((GtkWidget *)druid); - gtk_grab_add ((GtkWidget *)druid); + gtk_signal_connect (GTK_OBJECT (druid), "destroy", + GTK_SIGNAL_FUNC (druid_destroyed), NULL); + gtk_widget_show (GTK_WIDGET (druid)); + gtk_grab_add (GTK_WIDGET (druid)); gtk_main (); + break; + case 1: + default: + break; } return mail_config_is_configured (); @@ -202,7 +188,6 @@ static gboolean check_send_configuration (FolderBrowser *fb) { const MailConfigAccount *account; - GtkWidget *dialog; /* Check general */ if (!mail_config_is_configured () && !configure_mail (fb)) @@ -213,31 +198,58 @@ check_send_configuration (FolderBrowser *fb) /* Check for an identity */ if (!account) { - e_notice(FB_WINDOW(fb), GTK_MESSAGE_WARNING, - _("You need to configure an identity\nbefore you can compose mail.")); + GtkWidget *message; + + message = e_gnome_warning_dialog_parented (_("You need to configure an identity\n" + "before you can compose mail."), + FB_WINDOW (fb)); + + gnome_dialog_set_close (GNOME_DIALOG (message), TRUE); + gtk_widget_show (message); + return FALSE; } /* Check for a transport */ if (!account->transport || !account->transport->url) { - e_notice(FB_WINDOW(fb), GTK_MESSAGE_WARNING, - _("You need to configure a mail transport\n" - "before you can compose mail.")); + GtkWidget *message; + + message = e_gnome_warning_dialog_parented (_("You need to configure a mail transport\n" + "before you can compose mail."), + GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (fb), + GTK_TYPE_WINDOW))); + + gnome_dialog_set_close (GNOME_DIALOG (message), TRUE); + gtk_widget_show (message); + return FALSE; } return TRUE; } +static void +msgbox_destroyed (GtkWidget *widget, gpointer data) +{ + gboolean *show_again = data; + GtkWidget *checkbox; + + checkbox = e_message_box_get_checkbox (E_MESSAGE_BOX (widget)); + *show_again = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox)); +} + static gboolean ask_confirm_for_unwanted_html_mail (EMsgComposer *composer, EDestination **recipients) { - gboolean show_again, res; + gboolean show_again = TRUE; GString *str; - int i; - - if (!mail_config_get_confirm_unwanted_html ()) + GtkWidget *mbox; + int i, button; + + if (!mail_config_get_confirm_unwanted_html ()) { + g_message ("doesn't want to see confirm html messages!"); return TRUE; + } /* FIXME: this wording sucks */ str = g_string_new (_("You are sending an HTML-formatted message. Please make sure that\n" @@ -245,42 +257,91 @@ ask_confirm_for_unwanted_html_mail (EMsgComposer *composer, EDestination **recip for (i = 0; recipients[i] != NULL; ++i) { if (!e_destination_get_html_mail_pref (recipients[i])) { const char *name; + char *buf; name = e_destination_get_textrep (recipients[i]); + buf = e_utf8_to_locale_string (name); - g_string_sprintfa (str, " %s\n", name); + g_string_sprintfa (str, " %s\n", buf); + g_free (buf); } } g_string_append (str, _("Send anyway?")); - res = e_question((GtkWindow *)composer, GTK_RESPONSE_YES, &show_again, "%s", str->str); - g_string_free(str, TRUE); - mail_config_set_confirm_unwanted_html (show_again); - - return res; + + mbox = e_message_box_new (str->str, + E_MESSAGE_BOX_QUESTION, + GNOME_STOCK_BUTTON_YES, + GNOME_STOCK_BUTTON_NO, + NULL); + + g_string_free (str, TRUE); + + gtk_signal_connect (GTK_OBJECT (mbox), "destroy", + msgbox_destroyed, &show_again); + + button = gnome_dialog_run_and_close (GNOME_DIALOG (mbox)); + + if (!show_again) { + mail_config_set_confirm_unwanted_html (show_again); + g_message ("don't show HTML warning again"); + } + + if (button == 0) + return TRUE; + else + return FALSE; } static gboolean ask_confirm_for_empty_subject (EMsgComposer *composer) { - gboolean show_again, res; - GtkWidget *mbox, *check; + /* FIXME: EMessageBox should really handle this stuff + automagically. What Miguel thinks would be nice is to pass + in a unique id which could be used as a key in the config + file and the value would be an int. -1 for always show or + the button pressed otherwise. This probably means we'd have + to write e_messagebox_run () */ + gboolean show_again = TRUE; + GtkWidget *mbox; + int button; if (!mail_config_get_prompt_empty_subject ()) return TRUE; - - res = e_question((GtkWindow *)composer, GTK_RESPONSE_YES, &show_again, - _("This message has no subject.\nReally send?")); + + mbox = e_message_box_new (_("This message has no subject.\nReally send?"), + E_MESSAGE_BOX_QUESTION, + GNOME_STOCK_BUTTON_YES, + GNOME_STOCK_BUTTON_NO, + NULL); + + gtk_signal_connect (GTK_OBJECT (mbox), "destroy", + msgbox_destroyed, &show_again); + + button = gnome_dialog_run_and_close (GNOME_DIALOG (mbox)); + mail_config_set_prompt_empty_subject (show_again); - return res; + if (button == 0) + return TRUE; + else + return FALSE; } static gboolean ask_confirm_for_only_bcc (EMsgComposer *composer, gboolean hidden_list_case) { - gboolean show_again, res; + /* FIXME: EMessageBox should really handle this stuff + automagically. What Miguel thinks would be nice is to pass + in a message-id which could be used as a key in the config + file and the value would be an int. -1 for always show or + the button pressed otherwise. This probably means we'd have + to write e_messagebox_run () */ + gboolean show_again = TRUE; + GtkWidget *mbox; + int button; const char *first_text; + char *message_text; if (!mail_config_get_prompt_only_bcc ()) return TRUE; @@ -298,15 +359,30 @@ ask_confirm_for_only_bcc (EMsgComposer *composer, gboolean hidden_list_case) } else { first_text = _("This message contains only Bcc recipients."); } - - res = e_question((GtkWindow *)composer, GTK_RESPONSE_YES, &show_again, - "%s\n%s", first_text, - _("It is possible that the mail server may reveal the recipients " - "by adding an Apparently-To header.\nSend anyway?")); + + message_text = g_strdup_printf ("%s\n%s", first_text, + _("It is possible that the mail server may reveal the recipients " + "by adding an Apparently-To header.\nSend anyway?")); + + mbox = e_message_box_new (message_text, + E_MESSAGE_BOX_QUESTION, + GNOME_STOCK_BUTTON_YES, + GNOME_STOCK_BUTTON_NO, + NULL); + + gtk_signal_connect (GTK_OBJECT (mbox), "destroy", + msgbox_destroyed, &show_again); + + button = gnome_dialog_run_and_close (GNOME_DIALOG (mbox)); mail_config_set_prompt_only_bcc (show_again); - return res; + g_free (message_text); + + if (button == 0) + return TRUE; + else + return FALSE; } @@ -357,20 +433,23 @@ composer_send_queued_cb (CamelFolder *folder, CamelMimeMessage *msg, CamelMessag ccd = ccd_new (); /* disconnect the previous signal handlers */ - g_signal_handlers_disconnect_matched(send->composer, G_SIGNAL_MATCH_FUNC, 0, - 0, NULL, composer_send_cb, NULL); - g_signal_handlers_disconnect_matched(send->composer, G_SIGNAL_MATCH_FUNC, 0, - 0, NULL, composer_save_draft_cb, NULL); + gtk_signal_disconnect_by_func (GTK_OBJECT (send->composer), + GTK_SIGNAL_FUNC (composer_send_cb), NULL); + gtk_signal_disconnect_by_func (GTK_OBJECT (send->composer), + GTK_SIGNAL_FUNC (composer_save_draft_cb), NULL); /* reconnect to the signals using a non-NULL ccd for the callback data */ - g_signal_connect (send->composer, "send", G_CALLBACK (composer_send_cb), ccd); - g_signal_connect (send->composer, "save-draft", G_CALLBACK (composer_save_draft_cb), ccd); - - g_object_weak_ref ((GObject *) send->composer, (GWeakNotify) composer_destroy_cb, ccd); + gtk_signal_connect (GTK_OBJECT (send->composer), "send", + GTK_SIGNAL_FUNC (composer_send_cb), ccd); + gtk_signal_connect (GTK_OBJECT (send->composer), "save-draft", + GTK_SIGNAL_FUNC (composer_save_draft_cb), ccd); + gtk_signal_connect (GTK_OBJECT (send->composer), "destroy", + GTK_SIGNAL_FUNC (composer_destroy_cb), ccd); } e_msg_composer_set_enable_autosave (send->composer, TRUE); gtk_widget_show (GTK_WIDGET (send->composer)); + gtk_object_unref (GTK_OBJECT (send->composer)); } camel_message_info_free (info); @@ -429,8 +508,15 @@ composer_get_message (EMsgComposer *composer, gboolean post, gboolean save_html_ /* I'm sensing a lack of love, er, I mean recipients. */ if (num == 0 && !post) { - e_notice((GtkWindow *)composer, GTK_MESSAGE_WARNING, - _("You must specify recipients in order to send this message.")); + GtkWidget *message_box; + + message_box = gnome_message_box_new (_("You must specify recipients in order to " + "send this message."), + GNOME_MESSAGE_BOX_WARNING, + GNOME_STOCK_BUTTON_OK, + NULL); + + gnome_dialog_run_and_close (GNOME_DIALOG (message_box)); goto finished; } @@ -507,7 +593,7 @@ got_post_folder (char *uri, CamelFolder *folder, void *data) *fp = folder; if (folder) - camel_object_ref (folder); + camel_object_ref (CAMEL_OBJECT (folder)); } void @@ -558,7 +644,7 @@ composer_send_cb (EMsgComposer *composer, gpointer user_data) ccd_ref (send->ccd); send->send = !post; send->composer = composer; - g_object_ref (composer); + gtk_object_ref (GTK_OBJECT (composer)); gtk_widget_hide (GTK_WIDGET (composer)); e_msg_composer_set_enable_autosave (composer, FALSE); @@ -593,15 +679,17 @@ save_draft_done (CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *i /* disconnect the previous signal handlers */ gtk_signal_disconnect_by_func (GTK_OBJECT (sdi->composer), - G_CALLBACK (composer_send_cb), NULL); + GTK_SIGNAL_FUNC (composer_send_cb), NULL); gtk_signal_disconnect_by_func (GTK_OBJECT (sdi->composer), - G_CALLBACK (composer_save_draft_cb), NULL); + GTK_SIGNAL_FUNC (composer_save_draft_cb), NULL); /* reconnect to the signals using a non-NULL ccd for the callback data */ - g_signal_connect (sdi->composer, "send", G_CALLBACK (composer_send_cb), ccd); - g_signal_connect (sdi->composer, "save-draft", G_CALLBACK (composer_save_draft_cb), ccd); - - g_object_weak_ref ((GObject *) sdi->composer, (GWeakNotify) composer_destroy_cb, ccd); + gtk_signal_connect (GTK_OBJECT (sdi->composer), "send", + GTK_SIGNAL_FUNC (composer_send_cb), ccd); + gtk_signal_connect (GTK_OBJECT (sdi->composer), "save-draft", + GTK_SIGNAL_FUNC (composer_save_draft_cb), ccd); + gtk_signal_connect (GTK_OBJECT (sdi->composer), "destroy", + GTK_SIGNAL_FUNC (composer_destroy_cb), ccd); } if (ccd->drafts_folder) { @@ -634,7 +722,7 @@ save_draft_done (CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *i gtk_widget_destroy (GTK_WIDGET (sdi->composer)); done: - g_object_unref (sdi->composer); + gtk_object_unref (GTK_OBJECT (sdi->composer)); if (sdi->ccd) ccd_unref (sdi->ccd); g_free (info); @@ -649,7 +737,7 @@ use_default_drafts_cb (int reply, gpointer data) if (reply == 0) { *folder = drafts_folder; - camel_object_ref (drafts_folder); + camel_object_ref (CAMEL_OBJECT (*folder)); } } @@ -660,7 +748,7 @@ save_draft_folder (char *uri, CamelFolder *folder, gpointer data) if (folder) { *save = folder; - camel_object_ref (folder); + camel_object_ref (CAMEL_OBJECT (folder)); } } @@ -684,18 +772,18 @@ composer_save_draft_cb (EMsgComposer *composer, int quit, gpointer user_data) mail_msg_wait (id); if (!folder) { - gboolean res; - if (!e_question((GtkWindow *)composer, GTK_RESPONSE_YES, NULL, - _("Unable to open the drafts folder for this account.\n" - "Would you like to use the default drafts folder?"))) - return; + GtkWidget *dialog; - folder = drafts_folder; - camel_object_ref (drafts_folder); + dialog = gnome_ok_cancel_dialog_parented (_("Unable to open the drafts folder for this account.\n" + "Would you like to use the default drafts folder?"), + use_default_drafts_cb, &folder, GTK_WINDOW (composer)); + gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); + if (!folder) + return; } } else { folder = drafts_folder; - camel_object_ref (folder); + camel_object_ref (CAMEL_OBJECT (folder)); } msg = e_msg_composer_get_message_draft (composer); @@ -705,15 +793,15 @@ composer_save_draft_cb (EMsgComposer *composer, int quit, gpointer user_data) sdi = g_malloc (sizeof (struct _save_draft_info)); sdi->composer = composer; - g_object_ref (composer); + gtk_object_ref (GTK_OBJECT (composer)); sdi->ccd = user_data; if (sdi->ccd) ccd_ref (sdi->ccd); sdi->quit = quit; mail_append_mail (folder, msg, info, save_draft_done, sdi); - camel_object_unref (folder); - camel_object_unref (msg); + camel_object_unref (CAMEL_OBJECT (folder)); + camel_object_unref (CAMEL_OBJECT (msg)); } static GtkWidget * @@ -768,10 +856,12 @@ compose_msg (GtkWidget *widget, gpointer user_data) ccd = ccd_new (); - g_signal_connect (composer, "send", G_CALLBACK (composer_send_cb), ccd); - g_signal_connect (composer, "save-draft", G_CALLBACK (composer_save_draft_cb), ccd); - - g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_cb, ccd); + gtk_signal_connect (GTK_OBJECT (composer), "send", + GTK_SIGNAL_FUNC (composer_send_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "save-draft", + GTK_SIGNAL_FUNC (composer_save_draft_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "destroy", + GTK_SIGNAL_FUNC (composer_destroy_cb), ccd); gtk_widget_show (composer); } @@ -795,10 +885,12 @@ send_to_url (const char *url) ccd = ccd_new (); - g_signal_connect (composer, "send", G_CALLBACK (composer_send_cb), ccd); - g_signal_connect (composer, "save-draft", G_CALLBACK (composer_save_draft_cb), ccd); - - g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_cb, ccd); + gtk_signal_connect (GTK_OBJECT (composer), "send", + GTK_SIGNAL_FUNC (composer_send_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "save-draft", + GTK_SIGNAL_FUNC (composer_save_draft_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "destroy", + GTK_SIGNAL_FUNC (composer_destroy_cb), ccd); gtk_widget_show (composer); } @@ -941,7 +1033,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char const CamelInternetAddress *reply_to, *sender, *to_addrs, *cc_addrs; const char *name = NULL, *address = NULL, *source = NULL; const char *message_id, *references, *mlist = NULL; - char *text = NULL, *subject, format[256]; + char *text = NULL, *subject, date_str[100], *format; const MailConfigAccount *def, *account, *me = NULL; const GSList *l, *accounts = NULL; GHashTable *account_hash = NULL; @@ -1030,7 +1122,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char max = camel_address_length (CAMEL_ADDRESS (to_addrs)); for (i = 0; i < max; i++) { camel_internet_address_get (to_addrs, i, &name, &address); - if (!strcasecmp (address, mlist)) + if (!g_strcasecmp (address, mlist)) break; } @@ -1038,7 +1130,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char max = camel_address_length (CAMEL_ADDRESS (cc_addrs)); for (i = 0; i < max; i++) { camel_internet_address_get (cc_addrs, i, &name, &address); - if (!strcasecmp (address, mlist)) + if (!g_strcasecmp (address, mlist)) break; } } @@ -1129,7 +1221,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char /* attach the original message as an attachment */ part = mail_tool_make_message_attachment (message); e_msg_composer_attach (composer, part); - camel_object_unref (part); + camel_object_unref (CAMEL_OBJECT (part)); break; case MAIL_CONFIG_REPLY_QUOTED: default: @@ -1142,9 +1234,12 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char } date = camel_mime_message_get_date (message, NULL); - strftime (format, sizeof (format), _("On %a, %Y-%m-%d at %H:%M, %%s wrote:"), localtime (&date)); + strftime (date_str, sizeof (date_str), _("On %a, %Y-%m-%d at %H:%M, %%s wrote:"), + localtime (&date)); + format = e_utf8_from_locale_string (date_str); text = mail_tool_quote_message (message, format, name && *name ? name : address); mail_ignore (composer, name, address); + g_free (format); if (text) { e_msg_composer_set_body_text (composer, text); g_free (text); @@ -1157,7 +1252,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char if (!subject) subject = g_strdup (""); else { - if (!strncasecmp (subject, "Re: ", 4)) + if (!g_strncasecmp (subject, "Re: ", 4)) subject = g_strndup (subject, MAX_SUBJECT_LEN); else { if (strlen (subject) < MAX_SUBJECT_LEN) { @@ -1252,10 +1347,12 @@ mail_reply (CamelFolder *folder, CamelMimeMessage *msg, const char *uid, int mod ccd->flags |= CAMEL_MESSAGE_ANSWERED_ALL; ccd->set = ccd->flags; - g_signal_connect (composer, "send", G_CALLBACK (composer_send_cb), ccd); - g_signal_connect (composer, "save-draft", G_CALLBACK (composer_save_draft_cb), ccd); - - g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_cb, ccd); + gtk_signal_connect (GTK_OBJECT (composer), "send", + GTK_SIGNAL_FUNC (composer_send_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "save-draft", + GTK_SIGNAL_FUNC (composer_save_draft_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "destroy", + GTK_SIGNAL_FUNC (composer_destroy_cb), ccd); gtk_widget_show (GTK_WIDGET (composer)); e_msg_composer_unset_changed (composer); @@ -1335,10 +1432,12 @@ forward_get_composer (CamelMimeMessage *message, const char *subject) if (composer) { ccd = ccd_new (); - g_signal_connect (composer, "send", G_CALLBACK (composer_send_cb), ccd); - g_signal_connect (composer, "save-draft", G_CALLBACK (composer_save_draft_cb), ccd); - - g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_cb, ccd); + gtk_signal_connect (GTK_OBJECT (composer), "send", + GTK_SIGNAL_FUNC (composer_send_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "save-draft", + GTK_SIGNAL_FUNC (composer_save_draft_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "destroy", + GTK_SIGNAL_FUNC (composer_destroy_cb), ccd); e_msg_composer_set_headers (composer, account->name, NULL, NULL, NULL, subject); } else { @@ -1472,10 +1571,12 @@ post_to_url (const char *url) ccd = ccd_new (); - g_signal_connect (composer, "send", G_CALLBACK (composer_send_cb), ccd); - g_signal_connect (composer, "save-draft", G_CALLBACK (composer_save_draft_cb), ccd); - - g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_cb, ccd); + gtk_signal_connect (GTK_OBJECT (composer), "send", + GTK_SIGNAL_FUNC (composer_send_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "save-draft", + GTK_SIGNAL_FUNC (composer_save_draft_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "destroy", + GTK_SIGNAL_FUNC (composer_destroy_cb), ccd); gtk_widget_show (composer); } @@ -1543,10 +1644,12 @@ redirect_get_composer (CamelMimeMessage *message) if (composer) { ccd = ccd_new (); - g_signal_connect (composer, "send", G_CALLBACK (composer_send_cb), ccd); - g_signal_connect (composer, "save-draft", G_CALLBACK (composer_save_draft_cb), ccd); - - g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_cb, ccd); + gtk_signal_connect (GTK_OBJECT (composer), "send", + GTK_SIGNAL_FUNC (composer_send_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "save-draft", + GTK_SIGNAL_FUNC (composer_save_draft_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "destroy", + GTK_SIGNAL_FUNC (composer_destroy_cb), ccd); } else { g_warning ("Could not create composer"); } @@ -1612,7 +1715,7 @@ transfer_msg_done (gboolean ok, void *data) 0, 0, FALSE); } - g_object_unref (fb); + gtk_object_unref (GTK_OBJECT (fb)); } static void @@ -1652,7 +1755,7 @@ transfer_msg (FolderBrowser *fb, gboolean delete_from_source) message_list_foreach (fb->message_list, enumerate_msg, uids); if (delete_from_source) { - g_object_ref (fb); + gtk_object_ref (GTK_OBJECT (fb)); mail_transfer_messages (fb->folder, uids, delete_from_source, folder->physicalUri, 0, transfer_msg_done, fb); @@ -1660,7 +1763,6 @@ transfer_msg (FolderBrowser *fb, gboolean delete_from_source) mail_transfer_messages (fb->folder, uids, delete_from_source, folder->physicalUri, 0, NULL, NULL); } - CORBA_free (folder); } @@ -1694,7 +1796,7 @@ find_socket (GtkContainer *container) { GList *children, *tmp; - children = gtk_container_get_children (container); + children = gtk_container_children (container); while (children) { if (BONOBO_IS_SOCKET (children->data)) return children->data; @@ -1707,14 +1809,13 @@ find_socket (GtkContainer *container) g_list_free_1 (children); children = tmp; } - - return NULL; + return NULL; } static void popup_listener_cb (BonoboListener *listener, - const char *event_name, - const CORBA_any *any, + char *event_name, + CORBA_any *any, CORBA_Environment *ev, gpointer user_data) { @@ -1738,17 +1839,18 @@ addrbook_sender (GtkWidget *widget, gpointer user_data) GtkWidget *socket; GPtrArray *uids; int i; - + if (FOLDER_BROWSER_IS_DESTROYED (fb)) return; - - uids = g_ptr_array_new (); - message_list_foreach (fb->message_list, enumerate_msg, uids); + + uids = g_ptr_array_new(); + message_list_foreach(fb->message_list, enumerate_msg, uids); if (uids->len != 1) goto done; - - info = camel_folder_get_message_info (fb->folder, uids->pdata[0]); - if (info == NULL || (addr_str = camel_message_info_from (info)) == NULL) + + info = camel_folder_get_message_info(fb->folder, uids->pdata[0]); + if (info == NULL + || (addr_str = camel_message_info_from(info)) == NULL) goto done; win = gtk_window_new (GTK_WINDOW_TOPLEVEL); @@ -1757,23 +1859,25 @@ addrbook_sender (GtkWidget *widget, gpointer user_data) control = bonobo_widget_new_control ("OAFIID:GNOME_Evolution_Addressbook_AddressPopup", CORBA_OBJECT_NIL); bonobo_widget_set_property (BONOBO_WIDGET (control), - "email", TC_CORBA_string, addr_str, + "email", addr_str, NULL); bonobo_event_source_client_add_listener (bonobo_widget_get_objref (BONOBO_WIDGET (control)), popup_listener_cb, NULL, NULL, win); socket = find_socket (GTK_CONTAINER (control)); - - g_object_weak_ref ((GObject *) socket, (GWeakNotify) gtk_widget_destroy, win); + gtk_signal_connect_object (GTK_OBJECT (socket), + "destroy", + GTK_SIGNAL_FUNC (gtk_widget_destroy), + GTK_OBJECT (win)); gtk_container_add (GTK_CONTAINER (win), control); gtk_widget_show_all (win); done: - for (i = 0; i < uids->len; i++) - g_free (uids->pdata[i]); - g_ptr_array_free (uids, TRUE); + for (i=0; i < uids->len; i++) + g_free(uids->pdata[i]); + g_ptr_array_free(uids, TRUE); } void @@ -1945,13 +2049,13 @@ toggle_flags (FolderBrowser *fb, guint32 mask) guint32 flags; flags = ~(camel_folder_get_message_flags (fb->folder, uids->pdata[i])); - + /* if we're flagging a message important, always undelete it too */ if (mask & flags & CAMEL_MESSAGE_FLAGGED) { flags &= ~CAMEL_MESSAGE_DELETED; mask |= CAMEL_MESSAGE_DELETED; } - + /* if we're flagging a message deleted, mark it seen. If * we're undeleting it, we also want it to be seen, so always do this. */ @@ -1959,9 +2063,9 @@ toggle_flags (FolderBrowser *fb, guint32 mask) flags |= CAMEL_MESSAGE_SEEN; mask |= CAMEL_MESSAGE_SEEN; } - + camel_folder_set_message_flags (fb->folder, uids->pdata[i], mask, flags); - + g_free (uids->pdata[i]); } camel_folder_thaw (fb->folder); @@ -2038,33 +2142,51 @@ struct _tag_editor_data { }; static void -tag_editor_response(GtkWidget *gd, int button, struct _tag_editor_data *data) +tag_editor_ok (GtkWidget *button, gpointer user_data) { + struct _tag_editor_data *data = user_data; CamelFolder *folder; CamelTag *tags, *t; GPtrArray *uids; int i; - - /*if (FOLDER_BROWSER_IS_DESTROYED (data->fb)) - goto done;*/ - - if (button == GTK_RESPONSE_OK - && (tags = message_tag_editor_get_tag_list (data->editor))) { - folder = data->fb->folder; - uids = data->uids; - camel_folder_freeze (folder); - for (i = 0; i < uids->len; i++) { - for (t = tags; t; t = t->next) - camel_folder_set_message_user_tag (folder, uids->pdata[i], t->name, t->value); - } - camel_folder_thaw (folder); - camel_tag_list_free (&tags); + if (FOLDER_BROWSER_IS_DESTROYED (data->fb)) + goto done; + + tags = message_tag_editor_get_tag_list (data->editor); + if (tags == NULL) + goto done; + + folder = data->fb->folder; + uids = data->uids; + + camel_folder_freeze (folder); + for (i = 0; i < uids->len; i++) { + for (t = tags; t; t = t->next) + camel_folder_set_message_user_tag (folder, uids->pdata[i], t->name, t->value); } + camel_folder_thaw (folder); + + camel_tag_list_free (&tags); + + done: + gtk_widget_destroy (GTK_WIDGET (data->editor)); +} - gtk_widget_destroy(gd); +static void +tag_editor_cancel (GtkWidget *button, gpointer user_data) +{ + struct _tag_editor_data *data = user_data; + + gtk_widget_destroy (GTK_WIDGET (data->editor)); +} - g_object_unref (data->fb); +static void +tag_editor_destroy (GnomeDialog *dialog, gpointer user_data) +{ + struct _tag_editor_data *data = user_data; + + gtk_object_unref (GTK_OBJECT (data->fb)); g_ptr_array_free (data->uids, TRUE); g_free (data); } @@ -2100,8 +2222,10 @@ flag_for_followup (BonoboUIComponent *uih, void *user_data, const char *path) camel_message_info_from (info), camel_message_info_subject (info)); } - - g_signal_connect(editor, "response", G_CALLBACK(tag_editor_response), data); + + gnome_dialog_button_connect (GNOME_DIALOG (editor), 0, tag_editor_ok, data); + gnome_dialog_button_connect (GNOME_DIALOG (editor), 1, tag_editor_cancel, data); + gnome_dialog_set_close (GNOME_DIALOG (editor), TRUE); /* special-case... */ if (uids->len == 1) { @@ -2115,6 +2239,9 @@ flag_for_followup (BonoboUIComponent *uih, void *user_data, const char *path) } } + gtk_signal_connect (GTK_OBJECT (editor), "destroy", + tag_editor_destroy, data); + gtk_widget_show (editor); } @@ -2235,10 +2362,12 @@ do_edit_messages (CamelFolder *folder, GPtrArray *uids, GPtrArray *messages, voi ccd->drafts_uid = g_strdup (uids->pdata[i]); } - g_signal_connect (composer, "send", G_CALLBACK (composer_send_cb), ccd); - g_signal_connect (composer, "save-draft", G_CALLBACK (composer_save_draft_cb), ccd); - - g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_cb, ccd); + gtk_signal_connect (GTK_OBJECT (composer), "send", + GTK_SIGNAL_FUNC (composer_send_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "save-draft", + GTK_SIGNAL_FUNC (composer_save_draft_cb), ccd); + gtk_signal_connect (GTK_OBJECT (composer), "destroy", + GTK_SIGNAL_FUNC (composer_destroy_cb), ccd); gtk_widget_show (GTK_WIDGET (composer)); } @@ -2251,20 +2380,17 @@ are_you_sure (const char *msg, GPtrArray *uids, FolderBrowser *fb) GtkWidget *dialog; char *buf; int button, i; - - dialog = gtk_message_dialog_new (FB_WINDOW (fb), GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, - msg, uids->len); - button = gtk_dialog_run((GtkDialog *)dialog); - gtk_widget_destroy(dialog); - - if (button != GTK_RESPONSE_OK) { + + buf = g_strdup_printf (msg, uids->len); + dialog = e_gnome_ok_cancel_dialog_parented (buf, NULL, NULL, FB_WINDOW (fb)); + button = gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); + if (button != 0) { for (i = 0; i < uids->len; i++) g_free (uids->pdata[i]); g_ptr_array_free (uids, TRUE); } - return button == GTK_RESPONSE_OK; + return button == 0; } static void @@ -2278,8 +2404,16 @@ edit_msg_internal (FolderBrowser *fb) uids = g_ptr_array_new (); message_list_foreach (fb->message_list, enumerate_msg, uids); - if (uids->len > 10 && !are_you_sure (_("Are you sure you want to edit all %d messages?"), uids, fb)) + if (uids->len > 10 && !are_you_sure (_("Are you sure you want to edit all %d messages?"), uids, fb)) { + int i; + + for (i = 0; i < uids->len; i++) + g_free (uids->pdata[i]); + + g_ptr_array_free (uids, TRUE); + return; + } mail_get_messages (fb->folder, uids, do_edit_messages, fb); } @@ -2293,8 +2427,13 @@ edit_msg (GtkWidget *widget, gpointer user_data) return; if (!folder_browser_is_drafts (fb)) { - e_notice(FB_WINDOW(fb), GTK_MESSAGE_ERROR, - _("You may only edit messages saved\nin the Drafts folder.")); + GtkWidget *dialog; + + dialog = gnome_warning_dialog_parented (_("You may only edit messages saved\n" + "in the Drafts folder."), + FB_WINDOW (fb)); + gnome_dialog_set_close (GNOME_DIALOG (dialog), TRUE); + gtk_widget_show (dialog); return; } @@ -2328,9 +2467,12 @@ resend_msg (GtkWidget *widget, gpointer user_data) if (!folder_browser_is_sent (fb)) { GtkWidget *dialog; - - e_notice(FB_WINDOW(fb), GTK_MESSAGE_ERROR, - _("You may only resend messages\nin the Sent folder.")); + + dialog = gnome_warning_dialog_parented (_("You may only resend messages\n" + "in the Sent folder."), + FB_WINDOW (fb)); + gnome_dialog_set_close (GNOME_DIALOG (dialog), TRUE); + gtk_widget_show (dialog); return; } @@ -2340,8 +2482,16 @@ resend_msg (GtkWidget *widget, gpointer user_data) uids = g_ptr_array_new (); message_list_foreach (fb->message_list, enumerate_msg, uids); - if (uids->len > 10 && !are_you_sure (_("Are you sure you want to resend all %d messages?"), uids, fb)) + if (uids->len > 10 && !are_you_sure (_("Are you sure you want to resend all %d messages?"), uids, fb)) { + int i; + + for (i = 0; i < uids->len; i++) + g_free (uids->pdata[i]); + + g_ptr_array_free (uids, TRUE); + return; + } mail_get_messages (fb->folder, uids, do_resend_messages, fb); } @@ -2358,10 +2508,8 @@ search_msg (GtkWidget *widget, gpointer user_data) if (fb->mail_display->current_message == NULL) { GtkWidget *dialog; - dialog = gtk_message_dialog_new(FB_WINDOW(fb), GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("No Message Selected")); - g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog); + dialog = gnome_warning_dialog_parented (_("No Message Selected"), FB_WINDOW (fb)); + gnome_dialog_set_close (GNOME_DIALOG (dialog), TRUE); gtk_widget_show (dialog); return; } @@ -2387,8 +2535,8 @@ save_msg_ok (GtkWidget *widget, gpointer user_data) CamelFolder *folder; GPtrArray *uids; const char *path; + int fd, ret = 0; struct stat st; - gboolean ret = TRUE; path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (user_data)); if (path[0] == '\0') @@ -2397,21 +2545,33 @@ save_msg_ok (GtkWidget *widget, gpointer user_data) /* make sure we can actually save to it... */ if (stat (path, &st) != -1 && !S_ISREG (st.st_mode)) return; - - if (access(path, F_OK) == 0) { - if (access(path, W_OK) != 0) { - e_notice(GTK_WINDOW(user_data), GTK_MESSAGE_ERROR, - _("Cannot save to `%s'\n %s"), path, g_strerror(errno)); - return; - } - - ret = e_question(GTK_WINDOW(user_data), GTK_RESPONSE_NO, NULL, - _("`%s' already exists.\nOverwrite it?"), path); + + fd = open (path, O_RDONLY); + if (fd != -1) { + GtkWidget *dialog; + GtkWidget *text; + + close (fd); + + dialog = gnome_dialog_new (_("Overwrite file?"), + GNOME_STOCK_BUTTON_YES, + GNOME_STOCK_BUTTON_NO, + NULL); + + e_gnome_dialog_set_parent (GNOME_DIALOG (dialog), GTK_WINDOW (user_data)); + + text = gtk_label_new (_("A file by that name already exists.\nOverwrite it?")); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), text, TRUE, TRUE, 4); + gtk_window_set_policy (GTK_WINDOW (dialog), FALSE, TRUE, FALSE); + gtk_widget_show (text); + + ret = gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); } - if (ret == GTK_RESPONSE_OK) { - folder = g_object_get_data ((GObject *) user_data, "folder"); - uids = g_object_steal_data (G_OBJECT (user_data), "uids"); + if (ret == 0) { + folder = gtk_object_get_data (GTK_OBJECT (user_data), "folder"); + uids = gtk_object_get_data (GTK_OBJECT (user_data), "uids"); + gtk_object_remove_no_notify (GTK_OBJECT (user_data), "uids"); mail_save_messages (folder, uids, path, NULL, NULL); gtk_widget_destroy (GTK_WIDGET (user_data)); } @@ -2455,13 +2615,13 @@ save_msg (GtkWidget *widget, gpointer user_data) path = g_strdup_printf ("%s/", g_get_home_dir ()); gtk_file_selection_set_filename (filesel, path); g_free (path); - - g_object_set_data_full ((GObject *) filesel, "uids", uids, save_msg_destroy); - g_object_set_data ((GObject *) filesel, "folder", fb->folder); - - g_signal_connect (filesel->ok_button, "clicked", G_CALLBACK (save_msg_ok), filesel); - g_signal_connect_swapped (filesel->cancel_button, "clicked", - G_CALLBACK (gtk_widget_destroy), filesel); + gtk_object_set_data_full (GTK_OBJECT (filesel), "uids", uids, save_msg_destroy); + gtk_object_set_data (GTK_OBJECT (filesel), "folder", fb->folder); + gtk_signal_connect (GTK_OBJECT (filesel->ok_button), + "clicked", GTK_SIGNAL_FUNC (save_msg_ok), filesel); + gtk_signal_connect_object (GTK_OBJECT (filesel->cancel_button), + "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), + GTK_OBJECT (filesel)); gtk_widget_show (GTK_WIDGET (filesel)); } @@ -2491,7 +2651,7 @@ delete_msg (GtkWidget *button, gpointer user_data) /* If this is the last message and deleted messages are hidden, select the previous */ - if ((row + 1 == e_tree_row_count (fb->message_list->tree)) + if ((row+1 == e_tree_row_count (fb->message_list->tree)) && mail_config_get_hide_deleted ()) message_list_select (fb->message_list, MESSAGE_LIST_SELECT_PREVIOUS, 0, CAMEL_MESSAGE_DELETED, FALSE); @@ -2512,20 +2672,46 @@ undelete_msg (GtkWidget *button, gpointer user_data) static gboolean confirm_goto_next_folder (FolderBrowser *fb) { - gboolean res, show_again; + GtkWidget *dialog, *label, *checkbox; + int button; if (!mail_config_get_confirm_goto_next_folder ()) return mail_config_get_goto_next_folder (); - - /*gtk_window_set_title((GtkWindow *)dialog, _("Go to next folder with unread messages?"));*/ - - res = e_question(FB_WINDOW(fb), GTK_RESPONSE_YES, &show_again, - _("There are no more new messages in this folder.\n" - "Would you like to go to the next folder?")); - mail_config_set_confirm_goto_next_folder(show_again); - mail_config_set_goto_next_folder (res); - - return res; + + dialog = gnome_dialog_new (_("Go to next folder with unread messages?"), + GNOME_STOCK_BUTTON_YES, + GNOME_STOCK_BUTTON_NO, + NULL); + + e_gnome_dialog_set_parent (GNOME_DIALOG (dialog), FB_WINDOW (fb)); + + label = gtk_label_new (_("There are no more new messages in this folder.\n" + "Would you like to go to the next folder?")); + + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), label, TRUE, TRUE, 4); + + checkbox = gtk_check_button_new_with_label (_("Do not ask me again.")); + gtk_object_ref (GTK_OBJECT (checkbox)); + gtk_widget_show (checkbox); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), checkbox, TRUE, TRUE, 4); + + button = gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox))) + mail_config_set_confirm_goto_next_folder (FALSE); + + gtk_object_unref (GTK_OBJECT (checkbox)); + + if (button == 0) { + mail_config_set_goto_next_folder (TRUE); + return TRUE; + } else { + mail_config_set_goto_next_folder (FALSE); + return FALSE; + } } static CamelFolderInfo * @@ -2729,19 +2915,45 @@ expunged_folder (CamelFolder *f, void *data) static gboolean confirm_expunge (FolderBrowser *fb) { - gboolean res, show_again; - + GtkWidget *dialog, *label, *checkbox; + int button; + if (!mail_config_get_confirm_expunge ()) return TRUE; - - res = e_question(FB_WINDOW(fb), GTK_RESPONSE_NO, &show_again, - _("This operation will permanently erase all messages marked as\n" - "deleted. If you continue, you will not be able to recover these messages.\n" - "\nReally erase these messages?")); - - mail_config_set_confirm_expunge(show_again); - - return res; + + dialog = gnome_dialog_new (_("Warning"), + GNOME_STOCK_BUTTON_YES, + GNOME_STOCK_BUTTON_NO, + NULL); + + e_gnome_dialog_set_parent (GNOME_DIALOG (dialog), FB_WINDOW (fb)); + + label = gtk_label_new (_("This operation will permanently erase all messages marked as deleted. If you continue, you will not be able to recover these messages.\n\nReally erase these messages?")); + + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), label, TRUE, TRUE, 4); + + checkbox = gtk_check_button_new_with_label (_("Do not ask me again.")); + gtk_object_ref (GTK_OBJECT (checkbox)); + gtk_widget_show (checkbox); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), checkbox, TRUE, TRUE, 4); + + /* Set the 'No' button as the default */ + gnome_dialog_set_default (GNOME_DIALOG (dialog), 1); + + button = gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); + + if (button == 0 && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox))) + mail_config_set_confirm_expunge (FALSE); + + gtk_object_unref (GTK_OBJECT (checkbox)); + + if (button == 0) + return TRUE; + else + return FALSE; } void @@ -2777,22 +2989,28 @@ expunge_folder (BonoboUIComponent *uih, void *user_data, const char *path) static GtkWidget *filter_editor = NULL; static void -filter_editor_response (GtkWidget *dialog, int button, FolderBrowser *fb) +filter_editor_destroy (GtkWidget *dialog, gpointer user_data) +{ + filter_editor = NULL; +} + +static void +filter_editor_clicked (GtkWidget *dialog, int button, FolderBrowser *fb) { FilterContext *fc; - if (button == GTK_RESPONSE_ACCEPT) { + if (button == 0) { char *user; - fc = g_object_get_data(G_OBJECT(dialog), "context"); + fc = gtk_object_get_data (GTK_OBJECT (dialog), "context"); user = g_strdup_printf ("%s/filters.xml", evolution_dir); rule_context_save ((RuleContext *)fc, user); g_free (user); } - - gtk_widget_destroy(dialog); - - filter_editor = NULL; + + if (button != -1) { + gnome_dialog_close (GNOME_DIALOG (dialog)); + } } static const char *filter_source_names[] = { @@ -2820,19 +3038,27 @@ filter_edit (BonoboUIComponent *uih, void *user_data, const char *path) g_free (user); if (((RuleContext *)fc)->error) { - e_notice(FB_WINDOW (fb), GTK_MESSAGE_ERROR, - _("Error loading filter information:\n%s"), - ((RuleContext *)fc)->error); + GtkWidget *dialog; + char *err; + + err = g_strdup_printf (_("Error loading filter information:\n%s"), + ((RuleContext *)fc)->error); + dialog = gnome_warning_dialog_parented (err, FB_WINDOW (fb)); + g_free (err); + + gnome_dialog_set_close (GNOME_DIALOG (dialog), TRUE); + gtk_widget_show (dialog); return; } filter_editor = (GtkWidget *)filter_editor_new (fc, filter_source_names); - /* maybe this needs destroy func? */ - gtk_window_set_transient_for((GtkWindow *)filter_editor, FB_WINDOW(fb)); + gnome_dialog_set_parent (GNOME_DIALOG (filter_editor), FB_WINDOW (fb)); gtk_window_set_title (GTK_WINDOW (filter_editor), _("Filters")); - gtk_dialog_add_button((GtkDialog *)filter_editor, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); - g_object_set_data_full(G_OBJECT(filter_editor), "context", fc, (GtkDestroyNotify)g_object_unref); - g_signal_connect(filter_editor, "response", G_CALLBACK(filter_editor_response), fb); + + gtk_object_set_data_full (GTK_OBJECT (filter_editor), "context", fc, (GtkDestroyNotify)gtk_object_unref); + gtk_signal_connect (GTK_OBJECT (filter_editor), "clicked", filter_editor_clicked, fb); + gtk_signal_connect (GTK_OBJECT (filter_editor), "destroy", filter_editor_destroy, NULL); + gnome_dialog_append_buttons(GNOME_DIALOG(filter_editor), GNOME_STOCK_BUTTON_CANCEL, NULL); gtk_widget_show (GTK_WIDGET (filter_editor)); } @@ -2872,9 +3098,7 @@ footer_print_cb (GtkHTML *html, GnomePrintContext *print_context, if (info->local_font) { gchar *text = g_strdup_printf (_("Page %d of %d"), info->page_num, info->pages); - /*gdouble tw = gnome_font_get_width_string (info->local_font, text);*/ - /* FIXME: work out how to measure this */ - gdouble tw = strlen(text) * 8; + gdouble tw = gnome_font_get_width_string (info->local_font, text); gnome_print_gsave (print_context); gnome_print_newpath (print_context); @@ -2903,7 +3127,7 @@ footer_info_new (GtkHTML *html, GnomePrintContext *pc, gdouble *line) struct footer_info *info; info = g_new (struct footer_info, 1); - info->local_font = gnome_font_find_closest ("Helvetica", 10.0); + info->local_font = gnome_font_new_closest ("Helvetica", GNOME_FONT_BOOK, FALSE, 10); if (info->local_font) { *line = gnome_font_get_ascender (info->local_font) + gnome_font_get_descender (info->local_font); } @@ -2920,39 +3144,47 @@ do_mail_print (FolderBrowser *fb, gboolean preview) GnomePrintContext *print_context; GnomePrintMaster *print_master; GnomePrintDialog *dialog; - GnomePrintConfig *config = NULL; + GnomePrinter *printer = NULL; + GnomePaper *paper; gdouble line = 0.0; + int copies = 1; + int collate = FALSE; struct footer_info *info; if (!preview) { dialog = GNOME_PRINT_DIALOG (gnome_print_dialog_new (_("Print Message"), GNOME_PRINT_DIALOG_COPIES)); - gtk_dialog_set_default_response((GtkDialog *)dialog, GNOME_PRINT_DIALOG_RESPONSE_PRINT); - gtk_window_set_transient_for((GtkWindow *)dialog, (GtkWindow *)fb); + gnome_dialog_set_default (GNOME_DIALOG (dialog), GNOME_PRINT_PRINT); + e_gnome_dialog_set_parent (GNOME_DIALOG (dialog), FB_WINDOW (fb)); - switch(gtk_dialog_run((GtkDialog *)dialog)) { - case GNOME_PRINT_DIALOG_RESPONSE_PRINT: + switch (gnome_dialog_run (GNOME_DIALOG (dialog))) { + case GNOME_PRINT_PRINT: break; - case GNOME_PRINT_DIALOG_RESPONSE_PREVIEW: + case GNOME_PRINT_PREVIEW: preview = TRUE; break; + case -1: + return; default: - gtk_widget_destroy((GtkWidget *)dialog); + gnome_dialog_close (GNOME_DIALOG (dialog)); return; } - config = gnome_print_dialog_get_config(dialog); - gtk_widget_destroy((GtkWidget *)dialog); + gnome_print_dialog_get_copies (dialog, &copies, &collate); + printer = gnome_print_dialog_get_printer (dialog); + gnome_dialog_close (GNOME_DIALOG (dialog)); } - if (config) { - print_master = gnome_print_master_new_from_config(config); - gnome_print_config_unref(config); - } else - print_master = gnome_print_master_new (); + print_master = gnome_print_master_new (); - /* paper size settings? */ - /*gnome_print_master_set_paper (print_master, paper);*/ + if (printer) + gnome_print_master_set_printer (print_master, printer); + paper = (GnomePaper *) gnome_paper_with_name (_("US-Letter")); + + if (!paper) + paper = (GnomePaper *) gnome_paper_with_name (gnome_paper_name_default ()); + gnome_print_master_set_paper (print_master, paper); + gnome_print_master_set_copies (print_master, copies, collate); print_context = gnome_print_master_get_context (print_master); html = GTK_HTML (gtk_html_new ()); @@ -2977,15 +3209,19 @@ do_mail_print (FolderBrowser *fb, gboolean preview) gnome_print_master_close (print_master); if (preview){ - GtkWidget *preview; - - preview = gnome_print_master_preview_new(print_master, _("Print Preview")); - gtk_widget_show(preview); + gboolean landscape = FALSE; + GnomePrintMasterPreview *preview; + + preview = gnome_print_master_preview_new_with_orientation ( + print_master, _("Print Preview"), landscape); + gtk_widget_show (GTK_WIDGET (preview)); } else { int result = gnome_print_master_print (print_master); - if (result == -1) - e_notice(FB_WINDOW(fb), GTK_MESSAGE_ERROR, _("Printing of message failed")); + if (result == -1){ + e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, + _("Printing of message failed")); + } } /* FIXME: We are leaking the GtkHTML object */ @@ -3088,10 +3324,8 @@ static GtkObject *subscribe_dialog = NULL; static void subscribe_dialog_destroy (GtkWidget *widget, gpointer user_data) { - if (subscribe_dialog) { - g_object_unref (subscribe_dialog); - subscribe_dialog = NULL; - } + gtk_object_unref (subscribe_dialog); + subscribe_dialog = NULL; } void @@ -3099,8 +3333,8 @@ manage_subscriptions (BonoboUIComponent *uih, void *user_data, const char *path) { if (!subscribe_dialog) { subscribe_dialog = subscribe_dialog_new (); - g_signal_connect (SUBSCRIBE_DIALOG (subscribe_dialog)->app, "destroy", - G_CALLBACK (subscribe_dialog_destroy), NULL); + gtk_signal_connect (GTK_OBJECT (SUBSCRIBE_DIALOG (subscribe_dialog)->app), "destroy", + subscribe_dialog_destroy, NULL); subscribe_dialog_show (subscribe_dialog); } else { @@ -3116,7 +3350,7 @@ local_configure_done(const char *uri, CamelFolder *folder, void *data) FolderBrowser *fb = data; if (FOLDER_BROWSER_IS_DESTROYED (fb)) { - g_object_unref(fb); + gtk_object_unref((GtkObject *)fb); return; } @@ -3124,7 +3358,7 @@ local_configure_done(const char *uri, CamelFolder *folder, void *data) folder = fb->folder; message_list_set_folder(fb->message_list, folder, FALSE); - g_object_unref(fb); + gtk_object_unref((GtkObject *)fb); } void @@ -3140,7 +3374,7 @@ configure_folder (BonoboUIComponent *uih, void *user_data, const char *path) vfolder_edit_rule (fb->uri); } else { message_list_set_folder(fb->message_list, NULL, FALSE); - g_object_ref((GtkObject *)fb); + gtk_object_ref((GtkObject *)fb); mail_local_reconfigure_folder(fb->uri, local_configure_done, fb); } } @@ -3223,7 +3457,7 @@ stop_threads (BonoboUIComponent *uih, void *user_data, const char *path) static void empty_trash_expunged_cb (CamelFolder *folder, void *data) { - camel_object_unref (folder); + camel_object_unref (CAMEL_OBJECT (folder)); } void diff --git a/mail/mail-composer-prefs.c b/mail/mail-composer-prefs.c index 647552af73..8e6cbb54f8 100644 --- a/mail/mail-composer-prefs.c +++ b/mail/mail-composer-prefs.c @@ -25,15 +25,16 @@ #include <config.h> #endif -#include <string.h> - #include "mail-composer-prefs.h" #include "composer/e-msg-composer.h" +#include <gtk/gtksignal.h> + #include <bonobo/bonobo-generic-factory.h> +#include <bonobo/bonobo-object-client.h> #include <gal/widgets/e-gui-utils.h> -#include <gal/util/e-iconv.h> +#include <gal/widgets/e-unicode.h> #include "widgets/misc/e-charset-picker.h" @@ -47,30 +48,30 @@ static void mail_composer_prefs_class_init (MailComposerPrefsClass *class); static void mail_composer_prefs_init (MailComposerPrefs *dialog); static void mail_composer_prefs_destroy (GtkObject *obj); -static void mail_composer_prefs_finalise (GObject *obj); +static void mail_composer_prefs_finalise (GtkObject *obj); static void sig_event_client (MailConfigSigEvent event, MailConfigSignature *sig, MailComposerPrefs *prefs); static GtkVBoxClass *parent_class = NULL; -GType +GtkType mail_composer_prefs_get_type (void) { - static GType type = 0; + static GtkType type = 0; if (!type) { - static const GTypeInfo info = { - sizeof (MailComposerPrefsClass), - NULL, NULL, - (GClassInitFunc) mail_composer_prefs_class_init, - NULL, NULL, + GtkTypeInfo type_info = { + "MailComposerPrefs", sizeof (MailComposerPrefs), - 0, - (GInstanceInitFunc) mail_composer_prefs_init, + sizeof (MailComposerPrefsClass), + (GtkClassInitFunc) mail_composer_prefs_class_init, + (GtkObjectInitFunc) mail_composer_prefs_init, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL }; - type = g_type_register_static(gtk_vbox_get_type (), "MailComposerPrefs", &info, 0); + type = gtk_type_unique (gtk_vbox_get_type (), &type_info); } return type; @@ -79,13 +80,15 @@ mail_composer_prefs_get_type (void) static void mail_composer_prefs_class_init (MailComposerPrefsClass *klass) { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); + GtkObjectClass *object_class; - parent_class = g_type_class_ref (gtk_vbox_get_type ()); + object_class = (GtkObjectClass *) klass; + parent_class = gtk_type_class (gtk_vbox_get_type ()); object_class->destroy = mail_composer_prefs_destroy; - gobject_class->finalize = mail_composer_prefs_finalise; + object_class->finalize = mail_composer_prefs_finalise; + /* override methods */ + } static void @@ -97,27 +100,28 @@ mail_composer_prefs_init (MailComposerPrefs *composer_prefs) } static void -mail_composer_prefs_finalise (GObject *obj) +mail_composer_prefs_finalise (GtkObject *obj) { MailComposerPrefs *prefs = (MailComposerPrefs *) obj; - g_object_unref ((prefs->gui)); - g_object_unref ((prefs->pman)); - g_object_unref (prefs->enabled_pixbuf); + gtk_object_unref (GTK_OBJECT (prefs->gui)); + gtk_object_unref (GTK_OBJECT (prefs->pman)); + gdk_pixbuf_unref (prefs->enabled_pixbuf); gdk_pixmap_unref (prefs->mark_pixmap); - g_object_unref (prefs->mark_bitmap); - - G_OBJECT_CLASS (parent_class)->finalize (obj); + gdk_bitmap_unref (prefs->mark_bitmap); + + ((GtkObjectClass *)(parent_class))->finalize (obj); } static void mail_composer_prefs_destroy (GtkObject *obj) { MailComposerPrefs *prefs = (MailComposerPrefs *) obj; - + mail_config_signature_unregister_client ((MailConfigSignatureClient) sig_event_client, prefs); - GTK_OBJECT_CLASS (parent_class)->destroy (obj); + if (GTK_OBJECT_CLASS (parent_class)) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (obj); } static void @@ -125,7 +129,7 @@ attach_style_info (GtkWidget *item, gpointer user_data) { int *style = user_data; - g_object_set_data ((GObject *) item, "style", GINT_TO_POINTER (*style)); + gtk_object_set_data (GTK_OBJECT (item), "style", GINT_TO_POINTER (*style)); (*style)++; } @@ -159,7 +163,8 @@ option_menu_connect (GtkOptionMenu *omenu, gpointer user_data) items = GTK_MENU_SHELL (menu)->children; while (items) { item = items->data; - g_signal_connect (item, "activate", G_CALLBACK (menu_changed), user_data); + gtk_signal_connect (GTK_OBJECT (item), "activate", + menu_changed, user_data); items = items->next; } } @@ -173,7 +178,7 @@ sig_load_preview (MailComposerPrefs *prefs, MailConfigSignature *sig) gtk_html_load_from_string (GTK_HTML (prefs->sig_preview), " ", 1); return; } - + if (sig->script) str = mail_config_signature_run_script (sig->script); else @@ -214,7 +219,7 @@ sig_edit (GtkWidget *widget, MailComposerPrefs *prefs) if (sig->filename && *sig->filename) mail_signature_editor (sig); else - e_notice (GTK_WINDOW (prefs), GTK_MESSAGE_ERROR, + e_notice (GTK_WINDOW (prefs), GNOME_MESSAGE_BOX_ERROR, _("Please specify signature filename\nin Advanced section of signature settings.")); } @@ -228,10 +233,16 @@ mail_composer_prefs_new_signature (MailComposerPrefs *prefs, gboolean html, cons sig = mail_config_signature_add (html, script); if (prefs) { - if (sig->name) - name[0] = g_strconcat (sig->name, " ", _("[script]"), NULL); - else - name[0] = g_strdup (_("[script]")); + if (!(name[0] = e_utf8_to_gtk_string (GTK_WIDGET (prefs->sig_clist), sig->name))) + name[0] = g_strdup (""); + + if (sig->script) { + char *tmp; + + tmp = name[0]; + name[0] = g_strconcat (tmp, _(" [script]"), NULL); + g_free (tmp); + } row = gtk_clist_append (prefs->sig_clist, name); gtk_clist_set_row_data (prefs->sig_clist, row, sig); @@ -270,43 +281,39 @@ sig_add (GtkWidget *widget, MailComposerPrefs *prefs) } static void -sig_add_script_response (GtkWidget *widget, int button, MailComposerPrefs *prefs) +sig_add_script_add (GtkWidget *widget, MailComposerPrefs *prefs) { - const char *script, *name; - GtkWidget *dialog; + char *script, *name; GtkWidget *entry; - if (button == GTK_RESPONSE_ACCEPT) { - entry = glade_xml_get_widget (prefs->sig_script_gui, "fileentry_add_script_script"); - script = gtk_entry_get_text (GTK_ENTRY (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (entry)))); + entry = glade_xml_get_widget (prefs->sig_script_gui, "fileentry_add_script_script"); + script = gtk_entry_get_text (GTK_ENTRY (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (entry)))); + + entry = glade_xml_get_widget (prefs->sig_script_gui, "entry_add_script_name"); + name = e_utf8_gtk_entry_get_text (GTK_ENTRY (entry)); + if (script && *script) { + struct stat st; - entry = glade_xml_get_widget (prefs->sig_script_gui, "entry_add_script_name"); - name = gtk_entry_get_text (GTK_ENTRY (entry)); - if (script && *script) { - struct stat st; + if (!stat (script, &st) + && S_ISREG (st.st_mode) && (st.st_mode & (S_IXOTH | S_IXGRP | S_IXUSR))) { + MailConfigSignature *sig; + + sig = mail_composer_prefs_new_signature (prefs, TRUE, script); + mail_config_signature_set_name (sig, name); + g_free (name); + gtk_widget_hide (prefs->sig_script_dialog); - if (!stat (script, &st) && S_ISREG (st.st_mode) && (st.st_mode & (S_IXOTH | S_IXGRP | S_IXUSR))) { - MailConfigSignature *sig; - - sig = mail_composer_prefs_new_signature (prefs, TRUE, script); - mail_config_signature_set_name (sig, name); - gtk_widget_hide (prefs->sig_script_dialog); - - return; - } + return; } - - dialog = gtk_message_dialog_new (GTK_WINDOW (prefs->sig_script_dialog), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - "%s", _("You must specify a valid script name.")); - - gtk_dialog_run ((GtkDialog *) dialog); - gtk_widget_destroy (dialog); } - - gtk_widget_hide (widget); + gnome_dialog_run_and_close (GNOME_DIALOG (gnome_ok_dialog_parented (_("Please specify a valid script name"), + GTK_WINDOW (prefs->sig_script_dialog)))); +} + +static void +sig_add_script_cancel (GtkWidget *widget, MailComposerPrefs *prefs) +{ + gnome_dialog_close (GNOME_DIALOG (prefs->sig_script_dialog)); } static void @@ -347,21 +354,23 @@ sig_row_unselect (GtkCList *clist, int row, int col, GdkEvent *event, MailCompos static void sig_fill_clist (GtkCList *clist) { - char *name[1]; GList *l; + char *name[1]; int row; gtk_clist_freeze (clist); for (l = mail_config_get_signature_list (); l; l = l->next) { - name[0] = ((MailConfigSignature *) l->data)->name; - if (((MailConfigSignature *) l->data)->script) - name[0] = g_strconcat (name[0], " ", _("[script]"), NULL); - else - name[0] = g_strdup (name[0]); - + name[0] = e_utf8_to_gtk_string (GTK_WIDGET (clist), ((MailConfigSignature *) l->data)->name); + if (((MailConfigSignature *) l->data)->script) { + char *tmp; + + tmp = name [0]; + name[0] = g_strconcat (name[0], _(" [script]"), NULL); + g_free (tmp); + } row = gtk_clist_append (clist, name); gtk_clist_set_row_data (clist, row, l->data); - g_free (name[0]); + g_free (name [0]); } gtk_clist_thaw (clist); } @@ -370,8 +379,6 @@ static void url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle) { GtkHTMLStreamStatus status; - char buf[128]; - ssize_t size; int fd; if (!strncmp (url, "file:", 5)) @@ -380,12 +387,14 @@ url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle) fd = open (url, O_RDONLY); status = GTK_HTML_STREAM_OK; if (fd != -1) { - while ((size = read (fd, buf, sizeof (buf)))) { + ssize_t size; + void *buf = alloca (1 << 7); + while ((size = read (fd, buf, 1 << 7))) { if (size == -1) { status = GTK_HTML_STREAM_ERROR; break; } else - gtk_html_write (html, handle, buf, size); + gtk_html_write (html, handle, (const gchar *) buf, size); } } else status = GTK_HTML_STREAM_ERROR; @@ -396,18 +405,24 @@ url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle) static void sig_event_client (MailConfigSigEvent event, MailConfigSignature *sig, MailComposerPrefs *prefs) { - char *text; + char *tmp, *tmp1; switch (event) { case MAIL_CONFIG_SIG_EVENT_NAME_CHANGED: d(printf ("accounts NAME CHANGED\n")); - if (sig->script) - text = g_strconcat (sig->name, " ", _("[script]"), NULL); - else - text = g_strdup (sig->name); - - gtk_clist_set_text (GTK_CLIST (prefs->sig_clist), sig->id, 0, text); - g_free (text); + tmp = e_utf8_to_gtk_string (GTK_WIDGET (prefs->sig_clist), sig->name); + if (sig->script) { + tmp1 = tmp; + tmp = g_strconcat (tmp, _(" [script]"), NULL); + g_free (tmp1); + } + gtk_clist_set_text (GTK_CLIST (prefs->sig_clist), sig->id, 0, tmp); + g_free (tmp); + if (sig == sig_current_sig (prefs)) { + prefs->sig_switch = TRUE; + /*e_utf8_gtk_entry_set_text (GTK_ENTRY (prefs->sig_name), sig->name);*/ + prefs->sig_switch = FALSE; + } break; case MAIL_CONFIG_SIG_EVENT_CONTENT_CHANGED: d(printf ("accounts CONTENT CHANGED\n")); @@ -650,9 +665,9 @@ spell_language_enable (GtkWidget *widget, MailComposerPrefs *prefs) GList *sel = GTK_CLIST (prefs->language)->selection; if (sel) { - int row = GPOINTER_TO_INT (sel->data); GdkPixmap *pmap = NULL; GdkBitmap *bmap; + int row = GPOINTER_TO_INT (sel->data); gtk_clist_get_pixmap (GTK_CLIST (prefs->language), row, 0, &pmap, &bmap); if (pmap) { @@ -678,7 +693,7 @@ spell_language_button_press (GtkWidget *widget, GdkEventButton *event, MailCompo GdkPixmap *pmap = NULL; GdkBitmap *bmap; - g_signal_stop_emission_by_name (widget, "button_press_event"); + gtk_signal_emit_stop_by_name (GTK_OBJECT (widget), "button_press_event"); gtk_clist_get_pixmap (GTK_CLIST (prefs->language), row, 0, &pmap, &bmap); if (pmap) @@ -707,9 +722,9 @@ spell_setup (MailComposerPrefs *prefs) char *texts[2]; texts[0] = NULL; - texts[1] = _(prefs->language_seq->_buffer[i].name); + texts[1] = _(prefs->language_seq->_buffer [i].name); gtk_clist_append (GTK_CLIST (prefs->language), texts); - gtk_clist_set_row_data (GTK_CLIST (prefs->language), i, prefs->language_seq->_buffer[i].abrev); + gtk_clist_set_row_data (GTK_CLIST (prefs->language), i, prefs->language_seq->_buffer [i].abrev); } } gtk_clist_thaw (GTK_CLIST (prefs->language)); @@ -717,37 +732,40 @@ spell_setup (MailComposerPrefs *prefs) spell_load_values (prefs); spell_set_ui (prefs); - glade_xml_signal_connect_data (prefs->gui, "spellColorSet", G_CALLBACK (spell_color_set), prefs); + glade_xml_signal_connect_data (prefs->gui, "spellColorSet", GTK_SIGNAL_FUNC (spell_color_set), prefs); glade_xml_signal_connect_data (prefs->gui, "spellLanguageSelectRow", - G_CALLBACK (spell_language_select_row), prefs); + GTK_SIGNAL_FUNC (spell_language_select_row), prefs); glade_xml_signal_connect_data (prefs->gui, "spellLanguageUnselectRow", - G_CALLBACK (spell_language_unselect_row), prefs); - glade_xml_signal_connect_data (prefs->gui, "spellLanguageEnable", G_CALLBACK (spell_language_enable), prefs); + GTK_SIGNAL_FUNC (spell_language_unselect_row), prefs); + glade_xml_signal_connect_data (prefs->gui, "spellLanguageEnable", GTK_SIGNAL_FUNC (spell_language_enable), prefs); - g_signal_connect (prefs->language, "button_press_event", G_CALLBACK (spell_language_button_press), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->language), "button_press_event", spell_language_button_press, prefs); } static gboolean spell_setup_check_options (MailComposerPrefs *prefs) { + BonoboObjectClient *dictionary_client; GNOME_Spell_Dictionary dict; CORBA_Environment ev; char *dictionary_id; - + dictionary_id = "OAFIID:GNOME_Spell_Dictionary:" SPELL_API_VERSION; - dict = bonobo_activation_activate_from_id(dictionary_id, 0, NULL, NULL); - if (dict == CORBA_OBJECT_NIL) { + dictionary_client = bonobo_object_activate (dictionary_id, 0); + + if (!dictionary_client) { g_warning ("Cannot activate %s", dictionary_id); return FALSE; } + dict = bonobo_object_corba_objref (BONOBO_OBJECT (dictionary_client)); CORBA_exception_init (&ev); prefs->language_seq = GNOME_Spell_Dictionary_getLanguages (dict, &ev); if (ev._major != CORBA_NO_EXCEPTION) prefs->language_seq = NULL; CORBA_exception_free (&ev); - + if (prefs->language_seq == NULL) return FALSE; @@ -766,11 +784,8 @@ static void mail_composer_prefs_construct (MailComposerPrefs *prefs) { GtkWidget *toplevel, *widget, *menu, *info_pixmap; - GtkDialog *dialog; GladeXML *gui; - gboolean bool; int style; - char *buf; char *names[][2] = { { "live_spell_check", "chkEnableSpellChecking" }, { "magic_smileys_check", "chkAutoSmileys" }, @@ -780,9 +795,9 @@ mail_composer_prefs_construct (MailComposerPrefs *prefs) prefs->gconf = gconf_client_get_default (); - gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "composer_tab", NULL); + gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "composer_tab"); prefs->gui = gui; - prefs->sig_script_gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "vbox_add_script_signature", NULL); + prefs->sig_script_gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "vbox_add_script_signature"); /* get our toplevel widget */ toplevel = glade_xml_get_widget (gui, "toplevel"); @@ -797,42 +812,37 @@ mail_composer_prefs_construct (MailComposerPrefs *prefs) /* Default Behavior */ prefs->send_html = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkSendHTML")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/composer/send_html", NULL); - gtk_toggle_button_set_active (prefs->send_html, bool); - g_signal_connect (prefs->send_html, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->send_html, mail_config_get_send_html ()); + gtk_signal_connect (GTK_OBJECT (prefs->send_html), "toggled", + toggle_button_toggled, prefs); prefs->auto_smileys = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkAutoSmileys")); - /* FIXME: set active? */ - g_signal_connect (prefs->auto_smileys, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->auto_smileys), "toggled", + toggle_button_toggled, prefs); prefs->prompt_empty_subject = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptEmptySubject")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/empty_subject", NULL); - gtk_toggle_button_set_active (prefs->prompt_empty_subject, bool); - g_signal_connect (prefs->prompt_empty_subject, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->prompt_empty_subject, mail_config_get_prompt_empty_subject ()); + gtk_signal_connect (GTK_OBJECT (prefs->prompt_empty_subject), "toggled", + toggle_button_toggled, prefs); prefs->prompt_bcc_only = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptBccOnly")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/only_bcc", NULL); - gtk_toggle_button_set_active (prefs->prompt_bcc_only, bool); - g_signal_connect (prefs->prompt_bcc_only, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->prompt_bcc_only, mail_config_get_prompt_only_bcc ()); + gtk_signal_connect (GTK_OBJECT (prefs->prompt_bcc_only), "toggled", + toggle_button_toggled, prefs); prefs->charset = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuCharset")); - buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/composer/charset", NULL); - menu = e_charset_picker_new (buf ? buf : e_iconv_locale_charset ()); + menu = e_charset_picker_new (mail_config_get_default_charset ()); gtk_option_menu_set_menu (prefs->charset, GTK_WIDGET (menu)); option_menu_connect (prefs->charset, prefs); - g_free (buf); -#warning "gtkhtml prop manager" -#if 0 /* Spell Checking: GtkHTML part */ prefs->pman = GTK_HTML_PROPMANAGER (gtk_html_propmanager_new (NULL)); - g_signal_connect (prefs->pman, "changed", G_CALLBACK(toggle_button_toggled), prefs); - g_object_ref ((prefs->pman)); + gtk_signal_connect (GTK_OBJECT (prefs->pman), "changed", toggle_button_toggled, prefs); + gtk_object_ref (GTK_OBJECT (prefs->pman)); gtk_html_propmanager_set_names (prefs->pman, names); gtk_html_propmanager_set_gui (prefs->pman, gui, NULL); -#endif - + /* Spell Checking: GNOME Spell part */ prefs->colour = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, "colorpickerSpellCheckColor")); prefs->language = GTK_CLIST (glade_xml_get_widget (gui, "clistSpellCheckLanguage")); @@ -840,7 +850,7 @@ mail_composer_prefs_construct (MailComposerPrefs *prefs) info_pixmap = glade_xml_get_widget (gui, "pixmapSpellInfo"); gtk_clist_set_column_justification (prefs->language, 0, GTK_JUSTIFY_RIGHT); gtk_clist_set_column_auto_resize (prefs->language, 0, TRUE); - gtk_image_set_from_file(GTK_IMAGE (info_pixmap), EVOLUTION_IMAGES "/info-bulb.png"); + gnome_pixmap_load_file (GNOME_PIXMAP (info_pixmap), EVOLUTION_IMAGES "/info-bulb.png"); if (!spell_setup_check_options (prefs)) { gtk_widget_hide (GTK_WIDGET (prefs->colour)); @@ -849,46 +859,48 @@ mail_composer_prefs_construct (MailComposerPrefs *prefs) /* Forwards and Replies */ prefs->forward_style = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuForwardStyle")); - style = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/format/forward_style", NULL); - gtk_option_menu_set_history (prefs->forward_style, style); + gtk_option_menu_set_history (prefs->forward_style, mail_config_get_default_forward_style ()); style = 0; gtk_container_foreach (GTK_CONTAINER (gtk_option_menu_get_menu (prefs->forward_style)), attach_style_info, &style); option_menu_connect (prefs->forward_style, prefs); prefs->reply_style = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuReplyStyle")); - style = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/format/reply_style", NULL); - gtk_option_menu_set_history (prefs->reply_style, style); + gtk_option_menu_set_history (prefs->reply_style, mail_config_get_default_reply_style ()); style = 0; gtk_container_foreach (GTK_CONTAINER (gtk_option_menu_get_menu (prefs->reply_style)), attach_style_info, &style); option_menu_connect (prefs->reply_style, prefs); /* Signatures */ - dialog = (GtkDialog *) gtk_dialog_new (); - prefs->sig_script_dialog = (GtkWidget *) dialog; - gtk_dialog_add_buttons (dialog, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); - gtk_window_set_title ((GtkWindow *) dialog, _("Add script signature")); - g_signal_connect (dialog, "response", G_CALLBACK (sig_add_script_response), prefs); - widget = glade_xml_get_widget (prefs->sig_script_gui, "vbox_add_script_signature"); - gtk_box_pack_start_defaults ((GtkBox *) dialog->vbox, widget); - prefs->sig_add = GTK_BUTTON (glade_xml_get_widget (gui, "cmdSignatureAdd")); - g_signal_connect (prefs->sig_add, "clicked", G_CALLBACK (sig_add), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->sig_add), "clicked", + GTK_SIGNAL_FUNC (sig_add), prefs); + + prefs->sig_script_dialog = gnome_dialog_new (_("Add script signature"), + _("Add Signature"), GNOME_STOCK_BUTTON_CANCEL, NULL); + gnome_dialog_close_hides (GNOME_DIALOG (prefs->sig_script_dialog), TRUE); + gtk_box_pack_start_defaults (GTK_BOX (GNOME_DIALOG (prefs->sig_script_dialog)->vbox), + glade_xml_get_widget (prefs->sig_script_gui, "vbox_add_script_signature")); + gnome_dialog_button_connect (GNOME_DIALOG (prefs->sig_script_dialog), 0, sig_add_script_add, prefs); + gnome_dialog_button_connect (GNOME_DIALOG (prefs->sig_script_dialog), 1, sig_add_script_cancel, prefs); - glade_xml_signal_connect_data (gui, "cmdSignatureAddScriptClicked", G_CALLBACK(sig_add_script), prefs); + glade_xml_signal_connect_data (gui, "cmdSignatureAddScriptClicked", sig_add_script, prefs); prefs->sig_edit = GTK_BUTTON (glade_xml_get_widget (gui, "cmdSignatureEdit")); - g_signal_connect (prefs->sig_edit, "clicked", G_CALLBACK (sig_edit), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->sig_edit), "clicked", + GTK_SIGNAL_FUNC (sig_edit), prefs); prefs->sig_delete = GTK_BUTTON (glade_xml_get_widget (gui, "cmdSignatureDelete")); - g_signal_connect (prefs->sig_delete, "clicked", G_CALLBACK (sig_delete), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->sig_delete), "clicked", + GTK_SIGNAL_FUNC (sig_delete), prefs); prefs->sig_clist = GTK_CLIST (glade_xml_get_widget (gui, "clistSignatures")); sig_fill_clist (prefs->sig_clist); - g_signal_connect (prefs->sig_clist, "select_row", G_CALLBACK (sig_row_select), prefs); - g_signal_connect (prefs->sig_clist, "unselect_row", G_CALLBACK (sig_row_unselect), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->sig_clist), "select_row", + GTK_SIGNAL_FUNC (sig_row_select), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->sig_clist), "unselect_row", + GTK_SIGNAL_FUNC (sig_row_unselect), prefs); if (mail_config_get_signature_list () == NULL) { gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_delete, FALSE); gtk_widget_set_sensitive ((GtkWidget *) prefs->sig_edit, FALSE); @@ -897,7 +909,7 @@ mail_composer_prefs_construct (MailComposerPrefs *prefs) /* preview GtkHTML widget */ widget = glade_xml_get_widget (gui, "scrolled-sig"); prefs->sig_preview = (GtkHTML *) gtk_html_new (); - g_signal_connect (prefs->sig_preview, "url_requested", G_CALLBACK (url_requested), NULL); + gtk_signal_connect (GTK_OBJECT (prefs->sig_preview), "url_requested", GTK_SIGNAL_FUNC (url_requested), NULL); gtk_widget_show (GTK_WIDGET (prefs->sig_preview)); gtk_container_add (GTK_CONTAINER (widget), GTK_WIDGET (prefs->sig_preview)); @@ -913,7 +925,7 @@ mail_composer_prefs_new (void) { MailComposerPrefs *new; - new = (MailComposerPrefs *) g_object_new (mail_composer_prefs_get_type (), NULL); + new = (MailComposerPrefs *) gtk_type_new (mail_composer_prefs_get_type ()); mail_composer_prefs_construct (new); return (GtkWidget *) new; @@ -930,45 +942,35 @@ mail_composer_prefs_apply (MailComposerPrefs *prefs) /* General tab */ /* Default Behavior */ - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/composer/send_html", - gtk_toggle_button_get_active (prefs->send_html), NULL); - - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/empty_subject", - gtk_toggle_button_get_active (prefs->prompt_empty_subject), NULL); - - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/only_bcc", - gtk_toggle_button_get_active (prefs->prompt_bcc_only), NULL); + mail_config_set_send_html (gtk_toggle_button_get_active (prefs->send_html)); + mail_config_set_prompt_empty_subject (gtk_toggle_button_get_active (prefs->prompt_empty_subject)); + mail_config_set_prompt_only_bcc (gtk_toggle_button_get_active (prefs->prompt_bcc_only)); menu = gtk_option_menu_get_menu (prefs->charset); - if (!(string = e_charset_picker_get_charset (menu))) - string = g_strdup (e_iconv_locale_charset ()); - - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/composer/charset", string, NULL); - g_free (string); + string = e_charset_picker_get_charset (menu); + if (string) { + mail_config_set_default_charset (string); + g_free (string); + } /* Spell Checking */ -#warning "gtkhtml propmanager" -#if 0 gtk_html_propmanager_apply (prefs->pman); -#endif spell_apply (prefs); /* Forwards and Replies */ menu = gtk_option_menu_get_menu (prefs->forward_style); item = gtk_menu_get_active (GTK_MENU (menu)); - val = GPOINTER_TO_INT (g_object_get_data ((GObject *) item, "style")); - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/format/forward_style", val, NULL); + val = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (item), "style")); + mail_config_set_default_forward_style (val); menu = gtk_option_menu_get_menu (prefs->reply_style); item = gtk_menu_get_active (GTK_MENU (menu)); - val = GPOINTER_TO_INT (g_object_get_data ((GObject *) item, "style")); - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/format/reply_style", val, NULL); + val = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (item), "style")); + mail_config_set_default_reply_style (val); /* Keyboard Shortcuts */ /* FIXME: implement me */ /* Signatures */ /* FIXME: implement me */ - - gconf_client_suggest_sync (prefs->gconf, NULL); } diff --git a/mail/mail-display.c b/mail/mail-display.c index 88fb1dc6eb..d4b213a475 100644 --- a/mail/mail-display.c +++ b/mail/mail-display.c @@ -33,16 +33,19 @@ #include <ctype.h> #include <fcntl.h> #include <errno.h> -#include <string.h> +#include <libgnorba/gnorba.h> +#include <libgnomevfs/gnome-vfs-mime-info.h> #include <libgnomevfs/gnome-vfs-mime-handlers.h> #include <libgnomevfs/gnome-vfs.h> #include <bonobo/bonobo-control-frame.h> #include <bonobo/bonobo-stream-memory.h> +#include <bonobo/bonobo-ui-toolbar-icon.h> #include <bonobo/bonobo-widget.h> #include <bonobo/bonobo-socket.h> #include <gdk-pixbuf/gdk-pixbuf.h> #include <gdk-pixbuf/gdk-pixbuf-loader.h> #include <gal/util/e-util.h> +#include <gal/util/e-unicode-i18n.h> #include <gal/widgets/e-popup-menu.h> #include <gal/widgets/e-unicode.h> #include <gtk/gtkinvisible.h> @@ -54,7 +57,6 @@ #include <gtkhtml/htmlinterval.h> #include <gtkhtml/gtkhtml-stream.h> #include <libsoup/soup-message.h> -#include <libgnome/gnome-program.h> #include "e-util/e-html-utils.h" #include "e-util/e-mktemp.h" @@ -173,25 +175,31 @@ write_data_written(CamelMimePart *part, char *name, int done, void *data) static gboolean write_data_to_file (CamelMimePart *part, const char *name, gboolean unique) { - int fd, ret = FALSE; + int fd; + int ret = FALSE; g_return_val_if_fail (CAMEL_IS_MIME_PART (part), FALSE); fd = open (name, O_WRONLY | O_CREAT | O_EXCL, 0666); if (fd == -1 && errno == EEXIST && !unique) { GtkWidget *dlg; - int button; + GtkWidget *text; + char *msg; - dlg = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, - _("File `%s' already exists.\nOverwrite it?"), - name); + dlg = gnome_dialog_new (_("Overwrite file?"), + GNOME_STOCK_BUTTON_YES, + GNOME_STOCK_BUTTON_NO, + NULL); - g_object_set (dlg, "title", _("Overwrite file?"), "allow_grow", TRUE, NULL); - button = gtk_dialog_run ((GtkDialog *) dlg); - gtk_widget_destroy (dlg); - g_object_unref (dlg); + msg = g_strdup_printf (_("File `%s' already exists.\nOverwrite it?"), name); + text = gtk_label_new (msg); + g_free (msg); - if (button != GTK_RESPONSE_YES) + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dlg)->vbox), text, TRUE, TRUE, 4); + gtk_window_set_policy (GTK_WINDOW (dlg), FALSE, TRUE, FALSE); + gtk_widget_show (text); + + if (gnome_dialog_run_and_close (GNOME_DIALOG (dlg)) != 0) return FALSE; } @@ -245,7 +253,7 @@ save_data_cb (GtkWidget *widget, gpointer user_data) FALSE); /* preserve the pathname */ - dir = g_path_get_dirname (gtk_file_selection_get_filename (file_select)); + dir = g_dirname (gtk_file_selection_get_filename (file_select)); mail_config_set_last_filesel_dir (dir); g_free (dir); @@ -253,9 +261,9 @@ save_data_cb (GtkWidget *widget, gpointer user_data) } static void -save_destroy_cb (CamelMimePart *part, GObject *deadbeef) +save_destroy_cb (GtkWidget *widget, CamelMimePart *part) { - camel_object_unref (part); + camel_object_unref (CAMEL_OBJECT (part)); } static gboolean @@ -292,9 +300,9 @@ mail_display_jump_to_anchor (MailDisplay *md, const char *url) static void on_link_clicked (GtkHTML *html, const char *url, MailDisplay *md) { - if (!g_ascii_strncasecmp (url, "news:", 5) || !g_ascii_strncasecmp (url, "nntp:", 5)) { + if (!g_strncasecmp (url, "news:", 5) || !g_strncasecmp (url, "nntp:", 5)) { g_warning ("Can't handle news URLs yet."); - } else if (!g_ascii_strncasecmp (url, "mailto:", 7)) { + } else if (!g_strncasecmp (url, "mailto:", 7)) { send_to_url (url); } else if (*url == '#') { mail_display_jump_to_anchor (md, url); @@ -307,7 +315,7 @@ static void save_part (CamelMimePart *part) { GtkFileSelection *file_select; - char *filename, *base; + char *filename; g_return_if_fail (part != NULL); camel_object_ref (CAMEL_OBJECT (part)); @@ -318,28 +326,26 @@ save_part (CamelMimePart *part) gtk_file_selection_new (_("Save Attachment"))); gtk_file_selection_set_filename (file_select, filename); /* set the GtkEntry with the locale filename by breaking abstraction */ - base = g_path_get_basename(filename); - gtk_entry_set_text(GTK_ENTRY (file_select->selection_entry), base); - g_free(base); + e_utf8_gtk_entry_set_text (GTK_ENTRY (file_select->selection_entry), g_basename (filename)); g_free (filename); - g_signal_connect(file_select->ok_button, "clicked", - G_CALLBACK (save_data_cb), part); - /* FIXME: deprecated */ + gtk_signal_connect (GTK_OBJECT (file_select->ok_button), "clicked", + GTK_SIGNAL_FUNC (save_data_cb), part); gtk_signal_connect_object (GTK_OBJECT (file_select->cancel_button), "clicked", - G_CALLBACK (gtk_widget_destroy), + GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (file_select)); - g_object_weak_ref ((GObject *) file_select, (GWeakNotify) save_destroy_cb, part); - + gtk_signal_connect (GTK_OBJECT (file_select), "destroy", + GTK_SIGNAL_FUNC (save_destroy_cb), part); + gtk_widget_show (GTK_WIDGET (file_select)); } static void save_cb (GtkWidget *widget, gpointer user_data) { - CamelMimePart *part = g_object_get_data((user_data), "CamelMimePart"); + CamelMimePart *part = gtk_object_get_data (GTK_OBJECT (user_data), "CamelMimePart"); save_part (part); } @@ -347,18 +353,18 @@ save_cb (GtkWidget *widget, gpointer user_data) static void launch_cb (GtkWidget *widget, gpointer user_data) { - CamelMimePart *part = g_object_get_data(user_data, "CamelMimePart"); + CamelMimePart *part = gtk_object_get_data (user_data, "CamelMimePart"); MailMimeHandler *handler; GList *apps, *children, *c; GnomeVFSMimeApplication *app; char *command, *filename; const char *tmpdir; - handler = mail_lookup_handler (g_object_get_data(user_data, "mime_type")); + handler = mail_lookup_handler (gtk_object_get_data (user_data, "mime_type")); g_return_if_fail (handler != NULL && handler->applications != NULL); /* Yum. Too bad EPopupMenu doesn't allow per-item closures. */ - children = gtk_container_get_children(GTK_CONTAINER (widget->parent)); + children = gtk_container_children (GTK_CONTAINER (widget->parent)); g_return_if_fail (children != NULL && children->next != NULL && children->next->next != NULL); for (c = children->next->next, apps = handler->applications; c && apps; c = c->next, apps = apps->next) { @@ -372,29 +378,21 @@ launch_cb (GtkWidget *widget, gpointer user_data) tmpdir = e_mkdtemp ("evolution.XXXXXX"); if (!tmpdir) { - GtkDialog *dialogue; - - dialogue = (GtkDialog *)gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_RESPONSE_CLOSE, - _("Could not create temporary directory: %s"), - g_strerror (errno)); - /* FIXME: this should be async */ - gtk_dialog_run(dialogue); - gtk_widget_destroy((GtkWidget *)dialogue); + char *msg = g_strdup_printf (_("Could not create temporary directory: %s"), + g_strerror (errno)); + gnome_error_dialog (msg); + g_free (msg); return; } filename = make_safe_filename (tmpdir, part); if (!write_data_to_file (part, filename, TRUE)) { - GtkDialog *dialogue; - - dialogue = (GtkDialog *)gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_RESPONSE_CLOSE, - _("Could not create temporary file '%s': %s"), - filename, g_strerror (errno)); - /* FIXME: this should be async */ - gtk_dialog_run(dialogue); - gtk_widget_destroy((GtkWidget *)dialogue); - g_free(filename); + char *msg = g_strdup_printf (_("Could not create temporary file '%s': %s"), + filename, g_strerror (errno)); + gnome_error_dialog (msg); + g_free (filename); + g_free (msg); return; } @@ -410,8 +408,8 @@ launch_cb (GtkWidget *widget, gpointer user_data) static void inline_cb (GtkWidget *widget, gpointer user_data) { - MailDisplay *md = g_object_get_data(user_data, "MailDisplay"); - CamelMimePart *part = g_object_get_data(user_data, "CamelMimePart"); + MailDisplay *md = gtk_object_get_data (user_data, "MailDisplay"); + CamelMimePart *part = gtk_object_get_data (user_data, "CamelMimePart"); mail_part_toggle_displayed (part, md); mail_display_queue_redisplay (md); @@ -422,7 +420,7 @@ button_press (GtkWidget *widget, CamelMimePart *part) { MailDisplay *md; - md = g_object_get_data(G_OBJECT(widget), "MailDisplay"); + md = gtk_object_get_data (GTK_OBJECT (widget), "MailDisplay"); if (md == NULL) { g_warning ("No MailDisplay on button!"); return; @@ -436,9 +434,9 @@ static gboolean pixmap_press (GtkWidget *widget, GdkEventButton *event, EScrollFrame *user_data) { EPopupMenu *menu; - EPopupMenu save_item = E_POPUP_ITEM (N_("Save Attachment..."), G_CALLBACK (save_cb), 0); - EPopupMenu view_item = E_POPUP_ITEM (N_("View Inline"), G_CALLBACK (inline_cb), 2); - EPopupMenu open_item = E_POPUP_ITEM (N_("Open in %s..."), G_CALLBACK (launch_cb), 1); + EPopupMenu save_item = E_POPUP_ITEM (N_("Save Attachment..."), GTK_SIGNAL_FUNC (save_cb), 0); + EPopupMenu view_item = E_POPUP_ITEM (N_("View Inline"), GTK_SIGNAL_FUNC (inline_cb), 2); + EPopupMenu open_item = E_POPUP_ITEM (N_("Open in %s..."), GTK_SIGNAL_FUNC (launch_cb), 1); MailDisplay *md; CamelMimePart *part; MailMimeHandler *handler; @@ -460,11 +458,12 @@ pixmap_press (GtkWidget *widget, GdkEventButton *event, EScrollFrame *user_data) /* Stop the signal, since we don't want the button's class method to mess up our popup. */ - g_signal_stop_emission_by_name(widget, "button_press_event"); + gtk_signal_emit_stop_by_name (GTK_OBJECT (widget), "button_press_event"); + + part = gtk_object_get_data (GTK_OBJECT (widget), "CamelMimePart"); + handler = mail_lookup_handler (gtk_object_get_data (GTK_OBJECT (widget), + "mime_type")); - part = g_object_get_data(G_OBJECT(widget), "CamelMimePart"); - handler = mail_lookup_handler (g_object_get_data(G_OBJECT(widget), "mime_type")); - if (handler && handler->applications) nitems = g_list_length (handler->applications) + 2; else @@ -478,22 +477,26 @@ pixmap_press (GtkWidget *widget, GdkEventButton *event, EScrollFrame *user_data) /* Inline view item */ memcpy (&menu[1], &view_item, sizeof (menu[1])); if (handler && handler->builtin) { - md = g_object_get_data(G_OBJECT(widget), "MailDisplay"); - + md = gtk_object_get_data (GTK_OBJECT (widget), "MailDisplay"); + if (!mail_part_is_displayed_inline (part, md)) { if (handler->component) { - Bonobo_ActivationProperty *prop; + OAF_Property *prop; char *name; - prop = bonobo_server_info_prop_find(handler->component, "name"); + prop = oaf_server_info_prop_find ( + handler->component, "name"); if (!prop) { - prop = bonobo_server_info_prop_find(handler->component, "description"); + prop = oaf_server_info_prop_find ( + handler->component, + "description"); } - if (prop && prop->v._d == Bonobo_ACTIVATION_P_STRING) + if (prop && prop->v._d == OAF_P_STRING) name = prop->v._u.value_string; else name = "bonobo"; - menu[1].name = g_strdup_printf(_("View Inline (via %s)"), name); + menu[1].name = g_strdup_printf ( + _("View Inline (via %s)"), name); } else menu[1].name = g_strdup (_(menu[1].name)); } else @@ -517,7 +520,8 @@ pixmap_press (GtkWidget *widget, GdkEventButton *event, EScrollFrame *user_data) } } else { memcpy (&menu[2], &open_item, sizeof (menu[2])); - menu[2].name = g_strdup_printf (_(menu[2].name), _("External Viewer")); + menu[2].name = g_strdup_printf (_(menu[2].name), + _("External Viewer")); mask |= 1; } @@ -536,43 +540,48 @@ pixbuf_for_mime_type (const char *mime_type) char *filename = NULL; GdkPixbuf *pixbuf = NULL; - icon_name = gnome_vfs_mime_get_icon(mime_type); - + /* GnomeVFS changed the key from icon-filename to + icon_filename, so check icon_filename first and if that + fails, fall back to the old key name */ + if (!(icon_name = gnome_vfs_mime_get_value (mime_type, "icon_filename"))) + icon_name = gnome_vfs_mime_get_value (mime_type, "icon-filename"); + if (icon_name) { if (*icon_name == '/') { - pixbuf = gdk_pixbuf_new_from_file (icon_name, NULL); + pixbuf = gdk_pixbuf_new_from_file (icon_name); if (pixbuf) return pixbuf; } - filename = gnome_program_locate_file (NULL, GNOME_FILE_DOMAIN_PIXMAP, icon_name, TRUE, NULL); + filename = gnome_pixmap_file (icon_name); if (!filename) { char *fm_icon; fm_icon = g_strdup_printf ("nautilus/%s", icon_name); - filename = gnome_program_locate_file (NULL, GNOME_FILE_DOMAIN_PIXMAP, fm_icon, TRUE, NULL); + filename = gnome_pixmap_file (fm_icon); if (!filename) { g_free (fm_icon); fm_icon = g_strdup_printf ("mc/%s", icon_name); - filename = gnome_program_locate_file (NULL, GNOME_FILE_DOMAIN_PIXMAP, fm_icon, TRUE, NULL); + filename = gnome_pixmap_file (fm_icon); } g_free (fm_icon); } if (filename) { - pixbuf = gdk_pixbuf_new_from_file (filename, NULL); + pixbuf = gdk_pixbuf_new_from_file (filename); g_free (filename); } } if (!pixbuf) { - filename = gnome_program_locate_file (NULL, GNOME_FILE_DOMAIN_PIXMAP, "gnome-unknown.png", TRUE, NULL); + filename = gnome_pixmap_file ("gnome-unknown.png"); if (filename) { - pixbuf = gdk_pixbuf_new_from_file (filename, NULL); + pixbuf = gdk_pixbuf_new_from_file (filename); g_free (filename); } else { g_warning ("Could not get any icon for %s!",mime_type); - pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)empty_xpm); + pixbuf = gdk_pixbuf_new_from_xpm_data ( + (const char **)empty_xpm); } } @@ -585,7 +594,7 @@ pixbuf_uncache (gpointer key) GdkPixbuf *pixbuf; pixbuf = g_hash_table_lookup (thumbnail_cache, key); - g_object_unref (pixbuf); + gdk_pixbuf_unref (pixbuf); g_hash_table_remove (thumbnail_cache, key); g_free (key); return FALSE; @@ -606,19 +615,20 @@ pixbuf_gen_idle (struct _PixbufLoader *pbl) width = gdk_pixbuf_get_width (mini); height = gdk_pixbuf_get_height (mini); - gtk_image_set_from_pixbuf((GtkImage *)pbl->pixmap, mini); - gtk_widget_set_size_request (pbl->pixmap, width, height); + bonobo_ui_toolbar_icon_set_pixbuf ( + BONOBO_UI_TOOLBAR_ICON (pbl->pixmap), mini); + gtk_widget_set_usize (pbl->pixmap, width, height); /* Restart the cache-cleaning timer */ g_source_remove_by_user_data (orig_key); g_timeout_add (5 * 60 * 1000, pixbuf_uncache, orig_key); if (pbl->loader) { - gdk_pixbuf_loader_close (pbl->loader, NULL); - g_object_unref (pbl->loader); - camel_object_unref (pbl->mstream); + gdk_pixbuf_loader_close (pbl->loader); + gtk_object_destroy (GTK_OBJECT (pbl->loader)); + camel_object_unref (CAMEL_OBJECT (pbl->mstream)); } - g_signal_handler_disconnect((pbl->eb), pbl->destroy_id); + gtk_signal_disconnect (GTK_OBJECT (pbl->eb), pbl->destroy_id); g_free (pbl->type); g_free (pbl->cid); g_free (pbl); @@ -631,11 +641,11 @@ pixbuf_gen_idle (struct _PixbufLoader *pbl) if (!GTK_IS_WIDGET (pbl->pixmap)) { /* Widget has died */ if (pbl->mstream) - camel_object_unref (pbl->mstream); + camel_object_unref (CAMEL_OBJECT (pbl->mstream)); if (pbl->loader) { - gdk_pixbuf_loader_close (pbl->loader, NULL); - g_object_unref (pbl->loader); + gdk_pixbuf_loader_close (pbl->loader); + gtk_object_destroy (GTK_OBJECT (pbl->loader)); } g_free (pbl->type); @@ -650,7 +660,7 @@ pixbuf_gen_idle (struct _PixbufLoader *pbl) len = camel_stream_read (pbl->mstream, tmp, 4096); if (len > 0) { - error = !gdk_pixbuf_loader_write (pbl->loader, tmp, len, NULL); + error = !gdk_pixbuf_loader_write (pbl->loader, tmp, len); if (!error) return TRUE; } else if (!camel_stream_eos (pbl->mstream)) @@ -661,7 +671,7 @@ pixbuf_gen_idle (struct _PixbufLoader *pbl) if (pbl->type) pixbuf = pixbuf_for_mime_type (pbl->type); else - pixbuf = gdk_pixbuf_new_from_file (EVOLUTION_ICONSDIR "/pgp-signature-nokey.png", NULL); + pixbuf = gdk_pixbuf_new_from_file (EVOLUTION_ICONSDIR "/pgp-signature-nokey.png"); } else pixbuf = gdk_pixbuf_loader_get_pixbuf (pbl->loader); @@ -682,20 +692,22 @@ pixbuf_gen_idle (struct _PixbufLoader *pbl) } } - mini = gdk_pixbuf_scale_simple (pixbuf, width, height, GDK_INTERP_BILINEAR); + mini = gdk_pixbuf_scale_simple (pixbuf, width, height, + GDK_INTERP_BILINEAR); if (error || !pbl->mstream) - g_object_unref (pixbuf); - gtk_image_set_from_pixbuf((GtkImage *)pbl->pixmap, mini); + gdk_pixbuf_unref (pixbuf); + bonobo_ui_toolbar_icon_set_pixbuf ( + BONOBO_UI_TOOLBAR_ICON (pbl->pixmap), mini); /* Add the pixbuf to the cache */ g_hash_table_insert (thumbnail_cache, pbl->cid, mini); g_timeout_add (5 * 60 * 1000, pixbuf_uncache, pbl->cid); - g_signal_handler_disconnect(pbl->eb, pbl->destroy_id); + gtk_signal_disconnect (GTK_OBJECT (pbl->eb), pbl->destroy_id); if (pbl->loader) { - gdk_pixbuf_loader_close (pbl->loader, NULL); - g_object_unref(pbl->loader); - camel_object_unref (pbl->mstream); + gdk_pixbuf_loader_close (pbl->loader); + gtk_object_unref (GTK_OBJECT (pbl->loader)); + camel_object_unref (CAMEL_OBJECT (pbl->mstream)); } g_free (pbl->type); g_free (pbl); @@ -711,11 +723,11 @@ embeddable_destroy_cb (GtkObject *embeddable, { g_idle_remove_by_data (pbl); if (pbl->mstream) - camel_object_unref (pbl->mstream); + camel_object_unref (CAMEL_OBJECT (pbl->mstream)); if (pbl->loader) { - gdk_pixbuf_loader_close (pbl->loader, NULL); - g_object_unref (pbl->loader); + gdk_pixbuf_loader_close (pbl->loader); + gtk_object_destroy (GTK_OBJECT (pbl->loader)); } g_free (pbl->type); @@ -735,8 +747,6 @@ get_embedded_for_component (const char *iid, MailDisplay *md) */ embedded = bonobo_widget_new_control (iid, NULL); if (embedded == NULL) { -#warning "what about bonobo_widget_new_subdoc?" -#if 0 /* * No control, try an embeddable instead. */ @@ -752,7 +762,6 @@ get_embedded_for_component (const char *iid, MailDisplay *md) return embedded; } -#endif } if (embedded == NULL) @@ -826,14 +835,14 @@ save_url (MailDisplay *md, const char *url) memstream = camel_stream_mem_new_with_buffer (ba->data, ba->len); wrapper = camel_data_wrapper_new (); camel_data_wrapper_construct_from_stream (wrapper, memstream); - camel_object_unref (memstream); + camel_object_unref (CAMEL_OBJECT (memstream)); part = camel_mime_part_new (); camel_medium_set_content_object (CAMEL_MEDIUM (part), wrapper); - camel_object_unref (wrapper); + camel_object_unref (CAMEL_OBJECT (wrapper)); camel_mime_part_set_filename (part, name); } } else { - camel_object_ref (part); + camel_object_ref (CAMEL_OBJECT (part)); } if (part) { @@ -847,7 +856,7 @@ save_url (MailDisplay *md, const char *url) } save_part (part); - camel_object_unref (part); + camel_object_unref (CAMEL_OBJECT (part)); return NULL; } @@ -870,7 +879,7 @@ drag_data_get_cb (GtkWidget *widget, switch (info) { case DND_TARGET_TYPE_TEXT_URI_LIST: /* Kludge around Nautilus requesting the same data many times */ - uri_list = g_object_get_data(G_OBJECT(widget), "uri-list"); + uri_list = gtk_object_get_data (GTK_OBJECT (widget), "uri-list"); if (uri_list) { gtk_selection_data_set (selection_data, selection_data->target, 8, uri_list, strlen (uri_list)); @@ -879,18 +888,15 @@ drag_data_get_cb (GtkWidget *widget, tmpdir = e_mkdtemp ("drag-n-drop-XXXXXX"); if (!tmpdir) { - GtkDialog *dialogue; - - dialogue = (GtkDialog *)gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_RESPONSE_CLOSE, - _("Could not create temporary directory: %s"), - g_strerror (errno)); - /* FIXME: this should be async */ - gtk_dialog_run(dialogue); - gtk_widget_destroy((GtkWidget *)dialogue); + char *msg; + + msg = g_strdup_printf (_("Could not create temporary directory: %s"), + g_strerror (errno)); + gnome_error_dialog (msg); + g_free (msg); } filename = camel_mime_part_get_filename (part); - /* This is the default filename used for dnd temporary target of attachment */ if (!filename) filename = _("Unknown"); @@ -904,7 +910,7 @@ drag_data_get_cb (GtkWidget *widget, gtk_selection_data_set (selection_data, selection_data->target, 8, uri_list, strlen (uri_list)); - g_object_set_data_full(G_OBJECT(widget), "uri-list", uri_list, g_free); + gtk_object_set_data_full (GTK_OBJECT (widget), "uri-list", uri_list, g_free); break; case DND_TARGET_TYPE_PART_MIME_TYPE: if (header_content_type_is (part->content_type, "text", "*")) { @@ -918,16 +924,19 @@ drag_data_get_cb (GtkWidget *widget, } } else { CamelDataWrapper *wrapper; - CamelStreamMem *cstream; + CamelStream *cstream; + GByteArray *ba; + + ba = g_byte_array_new (); - cstream = (CamelStreamMem *)camel_stream_mem_new(); + cstream = camel_stream_mem_new_with_byte_array (ba); wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - camel_data_wrapper_write_to_stream (wrapper, (CamelStream *)cstream); + camel_data_wrapper_write_to_stream (wrapper, cstream); gtk_selection_data_set (selection_data, selection_data->target, 8, - cstream->buffer->data, cstream->buffer->len); + ba->data, ba->len); - camel_object_unref (cstream); + camel_object_unref (CAMEL_OBJECT (cstream)); } break; default: @@ -942,10 +951,10 @@ drag_data_delete_cb (GtkWidget *widget, { char *uri_list; - uri_list = g_object_get_data(G_OBJECT(widget), "uri-list"); + uri_list = gtk_object_get_data (GTK_OBJECT (widget), "uri-list"); if (uri_list) { unlink (uri_list + 7); - g_object_set_data(G_OBJECT(widget), "uri-list", NULL); + gtk_object_set_data (GTK_OBJECT (widget), "uri-list", NULL); } } @@ -958,7 +967,7 @@ do_attachment_header (GtkHTML *html, GtkHTMLEmbedded *eb, struct _PixbufLoader *pbl; pbl = g_new0 (struct _PixbufLoader, 1); - if (g_ascii_strncasecmp (eb->type, "image/", 6) == 0) { + if (g_strncasecmp (eb->type, "image/", 6) == 0) { CamelDataWrapper *content; content = camel_medium_get_content_object (CAMEL_MEDIUM (part)); @@ -970,23 +979,25 @@ do_attachment_header (GtkHTML *html, GtkHTMLEmbedded *eb, } pbl->type = g_strdup (eb->type); pbl->cid = g_strdup (eb->classid + 6); - pbl->pixmap = gtk_image_new(); - gtk_widget_set_size_request (pbl->pixmap, 24, 24); + pbl->pixmap = bonobo_ui_toolbar_icon_new (); + gtk_widget_set_usize (pbl->pixmap, 24, 24); pbl->eb = eb; - pbl->destroy_id = g_signal_connect(G_OBJECT(eb), "destroy", G_CALLBACK(embeddable_destroy_cb), pbl); + pbl->destroy_id = gtk_signal_connect (GTK_OBJECT (eb), "destroy", + embeddable_destroy_cb, pbl); - g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc)pixbuf_gen_idle, pbl, NULL); + g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc)pixbuf_gen_idle, + pbl, NULL); mainbox = gtk_hbox_new (FALSE, 0); button = gtk_button_new (); GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS); - g_object_set_data(G_OBJECT(button), "MailDisplay", md); + gtk_object_set_data (GTK_OBJECT (button), "MailDisplay", md); handler = mail_lookup_handler (eb->type); if (handler && handler->builtin) - g_signal_connect (button, "clicked", - G_CALLBACK (button_press), part); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (button_press), part); /* Drag & Drop */ drag_types[DND_TARGET_TYPE_PART_MIME_TYPE].target = header_content_type_simple(part->content_type); @@ -995,20 +1006,21 @@ do_attachment_header (GtkHTML *html, GtkHTMLEmbedded *eb, gtk_drag_source_set (button, GDK_BUTTON1_MASK, drag_types, num_drag_types, GDK_ACTION_COPY); - g_signal_connect(G_OBJECT(button), "drag-data-get", G_CALLBACK(drag_data_get_cb), part); - g_signal_connect(G_OBJECT(button), "drag-data-delete", G_CALLBACK(drag_data_delete_cb), part); + gtk_signal_connect (GTK_OBJECT (button), "drag-data-get", + drag_data_get_cb, part); + gtk_signal_connect (GTK_OBJECT (button), "drag-data-delete", + drag_data_delete_cb, part); g_free (drag_types[DND_TARGET_TYPE_PART_MIME_TYPE].target); drag_types[DND_TARGET_TYPE_PART_MIME_TYPE].target = NULL; hbox = gtk_hbox_new (FALSE, 2); gtk_container_set_border_width (GTK_CONTAINER (hbox), 2); - - /* should this be a gtk_arrow? */ + if (handler && mail_part_is_displayed_inline (part, md)) - arrow = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_BUTTON); + arrow = gnome_stock_new_with_icon (GNOME_STOCK_PIXMAP_DOWN); else - arrow = gtk_image_new_from_stock(GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_BUTTON); + arrow = gnome_stock_new_with_icon (GNOME_STOCK_PIXMAP_FORWARD); gtk_box_pack_start (GTK_BOX (hbox), arrow, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), pbl->pixmap, TRUE, TRUE, 0); gtk_container_add (GTK_CONTAINER (button), hbox); @@ -1019,11 +1031,13 @@ do_attachment_header (GtkHTML *html, GtkHTMLEmbedded *eb, gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_ETCHED_IN)); - g_object_set_data(G_OBJECT(popup), "MailDisplay", md); - g_object_set_data(G_OBJECT(popup), "CamelMimePart", part); - g_object_set_data_full(G_OBJECT(popup), "mime_type", g_strdup (eb->type), (GDestroyNotify)g_free); + gtk_object_set_data (GTK_OBJECT (popup), "MailDisplay", md); + gtk_object_set_data (GTK_OBJECT (popup), "CamelMimePart", part); + gtk_object_set_data_full (GTK_OBJECT (popup), "mime_type", + g_strdup (eb->type), (GDestroyNotify)g_free); - g_signal_connect(popup, "button_press_event", G_CALLBACK (pixmap_press), md->scroll); + gtk_signal_connect (GTK_OBJECT (popup), "button_press_event", + GTK_SIGNAL_FUNC (pixmap_press), md->scroll); gtk_box_pack_start (GTK_BOX (mainbox), button, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (mainbox), popup, TRUE, TRUE, 0); @@ -1039,12 +1053,13 @@ do_external_viewer (GtkHTML *html, GtkHTMLEmbedded *eb, CamelMimePart *part, MailDisplay *md) { CamelDataWrapper *wrapper; - Bonobo_ServerInfo *component; + OAF_ServerInfo *component; GtkWidget *embedded; + BonoboObjectClient *server; Bonobo_PersistStream persist; CORBA_Environment ev; GByteArray *ba; - CamelStreamMem *cstream; + CamelStream *cstream; BonoboStream *bstream; component = gnome_vfs_mime_get_default_component (eb->type); @@ -1056,26 +1071,29 @@ do_external_viewer (GtkHTML *html, GtkHTMLEmbedded *eb, if (!embedded) return FALSE; - persist = (Bonobo_PersistStream) Bonobo_Unknown_queryInterface(bonobo_widget_get_objref (BONOBO_WIDGET (embedded)), - "IDL:Bonobo/PersistStream:1.0", NULL); + 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) { gtk_object_sink (GTK_OBJECT (embedded)); return FALSE; } /* Write the data to a CamelStreamMem... */ - cstream = (CamelStreamMem *)camel_stream_mem_new(); + ba = g_byte_array_new (); + cstream = camel_stream_mem_new_with_byte_array (ba); wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - camel_data_wrapper_write_to_stream (wrapper, (CamelStream *)cstream); + camel_data_wrapper_write_to_stream (wrapper, cstream); /* ...convert the CamelStreamMem to a BonoboStreamMem... */ - bstream = bonobo_stream_mem_create (cstream->buffer->data, cstream->buffer->len, TRUE, FALSE); - camel_object_unref (cstream); + bstream = bonobo_stream_mem_create (ba->data, ba->len, TRUE, FALSE); + camel_object_unref (CAMEL_OBJECT (cstream)); /* ...and hydrate the PersistStream from the BonoboStream. */ CORBA_exception_init (&ev); Bonobo_PersistStream_load (persist, - bonobo_object_corba_objref(BONOBO_OBJECT (bstream)), + bonobo_object_corba_objref ( + BONOBO_OBJECT (bstream)), eb->type, &ev); bonobo_object_unref (BONOBO_OBJECT (bstream)); Bonobo_Unknown_unref (persist, &ev); @@ -1104,17 +1122,20 @@ do_signature (GtkHTML *html, GtkHTMLEmbedded *eb, pbl = g_new0 (struct _PixbufLoader, 1); pbl->type = NULL; pbl->cid = g_strdup (eb->classid); - pbl->pixmap = gtk_image_new(); - gtk_widget_set_size_request (pbl->pixmap, 24, 24); + pbl->pixmap = bonobo_ui_toolbar_icon_new (); + gtk_widget_set_usize (pbl->pixmap, 24, 24); pbl->eb = eb; - pbl->destroy_id = g_signal_connect(eb, "destroy", G_CALLBACK(embeddable_destroy_cb), pbl); - - g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc)pixbuf_gen_idle, pbl, NULL); - + pbl->destroy_id = gtk_signal_connect (GTK_OBJECT (eb), "destroy", + embeddable_destroy_cb, pbl); + + g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc)pixbuf_gen_idle, + pbl, NULL); + button = gtk_button_new (); GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS); - g_object_set_data ((GObject *) button, "MailDisplay", md); - g_signal_connect (button, "clicked", G_CALLBACK (button_press), part); + gtk_object_set_data (GTK_OBJECT (button), "MailDisplay", md); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (button_press), part); gtk_container_add (GTK_CONTAINER (button), pbl->pixmap); gtk_widget_show_all (button); gtk_container_add (GTK_CONTAINER (eb), button); @@ -1215,7 +1236,7 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle, html_stream = mail_stream_gtkhtml_new (html, handle); camel_data_wrapper_write_to_stream (data, html_stream); - camel_object_unref (html_stream); + camel_object_unref (CAMEL_OBJECT (html_stream)); } gtk_html_end (html, handle, GTK_HTML_STREAM_OK); @@ -1353,7 +1374,7 @@ static void fetch_remote(MailDisplay *md, const char *uri, GtkHTML *html, GtkHTM rd->md = md; /* dont ref */ rd->uri = g_strdup(uri); rd->html = html; - g_object_ref(html); + gtk_object_ref((GtkObject *)html); rd->stream = stream; rd->cstream = cstream; @@ -1408,7 +1429,7 @@ static void fetch_data(SoupMessage *req, void *data) static void fetch_free(struct _remote_data *rd) { - g_object_unref(rd->html); + gtk_object_unref((GtkObject *)rd->html); if (rd->cstream) camel_object_unref(rd->cstream); g_free(rd->uri); @@ -1509,7 +1530,7 @@ try_part_urls (struct _load_content_msg *m) html_stream = mail_stream_gtkhtml_new (m->html, m->handle); camel_data_wrapper_write_to_stream (data, html_stream); - camel_object_unref (html_stream); + camel_object_unref (CAMEL_OBJECT (html_stream)); gtk_html_end (m->html, m->handle, GTK_HTML_STREAM_OK); return TRUE; @@ -1527,9 +1548,12 @@ try_data_urls (struct _load_content_msg *m) urls = g_datalist_get_data (m->display->data, "data_urls"); ba = g_hash_table_lookup (urls, m->url); + printf ("url: %s data: %p len: %d\n", m->url, ba, ba ? ba->len : -1); if (ba) { - if (ba->len) + if (ba->len) { + printf ("writing ...\n"); gtk_html_write (m->html, m->handle, ba->data, ba->len); + } gtk_html_end (m->html, m->handle, GTK_HTML_STREAM_OK); return TRUE; } @@ -1541,15 +1565,15 @@ static void load_content_loaded (struct _mail_msg *mm) { struct _load_content_msg *m = (struct _load_content_msg *)mm; - -#warning "object_destroy check?" -#if 0 + if (GTK_OBJECT_DESTROYED (m->display)) return; -#endif if (m->display->current_message == m->message) { if (m->handle) { + printf ("handle: %p orig: %d actual: %d\n", m->handle, + m->redisplay_counter, + m->display->redisplay_counter); if (m->redisplay_counter == m->display->redisplay_counter) { if (!try_part_urls (m) && !try_data_urls (m)) gtk_html_end (m->html, m->handle, GTK_HTML_STREAM_ERROR); @@ -1565,9 +1589,9 @@ load_content_free (struct _mail_msg *mm) struct _load_content_msg *m = (struct _load_content_msg *)mm; g_free (m->url); - g_object_unref((m->html)); - g_object_unref((m->display)); - camel_object_unref (m->message); + gtk_object_unref (GTK_OBJECT (m->html)); + gtk_object_unref (GTK_OBJECT (m->display)); + camel_object_unref (CAMEL_OBJECT (m->message)); } static struct _mail_msg_op load_content_op = { @@ -1588,11 +1612,10 @@ stream_write_or_redisplay_when_loaded (MailDisplay *md, { struct _load_content_msg *m; GHashTable *loading; - -#if 0 + if (GTK_OBJECT_DESTROYED (md)) return; -#endif + loading = g_datalist_get_data (md->data, "loading"); if (loading) { if (g_hash_table_lookup (loading, key)) @@ -1606,14 +1629,14 @@ stream_write_or_redisplay_when_loaded (MailDisplay *md, m = mail_msg_new (&load_content_op, NULL, sizeof (*m)); m->display = md; - g_object_ref((m->display)); + gtk_object_ref (GTK_OBJECT (m->display)); m->html = html; - g_object_ref((html)); + gtk_object_ref (GTK_OBJECT (html)); m->handle = handle; m->url = g_strdup (url); m->redisplay_counter = md->redisplay_counter; m->message = md->current_message; - camel_object_ref (m->message); + camel_object_ref (CAMEL_OBJECT (m->message)); m->callback = callback; m->data = data; @@ -1644,13 +1667,8 @@ mail_display_redisplay_when_loaded (MailDisplay *md, } void -mail_text_write (GtkHTML *html, GtkHTMLStream *stream, MailDisplay *md, CamelMimePart *part, gint idx, gboolean printing, const char *text) +mail_text_write (GtkHTML *html, GtkHTMLStream *stream, gboolean printing, const char *text) { - GByteArray *ba; - gchar *xed, *iframe; - gchar *btt = "<tt>\n"; - gchar *ett = "</tt>\n"; - guint flags; char *htmltext; @@ -1664,17 +1682,10 @@ mail_text_write (GtkHTML *html, GtkHTMLStream *stream, MailDisplay *md, CamelMim htmltext = e_text_to_html_full (text, flags, mail_config_get_citation_color ()); - ba = g_byte_array_new (); - g_byte_array_append (ba, (const guint8 *) btt, strlen (btt) + 1); - g_byte_array_append (ba, (const guint8 *) htmltext, strlen (htmltext) + 1); - g_byte_array_append (ba, (const guint8 *) ett, strlen (ett) + 1); + gtk_html_write (html, stream, "<tt>", 4); + gtk_html_write (html, stream, htmltext, strlen (htmltext)); + gtk_html_write (html, stream, "</tt>", 5); g_free (htmltext); - - xed = g_strdup_printf ("x-evolution-data:%p-%d", part, idx); - iframe = g_strdup_printf ("<iframe src=\"%s\" frameborder=0 scrolling=no>could not get %s</iframe>", xed, xed); - mail_display_add_url (md, "data_urls", xed, ba); - gtk_html_write (html, stream, iframe, strlen (iframe)); - g_free (iframe); } void @@ -1720,10 +1731,7 @@ mail_display_render (MailDisplay *md, GtkHTML *html, gboolean reset_scroll) "<!doctype html public \"-//W3C//DTD HTML 4.0 TRANSITIONAL//EN\">\n" "<html>\n" "<head>\n<meta name=\"generator\" content=\"Evolution Mail Component\">\n</head>\n"); - if (md->current_message && md->display_style == MAIL_CONFIG_DISPLAY_SOURCE) - mail_html_write (html, stream, "<body>\n"); - else - mail_html_write (html, stream, "<body marginwidth=0 marginheight=0>\n"); + mail_html_write (html, stream, "<body marginwidth=0 marginheight=0>\n"); flag = md->info ? camel_tag_get (&md->info->user_tags, "follow-up") : NULL; completed = md->info ? camel_tag_get (&md->info->user_tags, "completed-on") : NULL; @@ -1737,7 +1745,6 @@ mail_display_render (MailDisplay *md, GtkHTML *html, gboolean reset_scroll) int offset; /* my favorite thing to do... muck around with colors so we respect people's stupid themes. */ - /* FIXME: this is also in mail-format.c */ style = gtk_widget_get_style (GTK_WIDGET (html)); if (style && !md->printing) { int state = GTK_WIDGET_STATE (GTK_WIDGET (html)); @@ -1774,7 +1781,7 @@ mail_display_render (MailDisplay *md, GtkHTML *html, gboolean reset_scroll) target_date = header_decode_date (due_by, &offset); now = time (NULL); if (now >= target_date) - overdue = _("Overdue:"); + overdue = U_("Overdue:"); localtime_r (&target_date, &due); @@ -1817,10 +1824,9 @@ mail_display_render (MailDisplay *md, GtkHTML *html, gboolean reset_scroll) void mail_display_redisplay (MailDisplay *md, gboolean reset_scroll) { -#if 0 if (GTK_OBJECT_DESTROYED (md)) return; -#endif + fetch_cancel(md); md->last_active = NULL; @@ -1853,7 +1859,7 @@ mail_display_set_message (MailDisplay *md, CamelMedium *medium, CamelFolder *fol /* Clean up from previous message. */ if (md->current_message) { fetch_cancel (md); - camel_object_unref (md->current_message); + camel_object_unref (CAMEL_OBJECT (md->current_message)); g_datalist_clear (md->data); } @@ -1917,7 +1923,7 @@ mail_display_load_images (MailDisplay *md) *----------------------------------------------------------------------*/ static void -mail_display_init (GObject *object) +mail_display_init (GtkObject *object) { MailDisplay *mail_display = MAIL_DISPLAY (object); @@ -1934,8 +1940,6 @@ mail_display_init (GObject *object) mail_display->data = NULL; mail_display->invisible = gtk_invisible_new (); - g_object_ref(mail_display->invisible); - gtk_object_sink((GtkObject *)mail_display->invisible); mail_display->display_style = mail_config_get_message_display_style (); @@ -1951,46 +1955,33 @@ mail_display_destroy (GtkObject *object) { MailDisplay *mail_display = MAIL_DISPLAY (object); - if (mail_display->html) { - g_object_unref(mail_display->html); - mail_display->html = NULL; - } + gtk_object_unref (GTK_OBJECT (mail_display->html)); if (mail_display->current_message) { camel_object_unref (mail_display->current_message); g_datalist_clear (mail_display->data); fetch_cancel(mail_display); - mail_display->current_message = NULL; } g_free (mail_display->charset); - mail_display->charset = NULL; g_free (mail_display->selection); - mail_display->selection = NULL; - + if (mail_display->folder) { if (mail_display->info) camel_folder_free_message_info (mail_display->folder, mail_display->info); camel_object_unref (mail_display->folder); - mail_display->folder = NULL; } - + g_free (mail_display->data); mail_display->data = NULL; - - if (mail_display->idle_id) { + + if (mail_display->idle_id) gtk_timeout_remove (mail_display->idle_id); - mail_display->idle_id = 0; - } - - if (mail_display->invisible) { - g_object_unref (mail_display->invisible); - mail_display->invisible = NULL; - } + + gtk_widget_unref (mail_display->invisible); g_free(mail_display->priv); - mail_display->priv = NULL; - + mail_display_parent_class->destroy (object); } @@ -2045,8 +2036,9 @@ mail_display_class_init (GtkObjectClass *object_class) camel_data_cache_set_expire_age(fetch_cache, 24*60*60); camel_data_cache_set_expire_access(fetch_cache, 2*60*60); - mail_display_parent_class = g_type_class_ref(PARENT_TYPE); + mail_display_parent_class = gtk_type_class (PARENT_TYPE); thumbnail_cache = g_hash_table_new (g_str_hash, g_str_equal); + } } @@ -2097,7 +2089,7 @@ image_save_as (GtkWidget *w, MailDisplay *mail_display) { const char *src; - src = g_object_get_data(G_OBJECT(mail_display), "current_src_uri"); + src = gtk_object_get_data (GTK_OBJECT (mail_display), "current_src_uri"); g_warning ("loading uri=%s", src); @@ -2120,12 +2112,12 @@ enum { #define TERMINATOR { NULL, NULL, (NULL), NULL, 0 } static EPopupMenu link_menu [] = { - E_POPUP_ITEM (N_("Open Link in Browser"), G_CALLBACK (link_open_in_browser), MASK_URL), - E_POPUP_ITEM (N_("Copy Link Location"), G_CALLBACK (link_copy_location), MASK_URL), + E_POPUP_ITEM (N_("Open Link in Browser"), GTK_SIGNAL_FUNC (link_open_in_browser), MASK_URL), + E_POPUP_ITEM (N_("Copy Link Location"), GTK_SIGNAL_FUNC (link_copy_location), MASK_URL), #if 0 - E_POPUP_ITEM (N_("Save Link as (FIXME)"), G_CALLBACK (link_save_as), MASK_URL), + E_POPUP_ITEM (N_("Save Link as (FIXME)"), GTK_SIGNAL_FUNC (link_save_as), MASK_URL), #endif - E_POPUP_ITEM (N_("Save Image as..."), G_CALLBACK (image_save_as), MASK_SRC), + E_POPUP_ITEM (N_("Save Image as..."), GTK_SIGNAL_FUNC (image_save_as), MASK_SRC), TERMINATOR }; @@ -2142,7 +2134,7 @@ struct _PopupInfo { GtkWidget *win; guint destroy_timeout; guint widget_destroy_handle; - Bonobo_Listener listener; + Bonobo_EventSource_ListenerId listener_id; gboolean hidden; }; @@ -2157,18 +2149,20 @@ popup_info_free (PopupInfo *pop) gtk_timeout_remove (pop->destroy_timeout); bonobo_event_source_client_remove_listener (bonobo_widget_get_objref (BONOBO_WIDGET (pop->w)), - pop->listener, + pop->listener_id, NULL); - CORBA_Object_release (pop->listener, NULL); + g_free (pop); } } static void -popup_window_destroy_cb (PopupInfo *pop, GObject *deadbeef) +popup_window_destroy_cb (GtkWidget *w, gpointer user_data) { + PopupInfo *pop = (PopupInfo *) user_data; + the_popup = NULL; - + popup_info_free (pop); } @@ -2247,31 +2241,45 @@ make_popup_window (GtkWidget *w) { PopupInfo *pop = g_new0 (PopupInfo, 1); GtkWidget *fr; - + /* Only allow for one popup at a time. Ugly. */ if (the_popup) gtk_widget_destroy (the_popup); - + pop->w = w; the_popup = pop->win = gtk_window_new (GTK_WINDOW_POPUP); fr = gtk_frame_new (NULL); - + gtk_container_add (GTK_CONTAINER (pop->win), fr); gtk_container_add (GTK_CONTAINER (fr), w); - + gtk_window_set_policy (GTK_WINDOW (pop->win), FALSE, FALSE, FALSE); - - g_signal_connect (pop->win, "enter_notify_event", G_CALLBACK (popup_enter_cb), pop); - g_signal_connect (pop->win, "leave_notify_event", G_CALLBACK (popup_leave_cb), pop); - g_signal_connect_after (pop->win, "realize", G_CALLBACK (popup_realize_cb), pop); - g_signal_connect (pop->win, "size_allocate", G_CALLBACK (popup_size_allocate_cb), pop); - - g_object_weak_ref ((GObject *) pop->win, (GWeakNotify) popup_window_destroy_cb, pop); - + + gtk_signal_connect (GTK_OBJECT (pop->win), + "destroy", + GTK_SIGNAL_FUNC (popup_window_destroy_cb), + pop); + gtk_signal_connect (GTK_OBJECT (pop->win), + "enter_notify_event", + GTK_SIGNAL_FUNC (popup_enter_cb), + pop); + gtk_signal_connect (GTK_OBJECT (pop->win), + "leave_notify_event", + GTK_SIGNAL_FUNC (popup_leave_cb), + pop); + gtk_signal_connect_after (GTK_OBJECT (pop->win), + "realize", + GTK_SIGNAL_FUNC (popup_realize_cb), + pop); + gtk_signal_connect (GTK_OBJECT (pop->win), + "size_allocate", + GTK_SIGNAL_FUNC (popup_size_allocate_cb), + pop); + gtk_widget_show (w); gtk_widget_show (fr); gtk_widget_show (pop->win); - + return pop; } @@ -2325,7 +2333,7 @@ html_button_press_event (GtkWidget *widget, GdkEventButton *event, MailDisplay * url = html_object_get_url (point->object); src = html_object_get_src (point->object); - if (url && !g_ascii_strncasecmp (url, "mailto:", 7)) { + if (url && !g_strncasecmp (url, "mailto:", 7)) { PopupInfo *pop; gchar *url_decoded; @@ -2338,16 +2346,16 @@ html_button_press_event (GtkWidget *widget, GdkEventButton *event, MailDisplay * CORBA_OBJECT_NIL); bonobo_widget_set_property (BONOBO_WIDGET (popup_thing), - "email", TC_CORBA_string, url_decoded+7, + "email", url_decoded+7, NULL); g_free (url_decoded); pop = make_popup_window (popup_thing); - pop->listener = bonobo_event_source_client_add_listener_full( - bonobo_widget_get_objref (BONOBO_WIDGET (popup_thing)), - g_cclosure_new(G_CALLBACK(listener_cb), pop, NULL), - NULL, NULL); + pop->listener_id = + bonobo_event_source_client_add_listener (bonobo_widget_get_objref (BONOBO_WIDGET (popup_thing)), + listener_cb, NULL, NULL, pop); + } else if (url || src) { gint hide_mask = 0; @@ -2357,11 +2365,11 @@ html_button_press_event (GtkWidget *widget, GdkEventButton *event, MailDisplay * if (!src) hide_mask |= MASK_SRC; - g_free (g_object_get_data(G_OBJECT(mail_display), "current_src_uri")); - g_object_set_data(G_OBJECT(mail_display), "current_src_uri", - gtk_html_get_url_object_relative (GTK_HTML (widget), - point->object, - src)); + g_free (gtk_object_get_data (GTK_OBJECT (mail_display), "current_src_uri")); + gtk_object_set_data (GTK_OBJECT (mail_display), "current_src_uri", + gtk_html_get_url_object_relative (GTK_HTML (widget), + point->object, + src)); e_popup_menu_run (link_menu, (GdkEvent *) event, 0, hide_mask, mail_display); @@ -2444,12 +2452,12 @@ html_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, MailDisplay static void html_iframe_created (GtkWidget *w, GtkHTML *iframe, MailDisplay *mail_display) { - g_signal_connect(iframe, "button_press_event", - G_CALLBACK (html_button_press_event), mail_display); - g_signal_connect(iframe, "motion_notify_event", - G_CALLBACK (html_motion_notify_event), mail_display); - g_signal_connect(iframe, "enter_notify_event", - G_CALLBACK (html_enter_notify_event), mail_display); + gtk_signal_connect (GTK_OBJECT (iframe), "button_press_event", + GTK_SIGNAL_FUNC (html_button_press_event), mail_display); + gtk_signal_connect (GTK_OBJECT (iframe), "motion_notify_event", + GTK_SIGNAL_FUNC (html_motion_notify_event), mail_display); + gtk_signal_connect (GTK_OBJECT (iframe), "enter_notify_event", + GTK_SIGNAL_FUNC (html_enter_notify_event), mail_display); } static GNOME_Evolution_ShellView @@ -2459,7 +2467,7 @@ retrieve_shell_view_interface_from_control (BonoboControl *control) GNOME_Evolution_ShellView shell_view_interface; CORBA_Environment ev; - control_frame = bonobo_control_get_control_frame (control, NULL); + control_frame = bonobo_control_get_control_frame (control); if (control_frame == NULL) return CORBA_OBJECT_NIL; @@ -2471,9 +2479,9 @@ retrieve_shell_view_interface_from_control (BonoboControl *control) CORBA_exception_free (&ev); if (shell_view_interface != CORBA_OBJECT_NIL) - g_object_set_data(G_OBJECT(control), - "mail_threads_shell_view_interface", - shell_view_interface); + gtk_object_set_data (GTK_OBJECT (control), + "mail_threads_shell_view_interface", + shell_view_interface); else g_warning ("Control frame doesn't have Evolution/ShellView."); @@ -2494,7 +2502,7 @@ set_status_message (const char *message, int busy) control = BONOBO_CONTROL (e_iterator_get (it)); - shell_view_interface = g_object_get_data(G_OBJECT(control), "mail_threads_shell_view_interface"); + shell_view_interface = gtk_object_get_data (GTK_OBJECT (control), "mail_threads_shell_view_interface"); if (shell_view_interface == CORBA_OBJECT_NIL) shell_view_interface = retrieve_shell_view_interface_from_control (control); @@ -2515,7 +2523,7 @@ set_status_message (const char *message, int busy) random ones lying around otherwise. Shrug. */ break; } - g_object_unref(it); + gtk_object_unref (GTK_OBJECT(it)); } /* For now show every url but possibly limit it to showing only http: @@ -2541,7 +2549,7 @@ html_on_url (GtkHTML *html, GtkWidget * mail_display_new (void) { - MailDisplay *mail_display = g_object_new (mail_display_get_type (), NULL); + MailDisplay *mail_display = gtk_type_new (mail_display_get_type ()); GtkWidget *scroll, *html; GdkAtom clipboard_atom; HTMLTokenizer *tok; @@ -2560,17 +2568,17 @@ mail_display_new (void) html = gtk_html_new (); tok = e_searching_tokenizer_new (); html_engine_set_tokenizer (GTK_HTML (html)->engine, tok); - g_object_unref((tok)); + gtk_object_unref (GTK_OBJECT (tok)); mail_display_initialize_gtkhtml (mail_display, GTK_HTML (html)); gtk_container_add (GTK_CONTAINER (scroll), html); gtk_widget_show (GTK_WIDGET (html)); - g_signal_connect(mail_display->invisible, "selection_get", - G_CALLBACK (invisible_selection_get_callback), mail_display); - g_signal_connect(mail_display->invisible, "selection_clear_event", - G_CALLBACK (invisible_selection_clear_event_callback), mail_display); + gtk_signal_connect (GTK_OBJECT (mail_display->invisible), "selection_get", + GTK_SIGNAL_FUNC (invisible_selection_get_callback), mail_display); + gtk_signal_connect (GTK_OBJECT (mail_display->invisible), "selection_clear_event", + GTK_SIGNAL_FUNC (invisible_selection_clear_event_callback), mail_display); gtk_selection_add_target (mail_display->invisible, GDK_SELECTION_PRIMARY, GDK_SELECTION_TYPE_STRING, 1); @@ -2582,7 +2590,7 @@ mail_display_new (void) mail_display->scroll = E_SCROLL_FRAME (scroll); mail_display->html = GTK_HTML (html); - g_object_ref(mail_display->html); + gtk_object_ref (GTK_OBJECT (mail_display->html)); mail_display->last_active = NULL; mail_display->data = g_new0 (GData *, 1); g_datalist_init (mail_display->data); @@ -2598,25 +2606,25 @@ mail_display_initialize_gtkhtml (MailDisplay *mail_display, GtkHTML *html) gtk_html_set_editable (GTK_HTML (html), FALSE); - g_signal_connect(html, "url_requested", - G_CALLBACK (on_url_requested), - mail_display); - g_signal_connect(html, "object_requested", - G_CALLBACK (on_object_requested), - mail_display); - g_signal_connect(html, "link_clicked", - G_CALLBACK (on_link_clicked), - mail_display); - g_signal_connect(html, "button_press_event", - G_CALLBACK (html_button_press_event), mail_display); - g_signal_connect(html, "motion_notify_event", - G_CALLBACK (html_motion_notify_event), mail_display); - g_signal_connect(html, "enter_notify_event", - G_CALLBACK (html_enter_notify_event), mail_display); - g_signal_connect(html, "iframe_created", - G_CALLBACK (html_iframe_created), mail_display); - g_signal_connect(html, "on_url", - G_CALLBACK (html_on_url), mail_display); + gtk_signal_connect (GTK_OBJECT (html), "url_requested", + GTK_SIGNAL_FUNC (on_url_requested), + mail_display); + gtk_signal_connect (GTK_OBJECT (html), "object_requested", + GTK_SIGNAL_FUNC (on_object_requested), + mail_display); + gtk_signal_connect (GTK_OBJECT (html), "link_clicked", + GTK_SIGNAL_FUNC (on_link_clicked), + mail_display); + gtk_signal_connect (GTK_OBJECT (html), "button_press_event", + GTK_SIGNAL_FUNC (html_button_press_event), mail_display); + gtk_signal_connect (GTK_OBJECT (html), "motion_notify_event", + GTK_SIGNAL_FUNC (html_motion_notify_event), mail_display); + gtk_signal_connect (GTK_OBJECT (html), "enter_notify_event", + GTK_SIGNAL_FUNC (html_enter_notify_event), mail_display); + gtk_signal_connect (GTK_OBJECT (html), "iframe_created", + GTK_SIGNAL_FUNC (html_iframe_created), mail_display); + gtk_signal_connect (GTK_OBJECT (html), "on_url", + GTK_SIGNAL_FUNC (html_on_url), mail_display); } static void @@ -2669,7 +2677,7 @@ mail_display_get_url_for_icon (MailDisplay *md, const char *icon_name) if (*icon_name == '/') icon_path = g_strdup (icon_name); else { - icon_path = gnome_program_locate_file(NULL, GNOME_FILE_DOMAIN_PIXMAP, icon_name, TRUE, NULL); + icon_path = gnome_pixmap_file (icon_name); if (!icon_path) return "file:///dev/null"; } diff --git a/mail/mail-preferences.c b/mail/mail-preferences.c index 2941618608..2046859174 100644 --- a/mail/mail-preferences.c +++ b/mail/mail-preferences.c @@ -25,24 +25,21 @@ #include <config.h> #endif -#include <string.h> - #include "mail-preferences.h" -#include <gconf/gconf.h> +#include <gal/widgets/e-unicode.h> +#include <gal/util/e-unicode-i18n.h> #include <gtkhtml/gtkhtml-properties.h> #include "widgets/misc/e-charset-picker.h" #include <bonobo/bonobo-generic-factory.h> -#include "gal/util/e-iconv.h" - #include "mail-config.h" static void mail_preferences_class_init (MailPreferencesClass *class); static void mail_preferences_init (MailPreferences *dialog); -static void mail_preferences_finalise (GObject *obj); +static void mail_preferences_finalise (GtkObject *obj); static GtkVBoxClass *parent_class = NULL; @@ -50,20 +47,20 @@ static GtkVBoxClass *parent_class = NULL; GtkType mail_preferences_get_type (void) { - static GType type = 0; + static GtkType type = 0; if (!type) { - GTypeInfo type_info = { - sizeof (MailPreferencesClass), - NULL, NULL, - (GClassInitFunc) mail_preferences_class_init, - NULL, NULL, + GtkTypeInfo type_info = { + "MailPreferences", sizeof (MailPreferences), - 0, - (GInstanceInitFunc) mail_preferences_init, + sizeof (MailPreferencesClass), + (GtkClassInitFunc) mail_preferences_class_init, + (GtkObjectInitFunc) mail_preferences_init, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL }; - type = g_type_register_static (gtk_vbox_get_type (), "MailPreferences", &type_info, 0); + type = gtk_type_unique (gtk_vbox_get_type (), &type_info); } return type; @@ -72,12 +69,14 @@ mail_preferences_get_type (void) static void mail_preferences_class_init (MailPreferencesClass *klass) { - GObjectClass *object_class; + GtkObjectClass *object_class; - object_class = (GObjectClass *) klass; - parent_class = g_type_class_ref (gtk_vbox_get_type ()); + object_class = (GtkObjectClass *) klass; + parent_class = gtk_type_class (gtk_vbox_get_type ()); object_class->finalize = mail_preferences_finalise; + /* override methods */ + } static void @@ -87,15 +86,15 @@ mail_preferences_init (MailPreferences *preferences) } static void -mail_preferences_finalise (GObject *obj) +mail_preferences_finalise (GtkObject *obj) { MailPreferences *prefs = (MailPreferences *) obj; - g_object_unref (prefs->gui); - g_object_unref (prefs->pman); - g_object_unref (prefs->gconf); + gtk_object_unref (GTK_OBJECT (prefs->gui)); + gtk_object_unref (GTK_OBJECT (prefs->pman)); + gtk_object_unref (GTK_OBJECT (prefs->gconf)); - ((GObjectClass *)(parent_class))->finalize (obj); + ((GtkObjectClass *)(parent_class))->finalize (obj); } @@ -156,7 +155,7 @@ restore_labels_clicked (GtkWidget *widget, gpointer user_data) int i; for (i = 0; i < 5; i++) { - gtk_entry_set_text (prefs->labels[i].name, _(label_defaults[i].name)); + e_utf8_gtk_entry_set_text (prefs->labels[i].name, U_(label_defaults[i].name)); colorpicker_set_color (prefs->labels[i].color, label_defaults[i].color); } } @@ -181,7 +180,8 @@ option_menu_connect (GtkOptionMenu *omenu, gpointer user_data) items = GTK_MENU_SHELL (menu)->children; while (items) { item = items->data; - g_signal_connect (item, "activate", G_CALLBACK (menu_changed), user_data); + gtk_signal_connect (GTK_OBJECT (item), "activate", + menu_changed, user_data); items = items->next; } } @@ -191,20 +191,15 @@ mail_preferences_construct (MailPreferences *prefs) { GtkWidget *widget, *toplevel, *menu; const char *text; - GSList *list, *l; - GdkColor colour; GladeXML *gui; - gboolean bool; - guint32 rgb; - int i, val; - char *buf; + int i; char *names[][2] = { { "anim_check", "chkShowAnimatedImages" }, { "magic_links_check", "chkAutoDetectLinks" }, { NULL, NULL } }; - gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "preferences_tab", NULL); + gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", "preferences_tab"); prefs->gui = gui; /* get our toplevel widget */ @@ -220,147 +215,122 @@ mail_preferences_construct (MailPreferences *prefs) /* Message Display */ prefs->timeout_toggle = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkMarkTimeout")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/mark_seen", NULL); - gtk_toggle_button_set_active (prefs->timeout_toggle, bool); - g_signal_connect (prefs->timeout_toggle, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->timeout_toggle, mail_config_get_do_seen_timeout ()); + gtk_signal_connect (GTK_OBJECT (prefs->timeout_toggle), "toggled", + toggle_button_toggled, prefs); prefs->timeout = GTK_SPIN_BUTTON (glade_xml_get_widget (gui, "spinMarkTimeout")); - val = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/display/mark_seen_timeout", NULL); - gtk_spin_button_set_value (prefs->timeout, (1.0 * val) / 1000.0); - g_signal_connect (prefs->timeout, "changed", G_CALLBACK (entry_changed), prefs); + gtk_spin_button_set_value (prefs->timeout, (1.0 * mail_config_get_mark_as_seen_timeout ()) / 1000.0); + gtk_signal_connect (GTK_OBJECT (prefs->timeout), "changed", + entry_changed, prefs); prefs->charset = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuCharset")); - buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/format/charset", NULL); - menu = e_charset_picker_new (buf ? buf : e_iconv_locale_charset ()); + menu = e_charset_picker_new (mail_config_get_default_charset ()); gtk_option_menu_set_menu (prefs->charset, GTK_WIDGET (menu)); option_menu_connect (prefs->charset, prefs); - g_free (buf); prefs->citation_highlight = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkHighlightCitations")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/highlight_citations", NULL); - gtk_toggle_button_set_active (prefs->citation_highlight, bool); - g_signal_connect (prefs->citation_highlight, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->citation_highlight, mail_config_get_citation_highlight ()); + gtk_signal_connect (GTK_OBJECT (prefs->citation_highlight), "toggled", + toggle_button_toggled, prefs); prefs->citation_color = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, "colorpickerHighlightCitations")); - buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/citation_colour", NULL); - gdk_color_parse (buf ? buf : "#737373", &colour); - rgb = ((colour.red & 0xff00) << 8) | (colour.green & 0xff00) | ((colour.blue & 0xff) >> 8); - colorpicker_set_color (prefs->citation_color, rgb); - g_signal_connect (prefs->citation_color, "color-set", G_CALLBACK (color_set), prefs); - g_free (buf); + colorpicker_set_color (prefs->citation_color, mail_config_get_citation_color ()); + gtk_signal_connect (GTK_OBJECT (prefs->citation_color), "color-set", + color_set, prefs); /* Deleting Mail */ prefs->empty_trash = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkEmptyTrashOnExit")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/trash/empty_on_exit", NULL); - gtk_toggle_button_set_active (prefs->empty_trash, bool); - g_signal_connect (prefs->empty_trash, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->empty_trash, mail_config_get_empty_trash_on_exit ()); + gtk_signal_connect (GTK_OBJECT (prefs->empty_trash), "toggled", + toggle_button_toggled, prefs); prefs->confirm_expunge = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkConfirmExpunge")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/expunge", NULL); - gtk_toggle_button_set_active (prefs->confirm_expunge, bool); - g_signal_connect (prefs->confirm_expunge, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->confirm_expunge, mail_config_get_confirm_expunge ()); + gtk_signal_connect (GTK_OBJECT (prefs->confirm_expunge), "toggled", + toggle_button_toggled, prefs); /* New Mail Notification */ - val = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/notify/type", NULL); prefs->notify_not = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radNotifyNot")); - gtk_toggle_button_set_active (prefs->notify_not, val == MAIL_CONFIG_NOTIFY_NOT); - g_signal_connect (prefs->notify_not, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->notify_not, mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_NOT); + gtk_signal_connect (GTK_OBJECT (prefs->notify_not), "toggled", + toggle_button_toggled, prefs); prefs->notify_beep = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radNotifyBeep")); - gtk_toggle_button_set_active (prefs->notify_beep, val == MAIL_CONFIG_NOTIFY_BEEP); - g_signal_connect (prefs->notify_beep, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->notify_beep, mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_BEEP); + gtk_signal_connect (GTK_OBJECT (prefs->notify_beep), "toggled", + toggle_button_toggled, prefs); prefs->notify_play_sound = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radNotifyPlaySound")); - gtk_toggle_button_set_active (prefs->notify_play_sound, val == MAIL_CONFIG_NOTIFY_PLAY_SOUND); - g_signal_connect (prefs->notify_play_sound, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->notify_play_sound, + mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_PLAY_SOUND); + gtk_signal_connect (GTK_OBJECT (prefs->notify_play_sound), "toggled", + toggle_button_toggled, prefs); prefs->notify_sound_file = GNOME_FILE_ENTRY (glade_xml_get_widget (gui, "fileNotifyPlaySound")); - buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/notify/sound", NULL); - gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (prefs->notify_sound_file)), buf ? buf : ""); - g_signal_connect (gnome_file_entry_gtk_entry (prefs->notify_sound_file), "changed", - G_CALLBACK (entry_changed), prefs); - g_free (buf); + text = mail_config_get_new_mail_notify_sound_file (); + gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (prefs->notify_sound_file)), + text ? text : ""); + gtk_signal_connect (GTK_OBJECT (gnome_file_entry_gtk_entry (prefs->notify_sound_file)), "changed", + entry_changed, prefs); /* HTML Mail tab */ /* Loading Images */ - val = gconf_client_get_int (prefs->gconf, "/apps/evolution/mail/display/load_http_images", NULL); prefs->images_never = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radImagesNever")); - gtk_toggle_button_set_active (prefs->images_never, val == MAIL_CONFIG_HTTP_NEVER); - g_signal_connect (prefs->images_never, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->images_never, mail_config_get_http_mode () == MAIL_CONFIG_HTTP_NEVER); + gtk_signal_connect (GTK_OBJECT (prefs->images_never), "toggled", + toggle_button_toggled, prefs); prefs->images_sometimes = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radImagesSometimes")); - gtk_toggle_button_set_active (prefs->images_sometimes, val == MAIL_CONFIG_HTTP_SOMETIMES); - g_signal_connect (prefs->images_sometimes, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->images_sometimes, mail_config_get_http_mode () == MAIL_CONFIG_HTTP_SOMETIMES); + gtk_signal_connect (GTK_OBJECT (prefs->images_sometimes), "toggled", + toggle_button_toggled, prefs); prefs->images_always = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radImagesAlways")); - gtk_toggle_button_set_active (prefs->images_always, val == MAIL_CONFIG_HTTP_ALWAYS); - g_signal_connect (prefs->images_always, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_toggle_button_set_active (prefs->images_always, mail_config_get_http_mode () == MAIL_CONFIG_HTTP_ALWAYS); + gtk_signal_connect (GTK_OBJECT (prefs->images_always), "toggled", + toggle_button_toggled, prefs); -#warning "gtkhtml prop manager" -#if 0 prefs->pman = GTK_HTML_PROPMANAGER (gtk_html_propmanager_new (prefs->gconf)); - g_signal_connect (prefs->pman, "changed", G_CALLBACK (toggle_button_toggled), prefs); - g_object_ref (prefs->pman); + gtk_signal_connect (GTK_OBJECT (prefs->pman), "changed", toggle_button_toggled, prefs); + gtk_object_ref (GTK_OBJECT (prefs->pman)); gtk_html_propmanager_set_names (prefs->pman, names); gtk_html_propmanager_set_gui (prefs->pman, gui, NULL); for (i = 0; names[i][0] != NULL; i++) { widget = glade_xml_get_widget (gui, names[i][1]); - g_signal_connect (widget, "toggled", G_CALLBACK (toggle_button_toggled), prefs); + gtk_signal_connect (GTK_OBJECT (widget), "toggled", + toggle_button_toggled, prefs); } -#endif prefs->prompt_unwanted_html = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptWantHTML")); - bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/prompts/unwanted_html", NULL); - gtk_toggle_button_set_active (prefs->prompt_unwanted_html, bool); - g_signal_connect (prefs->prompt_unwanted_html, "toggled", G_CALLBACK (toggle_button_toggled), prefs); - - l = list = gconf_client_get_list (prefs->gconf, "/apps/evolution/mail/labels", GCONF_VALUE_STRING, NULL); + gtk_toggle_button_set_active (prefs->prompt_unwanted_html, mail_config_get_confirm_unwanted_html ()); + gtk_signal_connect (GTK_OBJECT (prefs->prompt_unwanted_html), "toggled", + toggle_button_toggled, prefs); /* Labels and Colours tab */ for (i = 0; i < 5; i++) { - char *widget_name, *label, *p; + char *widget_name; widget_name = g_strdup_printf ("txtLabel%d", i); prefs->labels[i].name = GTK_ENTRY (glade_xml_get_widget (gui, widget_name)); g_free (widget_name); + text = mail_config_get_label_name (i); + e_utf8_gtk_entry_set_text (prefs->labels[i].name, text ? text : ""); + gtk_signal_connect (GTK_OBJECT (prefs->labels[i].name), "changed", + entry_changed, prefs); widget_name = g_strdup_printf ("colorLabel%d", i); prefs->labels[i].color = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, widget_name)); g_free (widget_name); - - label = l ? (char *) l->data : g_strdup (_(label_defaults[i].name)); - if ((p = strrchr (label, ':'))) { - *p++ = '\0'; - gdk_color_parse (p, &colour); - rgb = ((colour.red & 0xff00) << 8) | (colour.green & 0xff00) | ((colour.blue & 0xff) >> 8); - } else { - rgb = label_defaults[i].color; - } - - gtk_entry_set_text (prefs->labels[i].name, label); - g_free (label); - - g_signal_connect (prefs->labels[i].name, "changed", G_CALLBACK (entry_changed), prefs); - - colorpicker_set_color (prefs->labels[i].color, rgb); - g_signal_connect (prefs->labels[i].color, "color_set", G_CALLBACK (color_set), prefs); - - if (l != NULL) - l = l->next; + colorpicker_set_color (prefs->labels[i].color, mail_config_get_label_color (i)); + gtk_signal_connect (GTK_OBJECT (prefs->labels[i].color), "color_set", + color_set, prefs); } - - /* this is in case somehow the gconf list is longer than 5... */ - while (l != NULL) { - g_free (l->data); - l = l->next; - } - - g_slist_free (list); - prefs->restore_labels = GTK_BUTTON (glade_xml_get_widget (gui, "cmdRestoreLabels")); - g_signal_connect (prefs->restore_labels, "clicked", G_CALLBACK (restore_labels_clicked), prefs); + gtk_signal_connect (GTK_OBJECT (prefs->restore_labels), "clicked", + restore_labels_clicked, prefs); } @@ -369,7 +339,7 @@ mail_preferences_new (void) { MailPreferences *new; - new = (MailPreferences *) g_object_new (mail_preferences_get_type (), NULL); + new = (MailPreferences *) gtk_type_new (mail_preferences_get_type ()); mail_preferences_construct (new); return (GtkWidget *) new; @@ -380,91 +350,70 @@ void mail_preferences_apply (MailPreferences *prefs) { GtkWidget *entry, *menu; - char *string, buf[20]; - const char *cstring; - GSList *list, *l; + char *string; guint32 rgb; int i, val; /* General tab */ /* Message Display */ - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/mark_seen", - gtk_toggle_button_get_active (prefs->timeout_toggle), NULL); + mail_config_set_do_seen_timeout (gtk_toggle_button_get_active (prefs->timeout_toggle)); - val = (int) (gtk_spin_button_get_value (prefs->timeout) * 1000.0); - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/display/mark_seen_timeout", val, NULL); + val = (int) (gtk_spin_button_get_value_as_float (prefs->timeout) * 1000); + mail_config_set_mark_as_seen_timeout (val); menu = gtk_option_menu_get_menu (prefs->charset); - if (!(string = e_charset_picker_get_charset (menu))) - string = g_strdup (e_iconv_locale_charset ()); - - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/format/charset", string, NULL); - g_free (string); + string = e_charset_picker_get_charset (menu); + if (string) { + mail_config_set_default_charset (string); + g_free (string); + } - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/highlight_citations", - gtk_toggle_button_get_active (prefs->citation_highlight), NULL); + mail_config_set_citation_highlight (gtk_toggle_button_get_active (prefs->citation_highlight)); rgb = colorpicker_get_color (prefs->citation_color); - g_snprintf (buf, sizeof (buf), "#%0.6x", rgb); - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/citation_colour", buf, NULL); + mail_config_set_citation_color (rgb); /* Deleting Mail */ - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/trash/empty_on_exit", - gtk_toggle_button_get_active (prefs->empty_trash), NULL); + mail_config_set_empty_trash_on_exit (gtk_toggle_button_get_active (prefs->empty_trash)); - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/expunge", - gtk_toggle_button_get_active (prefs->confirm_expunge), NULL); + mail_config_set_confirm_expunge (gtk_toggle_button_get_active (prefs->confirm_expunge)); /* New Mail Notification */ if (gtk_toggle_button_get_active (prefs->notify_not)) - val = MAIL_CONFIG_NOTIFY_NOT; + mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_NOT); else if (gtk_toggle_button_get_active (prefs->notify_beep)) - val = MAIL_CONFIG_NOTIFY_BEEP; + mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_BEEP); else - val = MAIL_CONFIG_NOTIFY_PLAY_SOUND; - - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/notify/type", val, NULL); + mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_PLAY_SOUND); entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (prefs->notify_sound_file)); - cstring = gtk_entry_get_text (GTK_ENTRY (entry)); - gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/notify/sound", cstring, NULL); + string = gtk_entry_get_text (GTK_ENTRY (entry)); + mail_config_set_new_mail_notify_sound_file (string); /* HTML Mail */ if (gtk_toggle_button_get_active (prefs->images_always)) - val = MAIL_CONFIG_HTTP_ALWAYS; + mail_config_set_http_mode (MAIL_CONFIG_HTTP_ALWAYS); else if (gtk_toggle_button_get_active (prefs->images_sometimes)) - val = MAIL_CONFIG_HTTP_SOMETIMES; + mail_config_set_http_mode (MAIL_CONFIG_HTTP_SOMETIMES); else - val = MAIL_CONFIG_HTTP_NEVER; + mail_config_set_http_mode (MAIL_CONFIG_HTTP_NEVER); - gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/display/load_http_images", val, NULL); - -#warning "gtkhtml propmanager" -#if 0 gtk_html_propmanager_apply (prefs->pman); -#endif - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/prompts/unwanted_html", - gtk_toggle_button_get_active (prefs->prompt_unwanted_html), NULL); + mail_config_set_confirm_unwanted_html (gtk_toggle_button_get_active (prefs->prompt_unwanted_html)); /* Labels and Colours */ - list = NULL; - for (i = 4; i >= 0; i--) { - cstring = gtk_entry_get_text (prefs->labels[i].name); + for (i = 0; i < 5; i++) { + /* save the label... */ + string = e_utf8_gtk_entry_get_text (prefs->labels[i].name); + mail_config_set_label_name (i, string); + g_free (string); + + /* save the colour... */ rgb = colorpicker_get_color (prefs->labels[i].color); - string = g_strdup_printf ("%s:#%0.6x", cstring, rgb); - list = g_slist_prepend (list, string); - } - - gconf_client_set_list (prefs->gconf, "/apps/evolution/mail/labels", GCONF_VALUE_STRING, list, NULL); - - l = list; - while (l != NULL) { - g_free (l->data); - l = l->next; + mail_config_set_label_color (i, rgb); } - g_slist_free (list); - gconf_client_suggest_sync (prefs->gconf, NULL); + mail_config_write (); } |