diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 152 | ||||
-rw-r--r-- | mail/component-factory.c | 16 | ||||
-rw-r--r-- | mail/evolution-mail.schemas | 20 | ||||
-rw-r--r-- | mail/folder-browser-ui.c | 8 | ||||
-rw-r--r-- | mail/folder-browser.c | 89 | ||||
-rw-r--r-- | mail/folder-browser.h | 2 | ||||
-rw-r--r-- | mail/mail-account-gui.c | 15 | ||||
-rw-r--r-- | mail/mail-accounts.c | 14 | ||||
-rw-r--r-- | mail/mail-callbacks.c | 264 | ||||
-rw-r--r-- | mail/mail-composer-prefs.c | 8 | ||||
-rw-r--r-- | mail/mail-config-druid.c | 3 | ||||
-rw-r--r-- | mail/mail-config.c | 1630 | ||||
-rw-r--r-- | mail/mail-config.h | 84 | ||||
-rw-r--r-- | mail/mail-display.c | 56 | ||||
-rw-r--r-- | mail/mail-format.c | 64 | ||||
-rw-r--r-- | mail/mail-preferences.c | 4 | ||||
-rw-r--r-- | mail/mail-send-recv.c | 83 | ||||
-rw-r--r-- | mail/mail-session.c | 39 | ||||
-rw-r--r-- | mail/mail-tools.c | 48 | ||||
-rw-r--r-- | mail/message-browser.c | 15 | ||||
-rw-r--r-- | mail/message-list.c | 55 | ||||
-rw-r--r-- | mail/message-tag-followup.c | 37 | ||||
-rw-r--r-- | mail/subscribe-dialog.c | 27 |
23 files changed, 1099 insertions, 1634 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 2fe35beccc..920f60478a 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,155 @@ +2003-01-07 Jeffrey Stedfast <fejj@ximian.com> + + * folder-browser.c (save_cursor_pos): Use gconf to get the paned + size. + (folder_browser_set_message_preview): Same. + (folder_browser_toggle_hide_deleted): Use gconf to set the + hide-deleted state. + (folder_browser_set_message_display_style): Same but for the + message_display_style. + (fb_resize_cb): Save the paned_size via gconf. + (paned_size_changed): Callback for when the paned_size gets + changed. Change the folder-browser's paned size to the new + setting. + (folder_browser_gui_init): Listen to changes to the paned_size and + also get the initial size from gconf. + + * message-list.c (message_list_set_folder): Use gconf. + (regen_list_regen): Use gconf. + + * message-browser.c (transfer_msg_done): Use gconf to get the + hide_deleted setting. + + * mail-account-gui.c (sig_add_new_signature): Use gconf. + + * folder-browser-ui.c (folder_browser_ui_add_list): Use gconf. + + * folder-browser.c (save_cursor_pos): Use gconf. + (folder_browser_set_message_preview): Same. + (folder_browser_toggle_hide_deleted): Here too. + (folder_browser_set_message_display_style): And here. + (folder_browser_gui_init): Here too. + (done_message_selected): And here. + + * mail-config.c (mail_config_get_thread_subject): Removed. + (mail_config_set_thread_subject): Removed. + (mail_config_get_empty_trash_on_exit): Removed. + (mail_config_set_empty_trash_on_exit): Removed. + (mail_config_get_last_filesel_dir): Removed. + (mail_config_set_last_filesel_dir): Removed. + (mail_config_get_hide_deleted): Removed. + (mail_config_set_hide_deleted): Removed. + (mail_config_get_paned_size): Removed. + (mail_config_set_paned_size): Removed. + (mail_config_get_send_html): Removed. + (mail_config_set_send_html): Removed. + (mail_config_get_confirm_unwanted_html): Removed. + (mail_config_set_confirm_unwanted_html): Removed. + (mail_config_get_citation_highlight): Removed. + (mail_config_set_citation_highlight): Removed. + (mail_config_get_citation_color): Removed. + (mail_config_set_citation_color): Removed. + (mail_config_get_do_seen_timeout): Removed. + (mail_config_set_do_seen_timeout): Removed. + (mail_config_get_mark_as_seen_timeout): Removed. + (mail_config_set_mark_as_seen_timeout): Removed. + (mail_config_get_prompt_empty_subject): Removed. + (mail_config_set_prompt_empty_subject): Removed. + (mail_config_get_prompt_only_bcc): Removed. + (mail_config_set_prompt_only_bcc): Removed. + (mail_config_get_confirm_expunge): Removed. + (mail_config_set_confirm_expunge): Removed. + (mail_config_get_confirm_goto_next_folder): Removed. + (mail_config_set_confirm_goto_next_folder): Removed. + (mail_config_get_goto_next_folder): Removed. + (mail_config_set_goto_next_folder): Removed. + (mail_config_get_http_mode): Removed. + (mail_config_set_http_mode): Removed. + (mail_config_get_default_forward_style): Removed. + (mail_config_set_default_forward_style): Removed. + (mail_config_get_default_reply_style): Removed. + (mail_config_set_default_reply_style): Removed. + (mail_config_get_message_display_style): Removed. + (mail_config_set_message_display_style): Removed. + (mail_config_get_default_charset): Removed. + (mail_config_set_default_charset): Removed. + (mail_config_get_x_mailer_display_style): Removed. + (mail_config_set_x_mailer_display_style): Removed. + + * subscribe-dialog.c (populate_store_list): Use the list of + accounts. We can't get the list of sources anymore. + (populate_store_foreach): Updated. + + * mail-callbacks.c (guess_me_from_accounts): Use account->enabled. + (mail_generate_reply): Same. + (empty_trash): Here too. + + * mail-accounts.c (account_delete_clicked): Use account->enabled + rather than source->enabled. + (account_able_clicked): Same. + (account_cursor_change): Here too. + (mail_accounts_load): And here. + + * component-factory.c (owner_unset_cb): Use gconf empty-on-exit + settings. + (mail_load_storages): Use account->enabled rather than + account->source->enabled. The struct changed. + + * mail-composer-prefs.c (sig_add): Get the send_html pref from gconf. + + * message-tag-followup.c (target_date_new): Use gconf. + + * mail-config.c (mail_config_get_week_start_day): Removed. + + * mail-tools.c (mail_tool_quote_message): Use gconf here too, but + we don't need to parse the colour - just use it as a raw string. + (mail_tool_forward_message): Use gconf. + + * mail-format.c (mail_format_data_wrapper_write_to_stream): Use gconf. + (write_headers): Use gconf. + (handle_text_plain): Same. + + * mail-display.c (mail_text_write): Updated to use gconf and parse + GdkColour strings. + (on_url_requested): Updated to use gconf. + + * mail-callbacks.c (ask_confirm_for_unwanted_html_mail): Use gconf + rather than the old mail-config APIs which will be removed. + (ask_confirm_for_empty_subject): Same. + (ask_confirm_for_only_bcc): Here too. + (composer_get_message): And here. + (create_msg_composer): Same. + (transfer_msg_done): Again here. + (delete_msg): Here too. + (confirm_expunge): And finally here. + + * mail-config.c (mail_config_write): Use gconf. + (mail_config_get_sources): Removed. + + * mail-account-gui.c (mail_account_gui_save): No need to save + enabled-state anymore for a source. + + * mail-config-druid.c (wizard_finish_cb): Instead of setting + account->source->enabled to TRUE, just set account->enabled to + TRUE. The structures changed a bit. + + * mail-send-recv.c (mail_send_receive): Get the list of accounts + instead of sources, and pass them along to build_dialogue. I'm + trying to get rid of the mail_config_get_sources() api. + (mail_autoreceive_setup): Here too. + + * mail-config.c (mail_config_get_filter_log): Removed. + (mail_config_set_filter_log): Removed. + (mail_config_get_filter_log_path): Removed. + (mail_config_set_filter_log_path): Removed. + (mail_config_get_new_mail_notify): Removed. + (mail_config_set_new_mail_notify): Removed. + (mail_config_get_new_mail_notify_sound_file): Removed. + (mail_config_set_new_mail_notify_sound_file): Removed. + + * mail-session.c (main_get_filter_driver): Updated to use the + gconf settings. + 2003-01-07 Dan Winship <danw@ximian.com> * mail-account-gui.c (mail_account_gui_auto_detect_extra_conf, diff --git a/mail/component-factory.c b/mail/component-factory.c index 43b3076752..2e2cdb4c2c 100644 --- a/mail/component-factory.c +++ b/mail/component-factory.c @@ -24,11 +24,14 @@ #include <config.h> #endif +#include <string.h> + +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <bonobo/bonobo-generic-factory.h> #include <gal/widgets/e-gui-utils.h> -#include <string.h> - #include "camel.h" #include "Evolution.h" @@ -938,12 +941,15 @@ static struct { static void owner_unset_cb (EvolutionShellComponent *shell_component, gpointer user_data) { + GConfClient *gconf; int i; + gconf = gconf_client_get_default (); + 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); - if (mail_config_get_empty_trash_on_exit ()) + if (gconf_client_get_bool (gconf, "/apps/evolution/mail/trash/empty_on_exit", NULL)) empty_trash (NULL, NULL, NULL); unref_standard_folders (); @@ -952,7 +958,7 @@ owner_unset_cb (EvolutionShellComponent *shell_component, gpointer user_data) global_shell_client = NULL; mail_session_set_interactive (FALSE); - g_object_unref((search_context)); + g_object_unref (search_context); search_context = NULL; g_timeout_add(100, idle_quit, NULL); @@ -1491,7 +1497,7 @@ mail_load_storages (GNOME_Evolution_Shell shell, const GSList *sources) continue; /* don't auto-connect here; the shell will tell us to goOnline */ - if (account->source->enabled) + if (account->enabled) mail_load_storage_by_uri (shell, service->url, name); } } diff --git a/mail/evolution-mail.schemas b/mail/evolution-mail.schemas index c4184e5345..3e7969948b 100644 --- a/mail/evolution-mail.schemas +++ b/mail/evolution-mail.schemas @@ -104,15 +104,15 @@ <!-- Display Settings --> <schema> - <key>/schemas/apps/evolution/mail/display/highlight_citations</key> - <applyto>/apps/evolution/mail/display/highlight_citations</applyto> + <key>/schemas/apps/evolution/mail/display/mark_citations</key> + <applyto>/apps/evolution/mail/display/mark_citations</applyto> <owner>evolution-mail</owner> <type>bool</type> <default>true</default> <locale name="C"> - <short>Highlight citations in the message "Preview"</short> + <short>Mark citations in the message "Preview"</short> <long> - Highlight citations in the message "Preview". + Mark citations in the message "Preview". </long> </locale> </schema> @@ -149,8 +149,8 @@ </schema> <schema> - <key>/schemas/apps/evolution/mail/display/xmailer_display_style</key> - <applyto>/apps/evolution/mail/display/xmailer_display_style</applyto> + <key>/schemas/apps/evolution/mail/display/xmailer_mask</key> + <applyto>/apps/evolution/mail/display/xmailer_mask</applyto> <owner>evolution-mail</owner> <type>long</type> <default>0</default> @@ -219,15 +219,15 @@ </schema> <schema> - <key>/schemas/apps/evolution/mail/display/preview_size</key> - <applyto>/apps/evolution/mail/display/preview_size</applyto> + <key>/schemas/apps/evolution/mail/display/paned_size</key> + <applyto>/apps/evolution/mail/display/paned_size</applyto> <owner>evolution-mail</owner> <type>long</type> <default>122</default> <locale name="C"> - <short>Size of the "Preview" pane</short> + <short>Height of the message-list pane</short> <long> - Size of the "Preview" pane. + Height of the message-list pane. </long> </locale> </schema> diff --git a/mail/folder-browser-ui.c b/mail/folder-browser-ui.c index b3ac053794..a9d6edfdf7 100644 --- a/mail/folder-browser-ui.c +++ b/mail/folder-browser-ui.c @@ -28,6 +28,9 @@ #include <string.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <libgnome/gnome-util.h> /* gnome_util_prepend_user_home */ #include <bonobo/bonobo-exception.h> @@ -371,7 +374,7 @@ folder_browser_ui_setup_view_menus (FolderBrowser *fb) gal_view_collection_load (collection); } - id = mail_config_folder_to_safe_url(fb->folder); + id = mail_config_folder_to_safe_url (fb->folder); fb->view_instance = gal_view_instance_new (collection, id); g_free (id); @@ -549,6 +552,7 @@ void folder_browser_ui_add_list (FolderBrowser *fb) { BonoboUIComponent *uic = fb->uicomp; + GConfClient *gconf; int state; if (fb->sensitise_state) { @@ -563,7 +567,7 @@ folder_browser_ui_add_list (FolderBrowser *fb) fbui_sensitise_item (fb, "HideDeleted", FALSE); state = FALSE; } else { - state = mail_config_get_hide_deleted (); + state = !gconf_client_get_bool (gconf, "/apps/evolution/mail/display/show_deleted", NULL); } bonobo_ui_component_set_prop (uic, "/commands/HideDeleted", "state", state ? "1" : "0", NULL); diff --git a/mail/folder-browser.c b/mail/folder-browser.c index 0dad15eaeb..bd442c4523 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -37,6 +37,9 @@ #include <gal/widgets/e-gui-utils.h> #include <gal/widgets/e-popup-menu.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <libgnomeui/gnome-dialog-util.h> #include <libgnomeui/gnome-pixmap.h> @@ -1064,7 +1067,8 @@ save_cursor_pos (FolderBrowser *fb) { ETreePath node; GtkAdjustment *adj; - int row, y, height; + int row, y, height, paned_size; + GConfClient *gconf; node = e_tree_get_cursor (fb->message_list->tree); if (!node) @@ -1078,8 +1082,11 @@ save_cursor_pos (FolderBrowser *fb) e_tree_get_cell_geometry (fb->message_list->tree, row, 0, NULL, &y, NULL, &height); + gconf = gconf_client_get_default (); + paned_size = gconf_client_get_int (gconf, "/apps/evolution/mail/display/paned_size", NULL); + adj = e_scroll_frame_get_vadjustment (E_SCROLL_FRAME (fb->message_list)); - y += adj->value - ((mail_config_get_paned_size () - height) / 2); + y += adj->value - ((paned_size - height) / 2); return y; } @@ -1101,7 +1108,8 @@ static gboolean do_message_selected(FolderBrowser *fb); void folder_browser_set_message_preview (FolderBrowser *folder_browser, gboolean show_message_preview) { - int y; + GConfClient *gconf; + int paned_size, y; if (folder_browser->preview_shown == show_message_preview || folder_browser->message_list == NULL) @@ -1109,9 +1117,12 @@ folder_browser_set_message_preview (FolderBrowser *folder_browser, gboolean show folder_browser->preview_shown = show_message_preview; + gconf = gconf_client_get_default (); + paned_size = gconf_client_get_int (gconf, "/apps/evolution/mail/display/paned_size", NULL); + if (show_message_preview) { y = save_cursor_pos (folder_browser); - e_paned_set_position (E_PANED (folder_browser->vpaned), mail_config_get_paned_size ()); + e_paned_set_position (E_PANED (folder_browser->vpaned), paned_size); gtk_widget_show (GTK_WIDGET (folder_browser->mail_display)); do_message_selected (folder_browser); set_cursor_pos (folder_browser, y); @@ -1119,7 +1130,7 @@ folder_browser_set_message_preview (FolderBrowser *folder_browser, gboolean show e_paned_set_position (E_PANED (folder_browser->vpaned), 10000); gtk_widget_hide (GTK_WIDGET (folder_browser->mail_display)); mail_display_set_message (folder_browser->mail_display, NULL, NULL, NULL); - folder_browser_ui_message_loaded(folder_browser); + folder_browser_ui_message_loaded (folder_browser); } } @@ -1289,13 +1300,20 @@ folder_browser_toggle_hide_deleted (BonoboUIComponent *component, gpointer user_data) { FolderBrowser *fb = user_data; + GConfClient *gconf; if (type != Bonobo_UIComponent_STATE_CHANGED || fb->message_list == NULL) return; - if (!(fb->folder && (fb->folder->folder_flags & CAMEL_FOLDER_IS_TRASH))) - mail_config_set_hide_deleted (atoi (state)); + gconf = gconf_client_get_default (); + + /* FIXME: we should listen for changes to this, so when it changes for one folder all folders get updated */ + if (!(fb->folder && (fb->folder->folder_flags & CAMEL_FOLDER_IS_TRASH))) { + gconf_client_set_bool (gconf, "/apps/evolution/mail/display/show_deleted", + atoi (state), NULL); + } + message_list_set_hidedeleted (fb->message_list, atoi (state)); } @@ -1308,20 +1326,25 @@ folder_browser_set_message_display_style (BonoboUIComponent *component { extern char *message_display_styles[]; FolderBrowser *fb = user_data; + GConfClient *gconf; int i; + /* FIXME: we should listen for changes to this, so when it changes for one folder all folders get updated */ + if (type != Bonobo_UIComponent_STATE_CHANGED || atoi (state) == 0 || fb->message_list == NULL) return; + gconf = gconf_client_get_default (); + for (i = 0; i < MAIL_CONFIG_DISPLAY_MAX; i++) { if (strstr (message_display_styles[i], path)) { fb->mail_display->display_style = i; mail_display_redisplay (fb->mail_display, TRUE); if (fb->pref_master) - mail_config_set_message_display_style (i); + gconf_client_set_int (gconf, "/apps/evolution/mail/display/message_style", i, NULL); return; } } @@ -2296,9 +2319,27 @@ on_cursor_activated (ETree *tree, int row, ETreePath path, gpointer user_data) static void fb_resize_cb (GtkWidget *w, GtkAllocation *a, FolderBrowser *fb) -{ +{ + GConfClient *gconf; + + gconf = gconf_client_get_default (); + if (GTK_WIDGET_REALIZED (w) && fb->preview_shown) - mail_config_set_paned_size (a->height); + gconf_client_set_int (gconf, "/apps/evolution/mail/display/paned_size", a->height, NULL); +} + +static void +paned_size_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data) +{ + FolderBrowser *fb = user_data; + int paned_size; + + g_signal_handler_block (fb->message_list, fb->resize_id); + + paned_size = gconf_client_get_int (client, "/apps/evolution/mail/display/paned_size", NULL); + e_paned_set_position (E_PANED (fb->vpaned), paned_size); + + g_signal_handler_unblock (fb->message_list, fb->resize_id); } static void @@ -2306,6 +2347,8 @@ folder_browser_gui_init (FolderBrowser *fb) { extern RuleContext *search_context; ESelectionModel *esm; + GConfClient *gconf; + int paned_size; /* The panned container */ fb->vpaned = e_vpaned_new (); @@ -2350,11 +2393,21 @@ folder_browser_gui_init (FolderBrowser *fb) e_paned_add1 (E_PANED (fb->vpaned), GTK_WIDGET (fb->message_list)); gtk_widget_show (GTK_WIDGET (fb->message_list)); - g_signal_connect (fb->message_list, "size_allocate", - G_CALLBACK (fb_resize_cb), fb); + fb->resize_id = g_signal_connect (fb->message_list, "size_allocate", + G_CALLBACK (fb_resize_cb), fb); + + /* listen for updates */ + gconf_client_add_dir (gconf, "/apps/evolution/mail/display/paned_size", + GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); + + gconf_client_notify_add (gconf, "/apps/evolution/mail/display/paned_size", + paned_size_changed, fb, NULL, NULL); + + gconf = gconf_client_get_default (); + paned_size = gconf_client_get_int (gconf, "/apps/evolution/mail/display/paned_size", NULL); e_paned_add2 (E_PANED (fb->vpaned), GTK_WIDGET (fb->mail_display)); - e_paned_set_position (E_PANED (fb->vpaned), mail_config_get_paned_size ()); + e_paned_set_position (E_PANED (fb->vpaned), paned_size); gtk_widget_show (GTK_WIDGET (fb->mail_display)); gtk_widget_show (GTK_WIDGET (fb)); } @@ -2381,11 +2434,17 @@ done_message_selected (CamelFolder *folder, const char *uid, CamelMimeMessage *m { FolderBrowser *fb = data; CamelMessageInfo *info; - int timeout = mail_config_get_mark_as_seen_timeout (); + GConfClient *gconf; + int timeout; + + gconf = gconf_client_get_default (); if (folder != fb->folder || fb->mail_display == NULL) return; + gconf = gconf_client_get_default (); + timeout = gconf_client_get_int (gconf, "/apps/evolution/mail/display/mark_seen_timeout", NULL); + info = camel_folder_get_message_info (fb->folder, uid); mail_display_set_message (fb->mail_display, (CamelMedium *) msg, fb->folder, info); if (info) @@ -2414,7 +2473,7 @@ done_message_selected (CamelFolder *folder, const char *uid, CamelMimeMessage *m if (fb->seen_id) gtk_timeout_remove (fb->seen_id); - if (mail_config_get_do_seen_timeout () && msg) { + if (msg && gconf_client_get_bool (gconf, "/apps/evolution/mail/display/mark_seen", NULL)) { if (timeout > 0) fb->seen_id = gtk_timeout_add (timeout, do_mark_seen, fb); else diff --git a/mail/folder-browser.h b/mail/folder-browser.h index dd8486bc1c..dd83d05d87 100644 --- a/mail/folder-browser.h +++ b/mail/folder-browser.h @@ -59,6 +59,8 @@ struct _FolderBrowser { guint loading_id; guint seen_id; + gulong resize_id; + /* a folder we are expunging, dont use other than to compare the pointer value */ CamelFolder *expunging; diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c index 95bbdff447..73a341fa57 100644 --- a/mail/mail-account-gui.c +++ b/mail/mail-account-gui.c @@ -30,6 +30,9 @@ #include <string.h> #include <stdarg.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <gal/widgets/e-gui-utils.h> #include "evolution-folder-selector-button.h" @@ -1259,12 +1262,18 @@ sig_switch_to_list (GtkWidget *w, MailAccountGui *gui) static void sig_add_new_signature (GtkWidget *w, MailAccountGui *gui) { + GConfClient *gconf; + gboolean send_html; + if (!gui->dialog) return; sig_switch_to_list (w, gui); - gui->def_signature = mail_composer_prefs_new_signature (NULL, mail_config_get_send_html (), NULL); + gconf = gconf_client_get_default (); + send_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/send_html", NULL); + + gui->def_signature = mail_composer_prefs_new_signature (NULL, send_html, NULL); gui->auto_signature = FALSE; gtk_option_menu_set_history (GTK_OPTION_MENU (gui->sig_option_menu), sig_gui_get_index (gui)); @@ -1814,7 +1823,6 @@ mail_account_gui_save (MailAccountGui *gui) CamelURL *source_url = NULL, *url; const char *new_name; gboolean is_storage; - gboolean enabled; if (!mail_account_gui_identity_complete (gui, NULL) || !mail_account_gui_source_complete (gui, NULL) || @@ -1853,7 +1861,6 @@ mail_account_gui_save (MailAccountGui *gui) account->id->def_signature = gui->def_signature; account->id->auto_signature = gui->auto_signature; - enabled = account->source && account->source->enabled; service_destroy (account->source); account->source = g_new0 (MailConfigService, 1); save_service (&gui->source, gui->extra_config, account->source); @@ -1862,8 +1869,6 @@ mail_account_gui_save (MailAccountGui *gui) source_url = provider ? camel_url_new (account->source->url, NULL) : NULL; } - account->source->enabled = enabled; - account->source->auto_check = gtk_toggle_button_get_active (gui->source_auto_check); if (account->source->auto_check) account->source->auto_check_time = gtk_spin_button_get_value_as_int (gui->source_auto_check_min); diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c index f9f802a2c3..7c8008eb0e 100644 --- a/mail/mail-accounts.c +++ b/mail/mail-accounts.c @@ -234,7 +234,7 @@ account_delete_clicked (GtkButton *button, gpointer user_data) int len; /* remove it from the folder-tree in the shell */ - if (account->source && account->source->url && account->source->enabled) + if (account->enabled && account->source && account->source->url) mail_remove_storage_by_uri (account->source->url); /* remove it from the config file */ @@ -285,7 +285,7 @@ static void account_able_clicked (GtkButton *button, gpointer user_data) { MailAccountsTab *prefs = user_data; - const MailConfigAccount *account = NULL; + MailConfigAccount *account = NULL; GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; @@ -293,15 +293,15 @@ account_able_clicked (GtkButton *button, gpointer user_data) selection = gtk_tree_view_get_selection (prefs->table); if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, 3, &account, -1); - account->source->enabled = !account->source->enabled; - gtk_list_store_set ((GtkListStore *) model, &iter, 0, account->source->enabled, -1); + account->enabled = !account->enabled; + gtk_list_store_set ((GtkListStore *) model, &iter, 0, account->enabled, -1); } if (account) { /* if the account got disabled, remove it from the folder-tree, otherwise add it to the folder-tree */ if (account->source->url) { - if (account->source->enabled) + if (account->enabled) mail_load_storage_by_uri (prefs->shell, account->source->url, account->name); else mail_remove_storage_by_uri (account->source->url); @@ -331,7 +331,7 @@ account_cursor_change (GtkTreeSelection *selection, MailAccountsTab *prefs) state = gtk_tree_selection_get_selected (selection, &model, &iter); if (state) { gtk_tree_model_get (model, &iter, 3, &account, -1); - if (account->source && account->source->enabled) + if (account->source && account->enabled) gtk_button_set_label (prefs->mail_able, _("Disable")); else gtk_button_set_label (prefs->mail_able, _("Enable")); @@ -379,7 +379,7 @@ mail_accounts_load (MailAccountsTab *prefs) } gtk_list_store_set (model, &iter, - 0, account->source->enabled, + 0, account->enabled, 1, val, 2, url && url->protocol ? url->protocol : (char *) _("None"), 3, account, diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index 1401364ed6..847e5bd39a 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -31,8 +31,12 @@ #include <time.h> #include <errno.h> + #include <gtkhtml/gtkhtml.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <gtk/gtkmessagedialog.h> #include <libgnomeprint/gnome-print-master.h> @@ -240,10 +244,13 @@ static gboolean ask_confirm_for_unwanted_html_mail (EMsgComposer *composer, EDestination **recipients) { gboolean show_again, res; + GConfClient *gconf; GString *str; int i; - - if (!mail_config_get_confirm_unwanted_html ()) + + gconf = gconf_client_get_default (); + + if (!gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/unwanted_html", NULL)) return TRUE; /* FIXME: this wording sucks */ @@ -260,10 +267,11 @@ ask_confirm_for_unwanted_html_mail (EMsgComposer *composer, EDestination **recip } 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); - + res = e_question ((GtkWindow *) composer, GTK_RESPONSE_YES, &show_again, "%s", str->str); + g_string_free (str, TRUE); + + gconf_client_set_bool (gconf, "/apps/evolution/mail/prompts/unwanted_html", show_again, NULL); + return res; } @@ -272,13 +280,17 @@ ask_confirm_for_empty_subject (EMsgComposer *composer) { gboolean show_again, res; GtkWidget *mbox, *check; + GConfClient *gconf; + + gconf = gconf_client_get_default (); - if (!mail_config_get_prompt_empty_subject ()) + if (gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/empty_subject", NULL)) return TRUE; - - res = e_question((GtkWindow *)composer, GTK_RESPONSE_YES, &show_again, - _("This message has no subject.\nReally send?")); - mail_config_set_prompt_empty_subject (show_again); + + res = e_question ((GtkWindow *) composer, GTK_RESPONSE_YES, &show_again, + _("This message has no subject.\nReally send?")); + + gconf_client_set_bool (gconf, "/apps/evolution/mail/prompts/empty_subject", show_again, NULL); return res; } @@ -288,8 +300,11 @@ ask_confirm_for_only_bcc (EMsgComposer *composer, gboolean hidden_list_case) { gboolean show_again, res; const char *first_text; + GConfClient *gconf; - if (!mail_config_get_prompt_only_bcc ()) + gconf = gconf_client_get_default (); + + if (!gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/only_bcc", NULL)) return TRUE; /* If the user is mailing a hidden contact list, it is possible for @@ -305,13 +320,13 @@ 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?")); - mail_config_set_prompt_only_bcc (show_again); + 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?")); + + gconf_client_set_bool (gconf, "/apps/evolution/mail/prompts/only_bcc", show_again, NULL); return res; } @@ -394,10 +409,14 @@ composer_get_message (EMsgComposer *composer, gboolean post, gboolean save_html_ const MailConfigAccount *account; CamelMimeMessage *message = NULL; EDestination **recipients, **recipients_bcc; - char *subject; - int i; + gboolean send_html, confirm_html; int hidden = 0, shown = 0; int num = 0, num_bcc = 0; + GConfClient *gconf; + char *subject; + int i; + + gconf = gconf_client_get_default (); /* We should do all of the validity checks based on the composer, and not on the created message, as extra interaction may occur when we get the message @@ -431,13 +450,14 @@ composer_get_message (EMsgComposer *composer, gboolean post, gboolean save_html_ if (addr && addr[0]) num_bcc++; } + e_destination_freev (recipients_bcc); } /* 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.")); + e_notice ((GtkWindow *) composer, GTK_MESSAGE_WARNING, + _("You must specify recipients in order to send this message.")); goto finished; } @@ -447,15 +467,17 @@ composer_get_message (EMsgComposer *composer, gboolean post, gboolean save_html_ goto finished; } + send_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/send_html", NULL); + confirm_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/unwanted_html", NULL); + /* Only show this warning if our default is to send html. If it isn't, we've manually switched into html mode in the composer and (presumably) had a good reason for doing this. */ - if (e_msg_composer_get_send_html (composer) && mail_config_get_send_html () - && mail_config_get_confirm_unwanted_html ()) { + if (e_msg_composer_get_send_html (composer) && send_html && confirm_html) { gboolean html_problem = FALSE; if (recipients) { - for (i = 0; recipients[i] != NULL && !html_problem; ++i) { + for (i = 0; recipients[i] != NULL && !html_problem; i++) { if (!e_destination_get_html_mail_pref (recipients[i])) html_problem = TRUE; } @@ -725,16 +747,17 @@ static GtkWidget * create_msg_composer (const MailConfigAccount *account, gboolean post, const char *url) { EMsgComposer *composer; + GConfClient *gconf; gboolean send_html; /* Make sure that we've actually been passed in an account. If one has * not been passed in, grab the default account. */ - if (account == NULL) { + if (account == NULL) account = mail_config_get_default_account (); - } - send_html = mail_config_get_send_html (); + gconf = gconf_client_get_default (); + send_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/send_html", NULL); if (post) composer = e_msg_composer_new_post (); @@ -900,7 +923,7 @@ guess_me_from_accounts (const CamelInternetAddress *to, const CamelInternetAddre * account always takes precedence no matter what. */ acnt = g_hash_table_lookup (account_hash, account->id->address); - if (acnt && acnt != def && !acnt->source->enabled && account->source->enabled) { + if (acnt && acnt != def && !acnt->enabled && account->enabled) { g_hash_table_remove (account_hash, acnt->id->address); acnt = NULL; } @@ -955,9 +978,12 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char EDestination **tov, **ccv; EMsgComposer *composer; CamelMimePart *part; + GConfClient *gconf; time_t date; char *url; + gconf = gconf_client_get_default (); + if (mode == REPLY_POST) { composer = e_msg_composer_new_post (); if (composer != NULL) { @@ -997,7 +1023,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char * account always takes precedence no matter what. */ acnt = g_hash_table_lookup (account_hash, account->id->address); - if (acnt && acnt != def && !acnt->source->enabled && account->source->enabled) { + if (acnt && acnt != def && !acnt->enabled && account->enabled) { g_hash_table_remove (account_hash, acnt->id->address); acnt = NULL; } @@ -1126,7 +1152,7 @@ mail_generate_reply (CamelFolder *folder, CamelMimeMessage *message, const char } /* set body text here as we want all ignored words to take effect */ - switch (mail_config_get_default_reply_style ()) { + switch (gconf_client_get_int (gconf, "/apps/evolution/mail/format/reply_style", NULL)) { case MAIL_CONFIG_REPLY_DO_NOT_QUOTE: /* do nothing */ break; @@ -1454,7 +1480,11 @@ forward_attached (GtkWidget *widget, gpointer user_data) void forward (GtkWidget *widget, gpointer user_data) { - MailConfigForwardStyle style = mail_config_get_default_forward_style (); + MailConfigForwardStyle style; + GConfClient *gconf; + + gconf = gconf_client_get_default (); + style = gconf_client_get_int (gconf, "/apps/evolution/mail/format/forward_style", NULL); if (style == MAIL_CONFIG_FORWARD_ATTACHED) forward_attached (widget, user_data); @@ -1600,16 +1630,20 @@ static void transfer_msg_done (gboolean ok, void *data) { FolderBrowser *fb = data; + gboolean hide_deleted; + GConfClient *gconf; int row; if (ok && !FOLDER_BROWSER_IS_DESTROYED (fb)) { + gconf = gconf_client_get_default (); + hide_deleted = !gconf_client_get_bool (gconf, "/apps/evolution/mail/display/show_deleted", NULL); + row = e_tree_row_of_node (fb->message_list->tree, e_tree_get_cursor (fb->message_list->tree)); /* 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)) - && mail_config_get_hide_deleted ()) + if ((row + 1 == e_tree_row_count (fb->message_list->tree)) && hide_deleted) message_list_select (fb->message_list, MESSAGE_LIST_SELECT_PREVIOUS, 0, CAMEL_MESSAGE_DELETED, FALSE); else @@ -2481,11 +2515,15 @@ void delete_msg (GtkWidget *button, gpointer user_data) { FolderBrowser *fb = FOLDER_BROWSER (user_data); + gboolean hide_deleted; + GConfClient *gconf; int deleted, row; if (FOLDER_BROWSER_IS_DESTROYED (fb)) return; + gconf = gconf_client_get_default (); + deleted = flag_messages (fb, CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN); @@ -2494,10 +2532,11 @@ delete_msg (GtkWidget *button, gpointer user_data) row = e_tree_row_of_node (fb->message_list->tree, e_tree_get_cursor (fb->message_list->tree)); + hide_deleted = !gconf_client_get_bool (gconf, "/apps/evolution/mail/display/show_deleted", NULL); + /* 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)) - && mail_config_get_hide_deleted ()) + if ((row + 1 == e_tree_row_count (fb->message_list->tree)) && hide_deleted) message_list_select (fb->message_list, MESSAGE_LIST_SELECT_PREVIOUS, 0, CAMEL_MESSAGE_DELETED, FALSE); else @@ -2512,127 +2551,6 @@ undelete_msg (GtkWidget *button, gpointer user_data) flag_messages (FOLDER_BROWSER (user_data), CAMEL_MESSAGE_DELETED, 0); } - -#if 0 -static gboolean -confirm_goto_next_folder (FolderBrowser *fb) -{ - gboolean res, show_again; - - 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; -} - -static CamelFolderInfo * -find_current_folder (CamelFolderInfo *root, const char *current_uri) -{ - CamelFolderInfo *node, *current = NULL; - - node = root; - while (node) { - if (!strcmp (current_uri, node->url)) { - current = node; - break; - } - - current = find_current_folder (node->child, current_uri); - if (current) - break; - - node = node->sibling; - } - - return current; -} - -static CamelFolderInfo * -find_next_folder_r (CamelFolderInfo *node) -{ - CamelFolderInfo *next; - - while (node) { - if (node->unread_message_count > 0) - return node; - - next = find_next_folder_r (node->child); - if (next) - return next; - - node = node->sibling; - } - - return NULL; -} - -static CamelFolderInfo * -find_next_folder (CamelFolderInfo *current) -{ - CamelFolderInfo *next; - - /* first search subfolders... */ - next = find_next_folder_r (current->child); - if (next) - return next; - - /* now search siblings... */ - next = find_next_folder_r (current->sibling); - if (next) - return next; - - /* now go up one level (if we can) and search... */ - if (current->parent && current->parent->sibling) { - return find_next_folder_r (current->parent->sibling); - } else { - return NULL; - } -} - -static void -do_evil_kludgy_goto_next_folder_hack (FolderBrowser *fb) -{ - CamelFolderInfo *root, *current, *node; - CORBA_Environment ev; - CamelStore *store; - - store = camel_folder_get_parent_store (fb->folder); - - /* FIXME: loop over all available mail stores? */ - - root = camel_store_get_folder_info (store, "", CAMEL_STORE_FOLDER_INFO_RECURSIVE | - CAMEL_STORE_FOLDER_INFO_SUBSCRIBED, NULL); - - if (!root) - return; - - current = find_current_folder (root, fb->uri); - g_assert (current != NULL); - - node = find_next_folder (current); - if (node) { - g_warning ("doin' my thang..."); - CORBA_exception_init (&ev); - GNOME_Evolution_ShellView_changeCurrentView (fb->shell_view, "evolution:/local/Inbox", &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_warning ("got an exception"); - CORBA_exception_free (&ev); - } else { - g_warning ("can't find a folder with unread mail?"); - } - - camel_store_free_folder_info (store, root); -} -#endif - void next_msg (GtkWidget *button, gpointer user_data) { @@ -2652,12 +2570,7 @@ next_unread_msg (GtkWidget *button, gpointer user_data) if (FOLDER_BROWSER_IS_DESTROYED (fb)) return; - if (!message_list_select (fb->message_list, MESSAGE_LIST_SELECT_NEXT, 0, CAMEL_MESSAGE_SEEN, TRUE)) { -#if 0 - if (confirm_goto_next_folder (fb)) - do_evil_kludgy_goto_next_folder_hack (fb); -#endif - } + message_list_select (fb->message_list, MESSAGE_LIST_SELECT_NEXT, 0, CAMEL_MESSAGE_SEEN, TRUE); } void @@ -2735,17 +2648,20 @@ static gboolean confirm_expunge (FolderBrowser *fb) { gboolean res, show_again; - - if (!mail_config_get_confirm_expunge ()) + GConfClient *gconf; + + gconf = gconf_client_get_default (); + + if (!gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/expunge", NULL)) 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); - + + 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?")); + + gconf_client_set_bool (gconf, "/apps/evolution/mail/prompts/expunge", show_again, NULL); + return res; } @@ -3255,7 +3171,7 @@ empty_trash (BonoboUIComponent *uih, void *user_data, const char *path) account = accounts->data; /* make sure this is a valid source */ - if (account->source && account->source->enabled && account->source->url) { + if (account->source && account->enabled && account->source->url) { provider = camel_session_get_provider (session, account->source->url, &ex); if (provider) { /* make sure this store is a remote store */ diff --git a/mail/mail-composer-prefs.c b/mail/mail-composer-prefs.c index ccf856294a..dd86cfe39f 100644 --- a/mail/mail-composer-prefs.c +++ b/mail/mail-composer-prefs.c @@ -277,7 +277,13 @@ sig_delete (GtkWidget *widget, MailComposerPrefs *prefs) static void sig_add (GtkWidget *widget, MailComposerPrefs *prefs) { - mail_composer_prefs_new_signature (prefs, mail_config_get_send_html (), NULL); + GConfClient *gconf; + gboolean send_html; + + gconf = gconf_client_get_default (); + send_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/send_html", NULL); + + mail_composer_prefs_new_signature (prefs, send_html, NULL); } static void diff --git a/mail/mail-config-druid.c b/mail/mail-config-druid.c index a198952358..a529b47220 100644 --- a/mail/mail-config-druid.c +++ b/mail/mail-config-druid.c @@ -947,8 +947,7 @@ wizard_finish_cb (EvolutionWizard *wizard, /* problem. Um, how to keep the druid alive? */ return; - if (gui->account->source) - gui->account->source->enabled = TRUE; + gui->account->enabled = TRUE; /* Write out the config info */ mail_config_write (); diff --git a/mail/mail-config.c b/mail/mail-config.c index 1b02e462f1..14c0f9e5aa 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -37,7 +37,12 @@ #include <gtk/gtkdialog.h> #include <gtkhtml/gtkhtml.h> #include <glade/glade.h> -#include <e-util/e-config-listener.h> + +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + +#include <libxml/tree.h> +#include <libxml/parser.h> #include <bonobo/bonobo-object.h> #include <bonobo/bonobo-generic-factory.h> @@ -68,59 +73,24 @@ MailConfigLabel label_defaults[5] = { }; typedef struct { - EConfigListener *db; + GConfClient *gconf; gboolean corrupt; - gboolean show_preview; - gboolean thread_list; - gboolean hide_deleted; - int paned_size; - gboolean send_html; - gboolean confirm_unwanted_html; - gboolean citation_highlight; - guint32 citation_color; - gboolean prompt_empty_subject; - gboolean prompt_only_bcc; - gboolean confirm_expunge; - gboolean confirm_goto_next_folder; - gboolean goto_next_folder; - gboolean do_seen_timeout; - int seen_timeout; - gboolean empty_trash_on_exit; - - gboolean thread_subject; - GSList *accounts; int default_account; - MailConfigHTTPMode http_mode; - MailConfigForwardStyle default_forward_style; - MailConfigReplyStyle default_reply_style; - MailConfigDisplayStyle message_display_style; - MailConfigXMailerDisplayStyle x_mailer_display_style; - char *default_charset; - GHashTable *threaded_hash; GHashTable *preview_hash; - gboolean filter_log; - char *filter_log_path; - - MailConfigNewMailNotify notify; - char *notify_filename; - - char *last_filesel_dir; - GList *signature_list; int signatures; MailConfigLabel labels[5]; - + gboolean signature_info; - + /* readonly fields from calendar */ - int week_start_day; int time_24hour; } MailConfig; @@ -207,7 +177,6 @@ service_copy (const MailConfigService *source) new->keep_on_server = source->keep_on_server; new->auto_check = source->auto_check; new->auto_check_time = source->auto_check_time; - new->enabled = source->enabled; new->save_passwd = source->save_passwd; return new; @@ -227,7 +196,7 @@ service_destroy (MailConfigService *source) void service_destroy_each (gpointer item, gpointer data) { - service_destroy ((MailConfigService *)item); + service_destroy ((MailConfigService *) item); } /* Account */ @@ -241,6 +210,8 @@ account_copy (const MailConfigAccount *account) new = g_new0 (MailConfigAccount, 1); new->name = g_strdup (account->name); + new->enabled = account->enabled; + new->id = identity_copy (account->id); new->source = service_copy (account->source); new->transport = service_copy (account->transport); @@ -293,7 +264,327 @@ account_destroy (MailConfigAccount *account) void account_destroy_each (gpointer item, gpointer data) { - account_destroy ((MailConfigAccount *)item); + account_destroy ((MailConfigAccount *) item); +} + + +static gboolean +xml_get_bool (xmlNodePtr node, const char *name) +{ + gboolean bool = FALSE; + char *buf; + + if ((buf = xmlGetProp (node, name))) { + bool = (!strcmp (buf, "true") || !strcmp (buf, "yes")); + xmlFree (buf); + } + + return bool; +} + +static int +xml_get_int (xmlNodePtr node, const char *name) +{ + int number = 0; + char *buf; + + if ((buf = xmlGetProp (node, name))) { + number = strtol (buf, NULL, 10); + xmlFree (buf); + } + + return number; +} + +static char * +xml_get_prop (xmlNodePtr node, const char *name) +{ + char *buf, *val; + + buf = xmlGetProp (node, name); + val = g_strdup (buf); + g_free (buf); + + return val; +} + +static char * +xml_get_content (xmlNodePtr node) +{ + char *buf, *val; + + buf = xmlNodeGetContent (node); + val = g_strdup (buf); + xmlFree (buf); + + return val; +} + +static MailConfigSignature * +lookup_signature (int i) +{ + MailConfigSignature *sig; + GList *l; + + if (i == -1) + return NULL; + + for (l = config->signature_list; l; l = l->next) { + sig = (MailConfigSignature *) l->data; + if (sig->id == i) + return sig; + } + + return NULL; +} + +static MailConfigAccount * +account_new_from_xml (char *in) +{ + MailConfigAccount *account; + xmlNodePtr node, cur; + xmlDocPtr doc; + char *buf; + + if (!(doc = xmlParseDoc (in))) + return NULL; + + node = doc->children; + if (strcmp (node->name, "account") != 0) { + xmlFreeDoc (doc); + return NULL; + } + + account = g_new0 (MailConfigAccount, 1); + account->name = xml_get_prop (node, "name"); + account->enabled = xml_get_bool (node, "enabled"); + + node = node->children; + while (node != NULL) { + if (!strcmp (node->name, "identity")) { + account->id = g_new0 (MailConfigIdentity, 1); + + cur = node->children; + while (cur != NULL) { + if (!strcmp (cur->name, "name")) { + account->id->name = xml_get_content (cur); + } else if (!strcmp (cur->name, "addr-spec")) { + account->id->address = xml_get_content (cur); + } else if (!strcmp (cur->name, "reply-to")) { + account->id->reply_to = xml_get_content (cur); + } else if (!strcmp (cur->name, "organization")) { + account->id->organization = xml_get_content (cur); + } else if (!strcmp (cur->name, "signature")) { + account->id->auto_signature = xml_get_bool (cur, "auto"); + account->id->def_signature = lookup_signature (xml_get_int (cur, "default")); + } + + cur = cur->next; + } + } else if (!strcmp (node->name, "source")) { + account->source = g_new0 (MailConfigService, 1); + account->source->save_passwd = xml_get_bool (node, "save-passwd"); + account->source->keep_on_server = xml_get_bool (node, "keep-on-server"); + account->source->auto_check = xml_get_bool (node, "auto-check"); + + /* FIXME: account->source->auto_check_time */ + + cur = node->children; + while (cur != NULL) { + if (!strcmp (cur->name, "url")) { + account->source->url = xml_get_content (cur); + break; + } + cur = cur->next; + } + } else if (!strcmp (node->name, "transport")) { + account->transport = g_new0 (MailConfigService, 1); + account->transport->save_passwd = xml_get_bool (node, "save-passwd"); + + cur = node->children; + while (cur != NULL) { + if (!strcmp (cur->name, "url")) { + account->transport->url = xml_get_content (cur); + break; + } + cur = cur->next; + } + } else if (!strcmp (node->name, "drafts-folder")) { + account->drafts_folder_uri = xml_get_content (node); + } else if (!strcmp (node->name, "sent-folder")) { + account->sent_folder_uri = xml_get_content (node); + } else if (!strcmp (node->name, "auto-cc")) { + account->always_cc = xml_get_bool (node, "always"); + account->cc_addrs = xml_get_content (node); + } else if (!strcmp (node->name, "auto-bcc")) { + account->always_cc = xml_get_bool (node, "always"); + account->bcc_addrs = xml_get_content (node); + } else if (!strcmp (node->name, "pgp")) { + account->pgp_encrypt_to_self = xml_get_bool (node, "encrypt-to-self"); + account->pgp_always_trust = xml_get_bool (node, "always-trust"); + account->pgp_always_sign = xml_get_bool (node, "always-sign"); + account->pgp_no_imip_sign = !xml_get_bool (node, "sign-imip"); + + if (node->children) { + cur = node->children; + while (cur != NULL) { + if (!strcmp (cur->name, "key-id")) { + account->pgp_key = xml_get_content (cur); + break; + } + + cur = cur->next; + } + } + } else if (!strcmp (node->name, "smime")) { + account->smime_encrypt_to_self = xml_get_bool (node, "encrypt-to-self"); + account->smime_always_sign = xml_get_bool (node, "always-sign"); + + if (node->children) { + cur = node->children; + while (cur != NULL) { + if (!strcmp (cur->name, "key-id")) { + account->smime_key = xml_get_content (cur); + break; + } + + cur = cur->next; + } + } + } + + node = node->next; + } + + xmlFreeDoc (doc); + + return account; +} + +static char * +account_to_xml (MailConfigAccount *account) +{ + xmlNodePtr root, node, id, src, xport; + char *xmlbuf, *tmp, buf[20]; + xmlDocPtr doc; + int n; + + doc = xmlNewDoc ("1.0"); + + root = xmlNewDocNode (doc, NULL, "account", NULL); + xmlDocSetRootElement (doc, root); + + xmlSetProp (root, "name", account->name); + xmlSetProp (root, "enabled", account->enabled ? "true" : "false"); + + id = xmlNewChild (root, NULL, "identity", NULL); + if (account->id->name) + xmlNewTextChild (id, NULL, "name", account->id->name); + if (account->id->address) + xmlNewTextChild (id, NULL, "addr-spec", account->id->address); + if (account->id->reply_to) + xmlNewTextChild (id, NULL, "reply-to", account->id->reply_to); + if (account->id->organization) + xmlNewTextChild (id, NULL, "organization", account->id->organization); + + node = xmlNewChild (id, NULL, "signature", NULL); + xmlSetProp (node, "auto", account->id->auto_signature ? "true" : "false"); + sprintf (buf, "%d", account->id->def_signature); + xmlSetProp (node, "default", buf); + + src = xmlNewChild (root, NULL, "source", NULL); + xmlSetProp (src, "save-passwd", account->source->save_passwd ? "true" : "false"); + xmlSetProp (src, "keep-on-server", account->source->keep_on_server ? "true" : "false"); + xmlSetProp (src, "auto-check", account->source->auto_check ? "true" : "false"); + if (account->source->url) + xmlNewTextChild (src, NULL, "url", account->source->url); + + /* FIXME: save auto-check timeout value */ + + xport = xmlNewChild (root, NULL, "transport", NULL); + xmlSetProp (xport, "save-passwd", account->transport->save_passwd ? "true" : "false"); + if (account->transport->url) + xmlNewTextChild (xport, NULL, "url", account->transport->url); + + xmlNewTextChild (root, NULL, "drafts-folder", account->drafts_folder_uri); + xmlNewTextChild (root, NULL, "sent-folder", account->sent_folder_uri); + + node = xmlNewChild (root, NULL, "auto-cc", NULL); + xmlSetProp (node, "always", account->always_cc ? "true" : "false"); + if (account->cc_addrs) + xmlNewTextChild (node, NULL, "recipients", account->cc_addrs); + + node = xmlNewChild (root, NULL, "auto-bcc", NULL); + xmlSetProp (node, "always", account->always_bcc ? "true" : "false"); + if (account->bcc_addrs) + xmlNewTextChild (node, NULL, "recipients", account->bcc_addrs); + + node = xmlNewChild (root, NULL, "pgp", NULL); + xmlSetProp (node, "encrypt-to-self", account->pgp_encrypt_to_self ? "true" : "false"); + xmlSetProp (node, "always-trust", account->pgp_always_trust ? "true" : "false"); + xmlSetProp (node, "always-sign", account->pgp_always_sign ? "true" : "false"); + xmlSetProp (node, "sign-imip", !account->pgp_no_imip_sign ? "true" : "false"); + if (account->pgp_key) + xmlNewTextChild (node, NULL, "key-id", account->pgp_key); + + node = xmlNewChild (root, NULL, "smime", NULL); + xmlSetProp (node, "encrypt-to-self", account->smime_encrypt_to_self ? "true" : "false"); + xmlSetProp (node, "always-sign", account->smime_always_sign ? "true" : "false"); + if (account->smime_key) + xmlNewTextChild (node, NULL, "key-id", account->smime_key); + + xmlDocDumpMemory (doc, &xmlbuf, &n); + xmlFreeDoc (doc); + + if (!(tmp = realloc (xmlbuf, n + 1))) { + g_free (xmlbuf); + return NULL; + } + + xmlbuf[n] = '\0'; + + return xmlbuf; +} + +static void +accounts_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data) +{ + GSList *list, *l, *tail, *n; + + if (config->accounts != NULL) { + l = config->accounts; + while (l != NULL) { + n = l->next; + account_destroy ((MailConfigAccount *) l->data); + g_slist_free_1 (l); + l = n; + } + + config->accounts = NULL; + } + + tail = (GSList *) &config->accounts; + + list = gconf_client_get_list (config->gconf, "/apps/evolution/mail/accounts", + GCONF_VALUE_STRING, NULL); + + l = list; + while (l != NULL) { + MailConfigAccount *account; + + if ((account = account_new_from_xml ((char *) l->data))) { + n = g_slist_alloc (); + n->data = account; + n->next = NULL; + + tail->next = n; + tail = n; + } + + n = l->next; + g_slist_free_1 (l); + l = n; + } } /* Config struct routines */ @@ -304,7 +595,13 @@ mail_config_init (void) return; config = g_new0 (MailConfig, 1); - config->db = e_config_listener_new(); + config->gconf = gconf_client_get_default (); + + gconf_client_add_dir (config->gconf, "/apps/evolution/mail/accounts", + GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); + + gconf_client_notify_add (config->gconf, "/apps/evolution/mail/accounts", + accounts_changed, NULL, NULL, NULL); config_read (); } @@ -312,28 +609,21 @@ mail_config_init (void) void mail_config_clear (void) { + GSList *list, *l, *n; int i; if (!config) return; - if (config->accounts) { - g_slist_foreach (config->accounts, account_destroy_each, NULL); - g_slist_free (config->accounts); - config->accounts = NULL; + l = config->accounts; + while (l != NULL) { + n = l->next; + account_destroy ((MailConfigAccount *) l->data); + g_slist_free_1 (l); + l = n; } - g_free (config->default_charset); - config->default_charset = NULL; - - g_free (config->filter_log_path); - config->filter_log_path = NULL; - - g_free (config->notify_filename); - config->notify_filename = NULL; - - g_free (config->last_filesel_dir); - config->last_filesel_dir = NULL; + config->accounts = NULL; for (i = 0; i < 5; i++) { g_free (config->labels[i].name); @@ -344,7 +634,7 @@ mail_config_clear (void) } static MailConfigSignature * -config_read_signature (gint i) +config_read_signature (int i) { MailConfigSignature *sig; char *path, *val; @@ -352,7 +642,9 @@ config_read_signature (gint i) sig = g_new0 (MailConfigSignature, 1); sig->id = i; - + +#warning "need to rewrite the config_read_signature()" +#if 0 path = g_strdup_printf ("/apps/Evolution/Mail/Signatures/name_%d", i); val = e_config_listener_get_string (config->db, path); g_free (path); @@ -376,10 +668,11 @@ config_read_signature (gint i) sig->script = val; else g_free (val); - + path = g_strdup_printf ("/apps/Evolution/Mail/Signatures/html_%d", i); sig->html = e_config_listener_get_boolean_with_default (config->db, path, FALSE, NULL); g_free (path); +#endif return sig; } @@ -388,183 +681,74 @@ static void config_read_signatures () { MailConfigSignature *sig; - gint i; - + int i; + config->signature_list = NULL; + config->signatures = 0; + +#warning "need to rewrite config_read_signatures()" +#if 0 config->signatures = e_config_listener_get_long_with_default (config->db, "/apps/Evolution/Mail/Signatures/num", 0, NULL); - + for (i = 0; i < config->signatures; i ++) { sig = config_read_signature (i); config->signature_list = g_list_append (config->signature_list, sig); } +#endif } static void config_write_signature (MailConfigSignature *sig, gint i) { +#warning "need to rewrite config_write_signature()" +#if 0 char *path; - + printf ("config_write_signature i: %d id: %d\n", i, sig->id); - + path = g_strdup_printf ("/apps/Evolution/Mail/Signatures/name_%d", i); e_config_listener_set_string (config->db, path, sig->name ? sig->name : ""); g_free (path); - + path = g_strdup_printf ("/apps/Evolution/Mail/Signatures/filename_%d", i); e_config_listener_set_string (config->db, path, sig->filename ? sig->filename : ""); g_free (path); - + path = g_strdup_printf ("/apps/Evolution/Mail/Signatures/script_%d", i); e_config_listener_set_string (config->db, path, sig->script ? sig->script : ""); g_free (path); - + path = g_strdup_printf ("/apps/Evolution/Mail/Signatures/html_%d", i); e_config_listener_set_boolean (config->db, path, sig->html); g_free (path); +#endif } static void config_write_signatures_num () { - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Signatures/num", config->signatures); +#warning "need to rewrite config_write_signatures_num()" + /*e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Signatures/num", config->signatures);*/ } static void config_write_signatures () { GList *l; - gint id; - + int id; + for (id = 0, l = config->signature_list; l; l = l->next, id ++) { config_write_signature ((MailConfigSignature *) l->data, id); } - - config_write_signatures_num (); -} - -static MailConfigSignature * -lookup_signature (gint i) -{ - MailConfigSignature *sig; - GList *l; - - if (i == -1) - return NULL; - - for (l = config->signature_list; l; l = l->next) { - sig = (MailConfigSignature *) l->data; - if (sig->id == i) - return sig; - } - - return NULL; -} - -static void -config_write_imported_signature (gchar *filename, gint i, gboolean html) -{ - MailConfigSignature *sig = g_new0 (MailConfigSignature, 1); - gchar *name; - - name = strrchr (filename, '/'); - if (!name) - name = filename; - else - name ++; - - sig->name = g_strdup (name); - sig->filename = filename; - sig->html = html; - - config_write_signature (sig, i); - signature_destroy (sig); -} - -static void -config_import_old_signatures () -{ - int num; - - num = e_config_listener_get_long_with_default (config->db, "/apps/Evolution/Mail/Signatures/num", -1, NULL); - if (num == -1) { - /* there are no signatures defined - * look for old config to create new ones from old ones - */ - GHashTable *cache; - int i, accounts; - - cache = g_hash_table_new (g_str_hash, g_str_equal); - accounts = e_config_listener_get_long_with_default (config->db, "/apps/Evolution/Mail/Accounts/num", 0, NULL); - num = 0; - for (i = 0; i < accounts; i ++) { - char *path, *val; - - /* read text signature file */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_signature_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) { - gpointer orig_key, node_val; - int id; - - if (g_hash_table_lookup_extended (cache, val, &orig_key, &node_val)) { - id = GPOINTER_TO_INT (node_val); - } else { - g_hash_table_insert (cache, g_strdup (val), GINT_TO_POINTER (num)); - config_write_imported_signature (val, num, FALSE); - id = num; - num ++; - } - - /* set new text signature to this identity */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_signature_text_%d", i); - e_config_listener_set_long (config->db, path, id); - g_free (path); - } else - g_free (val); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_has_html_signature_%d", i); - if (e_config_listener_get_boolean_with_default (config->db, path, FALSE, NULL)) { - g_free (path); - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_html_signature_%d", i); - val = e_config_listener_get_string (config->db, path); - if (val && *val) { - gpointer orig_key, node_val; - int id; - - if (g_hash_table_lookup_extended (cache, val, &orig_key, &node_val)) { - id = GPOINTER_TO_INT (node_val); - } else { - g_hash_table_insert (cache, g_strdup (val), GINT_TO_POINTER (num)); - config_write_imported_signature (val, num, TRUE); - id = num; - num ++; - } - - /* set new html signature to this identity */ - g_free (path); - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_signature_html_%d", i); - e_config_listener_set_long (config->db, path, id); - } else - g_free (val); - } - g_free (path); - } - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Signatures/num", num); - g_hash_table_destroy (cache); - } + config_write_signatures_num (); } -/* copied from calendar-config */ -static gboolean -locale_supports_12_hour_format(void) +void +mail_config_write_account_sig (MailConfigAccount *account, int id) { - char s[16]; - time_t t = 0; - - strftime(s, sizeof s, "%p", gmtime (&t)); - return s[0] != '\0'; + /* FIXME: what is this supposed to do? */ + ; } static void @@ -575,564 +759,58 @@ config_read (void) mail_config_clear (); - config_import_old_signatures (); config_read_signatures (); - len = e_config_listener_get_long_with_default (config->db, - "/apps/Evolution/Mail/Accounts/num", 0, NULL); - - for (i = 0; i < len; i++) { - MailConfigAccount *account; - MailConfigIdentity *id; - MailConfigService *source; - MailConfigService *transport; - - account = g_new0 (MailConfigAccount, 1); - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_name_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) { - account->name = val; - } else { - g_free (val); - account->name = g_strdup_printf (_("Account %d"), i + 1); - config->corrupt = TRUE; - } - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_drafts_folder_uri_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) - account->drafts_folder_uri = val; - else - g_free (val); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_sent_folder_uri_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) - account->sent_folder_uri = val; - else - g_free (val); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_always_cc_%d", i); - account->always_cc = e_config_listener_get_boolean_with_default ( - config->db, path, FALSE, NULL); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_always_cc_addrs_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) - account->cc_addrs = val; - else - g_free (val); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_always_bcc_%d", i); - account->always_bcc = e_config_listener_get_boolean_with_default ( - config->db, path, FALSE, NULL); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_always_bcc_addrs_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) - account->bcc_addrs = val; - else - g_free (val); - - /* get the pgp info */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_key_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) - account->pgp_key = val; - else - g_free (val); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_always_sign_%d", i); - account->pgp_always_sign = e_config_listener_get_boolean_with_default ( - config->db, path, FALSE, NULL); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_no_imip_sign_%d", i); - account->pgp_no_imip_sign = e_config_listener_get_boolean_with_default ( - config->db, path, FALSE, NULL); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_encrypt_to_self_%d", i); - account->pgp_encrypt_to_self = e_config_listener_get_boolean_with_default ( - config->db, path, TRUE, NULL); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_always_trust_%d", i); - account->pgp_always_trust = e_config_listener_get_boolean_with_default ( - config->db, path, FALSE, NULL); - g_free (path); - - /* get the s/mime info */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_smime_key_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) - account->smime_key = val; - else - g_free (val); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_smime_always_sign_%d", i); - account->smime_always_sign = e_config_listener_get_boolean_with_default ( - config->db, path, FALSE, NULL); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_smime_encrypt_to_self_%d", i); - account->smime_encrypt_to_self = e_config_listener_get_boolean_with_default ( - config->db, path, TRUE, NULL); - g_free (path); - - /* get the identity info */ - id = g_new0 (MailConfigIdentity, 1); - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_name_%d", i); - id->name = e_config_listener_get_string (config->db, path); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_address_%d", i); - id->address = e_config_listener_get_string (config->db, path); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_reply_to_%d", i); - id->reply_to = e_config_listener_get_string (config->db, path); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_organization_%d", i); - id->organization = e_config_listener_get_string (config->db, path); - g_free (path); - - /* id signatures */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_def_signature_%d", i); - id->def_signature = lookup_signature (e_config_listener_get_long_with_default (config->db, path, -1, NULL)); - g_free (path); - - /* autogenerated signature */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_autogenerated_signature_%d", i); - id->auto_signature = e_config_listener_get_boolean_with_default (config->db, path, TRUE, NULL); - g_free (path); - - /* get the source */ - source = g_new0 (MailConfigService, 1); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_url_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) - source->url = val; - else - g_free (val); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_keep_on_server_%d", i); - source->keep_on_server = e_config_listener_get_boolean (config->db, path); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_auto_check_%d", i); - source->auto_check = e_config_listener_get_boolean_with_default ( - config->db, path, FALSE, NULL); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_auto_check_time_%d", i); - source->auto_check_time = e_config_listener_get_long_with_default ( - config->db, path, -1, NULL); - - if (source->auto_check && source->auto_check_time <= 0) { - source->auto_check_time = 5; - source->auto_check = FALSE; - } - - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_enabled_%d", i); - source->enabled = e_config_listener_get_boolean_with_default ( - config->db, path, TRUE, NULL); - g_free (path); - - path = g_strdup_printf - ("/apps/Evolution/Mail/Accounts/source_save_passwd_%d", i); - source->save_passwd = e_config_listener_get_boolean_with_default ( - config->db, path, TRUE, NULL); - g_free (path); - - /* get the transport */ - transport = g_new0 (MailConfigService, 1); - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/transport_url_%d", i); - val = e_config_listener_get_string (config->db, path); - g_free (path); - if (val && *val) - transport->url = val; - else - g_free (val); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/transport_save_passwd_%d", i); - transport->save_passwd = e_config_listener_get_boolean (config->db, path); - g_free (path); - - account->id = id; - account->source = source; - account->transport = transport; - - config->accounts = g_slist_append (config->accounts, account); - } - - default_num = e_config_listener_get_long_with_default (config->db, - "/apps/Evolution/Mail/Accounts/default_account", 0, NULL); + accounts_changed (config->gconf, 0, NULL, NULL); + default_num = gconf_client_get_int (config->gconf, "/apps/evolution/mail/default_account", NULL); mail_config_set_default_account_num (default_num); - - /* Format */ - config->send_html = e_config_listener_get_boolean_with_default (config->db, - "/apps/Evolution/Mail/Format/send_html", FALSE, NULL); - - /* Confirm Sending Unwanted HTML */ - config->confirm_unwanted_html = e_config_listener_get_boolean_with_default (config->db, - "/apps/Evolution/Mail/Format/confirm_unwanted_html", TRUE, NULL); - - /* Citation */ - config->citation_highlight = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Display/citation_highlight", TRUE, NULL); - - config->citation_color = e_config_listener_get_long_with_default ( - config->db, "/apps/Evolution/Mail/Display/citation_color", 0x737373, NULL); - - /* Mark as seen toggle */ - config->do_seen_timeout = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Display/do_seen_timeout", TRUE, NULL); - - /* Mark as seen timeout */ - config->seen_timeout = e_config_listener_get_long_with_default (config->db, - "/apps/Evolution/Mail/Display/seen_timeout", 1500, NULL); - - /* Show Messages Threaded */ - config->thread_list = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Display/thread_list", FALSE, NULL); - - config->thread_subject = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Display/thread_subject", FALSE, NULL); - - config->show_preview = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Display/preview_pane", TRUE, NULL); - - /* Hide deleted automatically */ - config->hide_deleted = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Display/hide_deleted", FALSE, NULL); - - /* Size of vpaned in mail view */ - config->paned_size = e_config_listener_get_long_with_default (config->db, - "/apps/Evolution/Mail/Display/paned_size", 200, NULL); - - /* Goto next folder when user has reached the bottom of the message-list */ - config->goto_next_folder = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/MessageList/goto_next_folder", FALSE, NULL); - - /* Empty Subject */ - config->prompt_empty_subject = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Prompts/empty_subject", TRUE, NULL); - - /* Only Bcc */ - config->prompt_only_bcc = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Prompts/only_bcc", TRUE, NULL); - - /* Expunge */ - config->confirm_expunge = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Prompts/confirm_expunge", TRUE, NULL); - - /* Goto next folder */ - config->confirm_goto_next_folder = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Prompts/confirm_goto_next_folder", TRUE, NULL); - - /* HTTP images */ - config->http_mode = e_config_listener_get_long_with_default (config->db, - "/apps/Evolution/Mail/Display/http_images", MAIL_CONFIG_HTTP_NEVER, NULL); - - /* Forwarding */ - config->default_forward_style = e_config_listener_get_long_with_default ( - config->db, "/apps/Evolution/Mail/Format/default_forward_style", - MAIL_CONFIG_FORWARD_ATTACHED, NULL); - - /* Replying */ - config->default_reply_style = e_config_listener_get_long_with_default ( - config->db, "/apps/Evolution/Mail/Format/default_reply_style", - MAIL_CONFIG_REPLY_QUOTED, NULL); - - /* Message Display */ - config->message_display_style = e_config_listener_get_long_with_default ( - config->db, "/apps/Evolution/Mail/Format/message_display_style", - MAIL_CONFIG_DISPLAY_NORMAL, NULL); - - /* Default charset */ - config->default_charset = e_config_listener_get_string (config->db, - "/apps/Evolution/Mail/Format/default_charset"); - - if (!config->default_charset) { - const char *def; - - g_get_charset (&def); - config->default_charset = g_strdup(def); - if (!config->default_charset || - !g_strcasecmp (config->default_charset, "US-ASCII")) - config->default_charset = g_strdup ("ISO-8859-1"); - else - config->default_charset = g_strdup (config->default_charset); - } - - /* Trash folders */ - config->empty_trash_on_exit = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Trash/empty_on_exit", FALSE, NULL); - - /* Filter logging */ - config->filter_log = e_config_listener_get_boolean_with_default ( - config->db, "/apps/Evolution/Mail/Filters/log", FALSE, NULL); - - config->filter_log_path = e_config_listener_get_string ( - config->db, "/apps/Evolution/Mail/Filters/log_path"); - - /* New Mail Notification */ - config->notify = e_config_listener_get_long_with_default ( - config->db, "/apps/Evolution/Mail/Notify/new_mail_notification", - MAIL_CONFIG_NOTIFY_NOT, NULL); - - config->notify_filename = e_config_listener_get_string ( - config->db, "/apps/Evolution/Mail/Notify/new_mail_notification_sound_file"); - - /* X-Mailer header display */ - config->x_mailer_display_style = e_config_listener_get_long_with_default ( - config->db, "/apps/Evolution/Mail/Display/x_mailer_display_style", - MAIL_CONFIG_XMAILER_NONE, NULL); - - /* last filesel dir */ - config->last_filesel_dir = e_config_listener_get_string ( - config->db, "/apps/Evolution/Mail/Filesel/last_filesel_dir"); - - /* Color labels */ - /* Note: we avoid having to malloc/free 10 times this way... */ - path = g_malloc (sizeof ("/apps/Evolution/Mail/Labels/") + sizeof ("label_#") + 1); - strcpy (path, "/apps/Evolution/Mail/Labels/label_#"); - p = path + strlen (path) - 1; - for (i = 0; i < 5; i++) { - *p = '0' + i; - val = e_config_listener_get_string (config->db, path); - if (!(val && *val)) { - g_free (val); - val = NULL; - } - config->labels[i].name = val; - } - strcpy (path, "/apps/Evolution/Mail/Labels/color_#"); - p = path + strlen (path) - 1; - for (i = 0; i < 5; i++) { - *p = '0' + i; - config->labels[i].color = e_config_listener_get_long_with_default (config->db, path, - label_defaults[i].color, NULL); - } - g_free (path); - - config->week_start_day = e_config_listener_get_long_with_default(config->db, "/apps/Evolution/Calendar/Display/WeekStartDay", 1, NULL); - if (locale_supports_12_hour_format()) { - config->time_24hour = e_config_listener_get_boolean_with_default(config->db, "/apps/Evolution/Calendar/Display/Use24HourFormat", FALSE, NULL); - } else { - config->time_24hour = TRUE; - } -} - -#define e_config_listener_set_string_wrapper(db, path, val) e_config_listener_set_string (db, path, val ? val : "") - -void -mail_config_write_account_sig (MailConfigAccount *account, gint i) -{ - char *path; - - mail_config_init (); - - if (i == -1) { - GSList *link; - - link = g_slist_find (config->accounts, account); - if (!link) { - g_warning ("Can't find account in accounts list"); - return; - } - i = g_slist_position (config->accounts, link); - } - - /* id signatures */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_def_signature_%d", i); - e_config_listener_set_long (config->db, path, account->id->def_signature - ? account->id->def_signature->id : -1); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_autogenerated_signature_%d", i); - e_config_listener_set_boolean (config->db, path, account->id->auto_signature); - g_free (path); } void mail_config_write (void) { - CORBA_Environment ev; - int len, i, default_num; - - /* Accounts */ + GSList *list, *l, *tail, *n; + int default_num, i; + char *xmlbuf; if (!config) return; - -#if 0 - /* FIXME: remove, do we need to do anything about this with e-config-listner? */ - CORBA_exception_init (&ev); - Bonobo_ConfigDatabase_removeDir (config->db, "/apps/Evolution/Mail/Accounts", &ev); - CORBA_exception_init (&ev); - Bonobo_ConfigDatabase_removeDir (config->db, "/apps/Evolution/News/Sources", &ev); - CORBA_exception_init (&ev); - Bonobo_ConfigDatabase_sync (config->db, &ev); -#endif - - config_write_signatures (); - len = g_slist_length (config->accounts); - e_config_listener_set_long (config->db, - "/apps/Evolution/Mail/Accounts/num", len); + config_write_signatures (); + /* Accounts */ default_num = mail_config_get_default_account_num (); - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Accounts/default_account", default_num); + gconf_client_set_int (config->gconf, "/apps/evolution/mail/default_account", default_num, NULL); - for (i = 0; i < len; i++) { - MailConfigAccount *account; - char *path; - - account = g_slist_nth_data (config->accounts, i); - - /* account info */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_name_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->name); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_drafts_folder_uri_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->drafts_folder_uri); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_sent_folder_uri_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->sent_folder_uri); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_always_cc_%d", i); - e_config_listener_set_boolean (config->db, path, account->always_cc); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_always_cc_addrs_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->cc_addrs); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_always_bcc_%d", i); - e_config_listener_set_boolean (config->db, path, account->always_bcc); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_always_bcc_addrs_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->bcc_addrs); - g_free (path); - - /* account pgp options */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_key_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->pgp_key); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_always_sign_%d", i); - e_config_listener_set_boolean (config->db, path, account->pgp_always_sign); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_no_imip_sign_%d", i); - e_config_listener_set_boolean (config->db, path, account->pgp_no_imip_sign); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_encrypt_to_self_%d", i); - e_config_listener_set_boolean (config->db, path, account->pgp_encrypt_to_self); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_pgp_always_trust_%d", i); - e_config_listener_set_boolean (config->db, path, account->pgp_always_trust); - g_free (path); - - /* account s/mime options */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_smime_key_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->smime_key); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_smime_always_sign_%d", i); - e_config_listener_set_boolean (config->db, path, account->smime_always_sign); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/account_smime_encrypt_to_self_%d", i); - e_config_listener_set_boolean (config->db, path, account->smime_encrypt_to_self); - g_free (path); - - /* identity info */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_name_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->id->name); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_address_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->id->address); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_reply_to_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->id->reply_to); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_organization_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->id->organization); - g_free (path); - - mail_config_write_account_sig (account, i); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/identity_autogenerated_signature_%d", i); - e_config_listener_set_boolean (config->db, path, account->id->auto_signature); - g_free (path); - - /* source info */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_url_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->source->url); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_keep_on_server_%d", i); - e_config_listener_set_boolean (config->db, path, account->source->keep_on_server); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_auto_check_%d", i); - e_config_listener_set_boolean (config->db, path, account->source->auto_check); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_auto_check_time_%d", i); - e_config_listener_set_long (config->db, path, account->source->auto_check_time); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_enabled_%d", i); - e_config_listener_set_boolean (config->db, path, account->source->enabled); - g_free (path); - - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/source_save_passwd_%d", i); - e_config_listener_set_boolean (config->db, path, account->source->save_passwd); - g_free (path); - - /* transport info */ - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/transport_url_%d", i); - e_config_listener_set_string_wrapper (config->db, path, account->transport->url); - g_free (path); + list = NULL; + tail = (GSList *) &list; + + l = config->accounts; + while (l != NULL) { + if ((xmlbuf = account_to_xml ((MailConfigAccount *) l->data))) { + n = g_slist_alloc (); + n->data = xmlbuf; + n->next = NULL; + + tail->next = n; + tail = n; + } - path = g_strdup_printf ("/apps/Evolution/Mail/Accounts/transport_save_passwd_%d", i); - e_config_listener_set_boolean (config->db, path, account->transport->save_passwd); - g_free (path); + l = l->next; } - -#if 0 - CORBA_exception_init (&ev); - Bonobo_ConfigDatabase_sync (config->db, &ev); - CORBA_exception_free (&ev); -#endif + + gconf_client_set_list (config->gconf, "/apps/evolution/mail/accounts", GCONF_VALUE_STRING, list, NULL); + + l = list; + while (l != NULL) { + n = l->next; + g_free (l->data); + g_slist_free_1 (l); + l = n; + } + + gconf_client_suggest_sync (config->gconf, NULL); } static gboolean @@ -1141,11 +819,14 @@ hash_save_state (gpointer key, gpointer value, gpointer user_data) char *path; gboolean bool = GPOINTER_TO_INT (value); +#warning "need to rewrite hash_save_state(), probably shouldn't use gconf tho" +#if 0 path = g_strconcat ("/apps/Evolution/Mail/", (char *)user_data, "/", (char *)key, NULL); e_config_listener_set_boolean (config->db, path, bool); g_free (path); g_free (key); +#endif return TRUE; } @@ -1153,7 +834,6 @@ hash_save_state (gpointer key, gpointer value, gpointer user_data) void mail_config_write_on_exit (void) { - CORBA_Environment ev; MailConfigAccount *account; const GSList *accounts; char *path, *p; @@ -1164,102 +844,6 @@ mail_config_write_on_exit (void) config_write_timeout = 0; mail_config_write (); } - - /* Show Messages Threaded */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Display/thread_list", config->thread_list); - - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Display/thread_subject", config->thread_subject); - - /* Show Message Preview */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Display/preview_pane",config->show_preview); - - /* Hide deleted automatically */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Display/hide_deleted", config->hide_deleted); - - /* Size of vpaned in mail view */ - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Display/paned_size", config->paned_size); - - /* Mark as seen toggle */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Display/do_seen_timeout", config->do_seen_timeout); - /* Mark as seen timeout */ - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Display/seen_timeout", config->seen_timeout); - - /* Format */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Format/send_html", config->send_html); - - /* Confirm Sending Unwanted HTML */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Format/confirm_unwanted_html", config->confirm_unwanted_html); - - /* Citation */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Display/citation_highlight", config->citation_highlight); - - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Display/citation_color", config->citation_color); - - /* Goto next folder */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/MessageList/goto_next_folder", config->goto_next_folder); - - /* Empty Subject */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Prompts/empty_subject", config->prompt_empty_subject); - - /* Only Bcc */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Prompts/only_bcc", config->prompt_only_bcc); - - /* Expunge */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Prompts/confirm_expunge", config->confirm_expunge); - - /* Goto next folder */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Prompts/confirm_goto_next_folder", config->confirm_goto_next_folder); - - /* HTTP images */ - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Display/http_images", config->http_mode); - - /* Forwarding */ - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Format/default_forward_style", config->default_forward_style); - - /* Replying */ - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Format/default_reply_style", config->default_reply_style); - - /* Message Display */ - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Format/message_display_style", config->message_display_style); - - /* Default charset */ - e_config_listener_set_string_wrapper (config->db, "/apps/Evolution/Mail/Format/default_charset", config->default_charset); - - /* Trash folders */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Trash/empty_on_exit", config->empty_trash_on_exit); - - /* Filter logging */ - e_config_listener_set_boolean (config->db, "/apps/Evolution/Mail/Filters/log", config->filter_log); - - e_config_listener_set_string_wrapper (config->db, "/apps/Evolution/Mail/Filters/log_path", config->filter_log_path); - - /* New Mail Notification */ - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Notify/new_mail_notification", config->notify); - - e_config_listener_set_string_wrapper (config->db, "/apps/Evolution/Mail/Notify/new_mail_notification_sound_file", config->notify_filename); - - /* X-Mailer Display */ - e_config_listener_set_long (config->db, "/apps/Evolution/Mail/Display/x_mailer_display_style", config->x_mailer_display_style); - - /* last filesel dir */ - e_config_listener_set_string_wrapper (config->db, "/apps/Evolution/Mail/Filesel/last_filesel_dir", config->last_filesel_dir); - - /* Color labels */ - /* Note: we avoid having to malloc/free 10 times this way... */ - path = g_malloc (sizeof ("/apps/Evolution/Mail/Labels/") + sizeof ("label_#") + 1); - strcpy (path, "/apps/Evolution/Mail/Labels/label_#"); - p = path + strlen (path) - 1; - for (i = 0; i < 5; i++) { - *p = '0' + i; - e_config_listener_set_string_wrapper (config->db, path, config->labels[i].name); - } - strcpy (path, "/apps/Evolution/Mail/Labels/color_#"); - p = path + strlen (path) - 1; - for (i = 0; i < 5; i++) { - *p = '0' + i; - e_config_listener_set_long (config->db, path, config->labels[i].color); - } - g_free (path); /* Message Threading */ if (config->threaded_hash) @@ -1268,17 +852,12 @@ mail_config_write_on_exit (void) /* Message Preview */ if (config->preview_hash) g_hash_table_foreach_remove (config->preview_hash, hash_save_state, "Preview"); - -#if 0 - CORBA_exception_init (&ev); - Bonobo_ConfigDatabase_sync (config->db, &ev); - CORBA_exception_free (&ev); -#endif + /* Passwords */ /* then we make sure the ones we want to remember are in the session cache */ - accounts = mail_config_get_accounts (); + accounts = config->accounts; for ( ; accounts; accounts = accounts->next) { char *passwd; account = accounts->data; @@ -1301,7 +880,7 @@ mail_config_write_on_exit (void) e_passwords_clear_component_passwords ("Mail"); /* then we remember them */ - accounts = mail_config_get_accounts (); + accounts = config->accounts; for ( ; accounts; accounts = accounts->next) { account = accounts->data; if (account->source->save_passwd && account->source->url) @@ -1346,32 +925,10 @@ uri_to_key (const char *uri) } gboolean -mail_config_get_thread_subject (void) -{ - return config->thread_subject; -} - -void -mail_config_set_thread_subject (gboolean thread_subject) -{ - config->thread_subject = thread_subject; -} - -gboolean -mail_config_get_empty_trash_on_exit (void) -{ - return config->empty_trash_on_exit; -} - -void -mail_config_set_empty_trash_on_exit (gboolean value) -{ - config->empty_trash_on_exit = value; -} - -gboolean mail_config_get_show_preview (const char *uri) { +#warning "FIXME: need to rework how we save state, probably shouldn't use gconf" +#if 0 if (uri && *uri) { gpointer key, val; char *dbkey; @@ -1398,10 +955,11 @@ mail_config_get_show_preview (const char *uri) return GPOINTER_TO_INT (val); } } +#endif /* return the default value */ - return config->show_preview; + return gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/show_preview", NULL); } void @@ -1422,13 +980,14 @@ mail_config_set_show_preview (const char *uri, gboolean value) g_hash_table_insert (config->preview_hash, dbkey, GINT_TO_POINTER (value)); } - } else - config->show_preview = value; + } } gboolean mail_config_get_thread_list (const char *uri) { +#warning "FIXME: need to rework how we save state, probably shouldn't use gconf" +#if 0 if (uri && *uri) { gpointer key, val; char *dbkey; @@ -1455,10 +1014,11 @@ mail_config_get_thread_list (const char *uri) return GPOINTER_TO_INT (val); } } +#endif /* return the default value */ - return config->thread_list; + return gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/thread_list", NULL); } void @@ -1479,303 +1039,7 @@ mail_config_set_thread_list (const char *uri, gboolean value) g_hash_table_insert (config->threaded_hash, dbkey, GINT_TO_POINTER (value)); } - } else - config->thread_list = value; -} - -gboolean -mail_config_get_filter_log (void) -{ - return config->filter_log; -} - -void -mail_config_set_filter_log (gboolean value) -{ - config->filter_log = value; -} - -const char * -mail_config_get_filter_log_path (void) -{ - return config->filter_log_path; -} - -void -mail_config_set_filter_log_path (const char *path) -{ - g_free (config->filter_log_path); - config->filter_log_path = g_strdup (path); -} - -const char * -mail_config_get_last_filesel_dir (void) -{ - if (config->last_filesel_dir) - return config->last_filesel_dir; - else - return g_get_home_dir (); -} - -void -mail_config_set_last_filesel_dir (const char *path) -{ - g_free (config->last_filesel_dir); - config->last_filesel_dir = g_strdup (path); -} - -gboolean -mail_config_get_hide_deleted (void) -{ - return config->hide_deleted; -} - -void -mail_config_set_hide_deleted (gboolean value) -{ - config->hide_deleted = value; -} - -int -mail_config_get_paned_size (void) -{ - return config->paned_size; -} - -void -mail_config_set_paned_size (int value) -{ - config->paned_size = value; -} - -gboolean -mail_config_get_send_html (void) -{ - return config->send_html; -} - -void -mail_config_set_send_html (gboolean send_html) -{ - config->send_html = send_html; -} - -gboolean -mail_config_get_confirm_unwanted_html (void) -{ - return config->confirm_unwanted_html; -} - -void -mail_config_set_confirm_unwanted_html (gboolean confirm) -{ - config->confirm_unwanted_html = confirm; -} - -gboolean -mail_config_get_citation_highlight (void) -{ - return config->citation_highlight; -} - -void -mail_config_set_citation_highlight (gboolean citation_highlight) -{ - config->citation_highlight = citation_highlight; -} - -guint32 -mail_config_get_citation_color (void) -{ - return config->citation_color; -} - -void -mail_config_set_citation_color (guint32 citation_color) -{ - config->citation_color = citation_color; -} - -gboolean -mail_config_get_do_seen_timeout (void) -{ - return config->do_seen_timeout; -} - -void -mail_config_set_do_seen_timeout (gboolean do_seen_timeout) -{ - config->do_seen_timeout = do_seen_timeout; -} - -int -mail_config_get_mark_as_seen_timeout (void) -{ - return config->seen_timeout; -} - -void -mail_config_set_mark_as_seen_timeout (int timeout) -{ - config->seen_timeout = timeout; -} - -gboolean -mail_config_get_prompt_empty_subject (void) -{ - return config->prompt_empty_subject; -} - -void -mail_config_set_prompt_empty_subject (gboolean value) -{ - config->prompt_empty_subject = value; -} - -gboolean -mail_config_get_prompt_only_bcc (void) -{ - return config->prompt_only_bcc; -} - -void -mail_config_set_prompt_only_bcc (gboolean value) -{ - config->prompt_only_bcc = value; -} - -gboolean -mail_config_get_confirm_expunge (void) -{ - return config->confirm_expunge; -} - -void -mail_config_set_confirm_expunge (gboolean value) -{ - config->confirm_expunge = value; -} - -gboolean -mail_config_get_confirm_goto_next_folder (void) -{ - return config->confirm_goto_next_folder; -} - -void -mail_config_set_confirm_goto_next_folder (gboolean value) -{ - config->confirm_goto_next_folder = value; -} - -gboolean -mail_config_get_goto_next_folder (void) -{ - return config->goto_next_folder; -} - -void -mail_config_set_goto_next_folder (gboolean value) -{ - config->goto_next_folder = value; -} - -MailConfigHTTPMode -mail_config_get_http_mode (void) -{ - return config->http_mode; -} - -void -mail_config_set_http_mode (MailConfigHTTPMode mode) -{ - config->http_mode = mode; -} - -MailConfigForwardStyle -mail_config_get_default_forward_style (void) -{ - return config->default_forward_style; -} - -void -mail_config_set_default_forward_style (MailConfigForwardStyle style) -{ - config->default_forward_style = style; -} - -MailConfigReplyStyle -mail_config_get_default_reply_style (void) -{ - return config->default_reply_style; -} - -void -mail_config_set_default_reply_style (MailConfigReplyStyle style) -{ - config->default_reply_style = style; -} - -MailConfigDisplayStyle -mail_config_get_message_display_style (void) -{ - return config->message_display_style; -} - -void -mail_config_set_message_display_style (MailConfigDisplayStyle style) -{ - config->message_display_style = style; -} - -const char * -mail_config_get_default_charset (void) -{ - return config->default_charset; -} - -void -mail_config_set_default_charset (const char *charset) -{ - g_free (config->default_charset); - config->default_charset = g_strdup (charset); -} - -MailConfigNewMailNotify -mail_config_get_new_mail_notify (void) -{ - return config->notify; -} - -void -mail_config_set_new_mail_notify (MailConfigNewMailNotify type) -{ - config->notify = type; -} - -const char * -mail_config_get_new_mail_notify_sound_file (void) -{ - return config->notify_filename; -} - -void -mail_config_set_new_mail_notify_sound_file (const char *filename) -{ - g_free (config->notify_filename); - config->notify_filename = g_strdup (filename); -} - -MailConfigXMailerDisplayStyle -mail_config_get_x_mailer_display_style (void) -{ - return config->x_mailer_display_style; -} - -void -mail_config_set_x_mailer_display_style (MailConfigXMailerDisplayStyle style) -{ - config->x_mailer_display_style = style; + } } const char * @@ -2197,25 +1461,6 @@ mail_config_uri_deleted(GCompareFunc uri_cmp, const char *uri) mail_config_write(); } -GSList * -mail_config_get_sources (void) -{ - const GSList *accounts; - GSList *sources = NULL; - - accounts = mail_config_get_accounts (); - while (accounts) { - const MailConfigAccount *account = accounts->data; - - if (account->source) - sources = g_slist_append (sources, account->source); - - accounts = accounts->next; - } - - return sources; -} - void mail_config_service_set_save_passwd (MailConfigService *service, gboolean save_passwd) { @@ -2398,6 +1643,7 @@ impl_GNOME_Evolution_MailConfig_addAccount (PortableServer_Servant servant, mail_account = g_new0 (MailConfigAccount, 1); mail_account->name = g_strdup (account->name); + mail_account->enabled = source.enabled; /* Copy ID */ id = account->id; @@ -2421,7 +1667,6 @@ impl_GNOME_Evolution_MailConfig_addAccount (PortableServer_Servant servant, mail_service->auto_check = source.auto_check; mail_service->auto_check_time = source.auto_check_time; mail_service->save_passwd = source.save_passwd; - mail_service->enabled = source.enabled; mail_account->source = mail_service; @@ -2438,13 +1683,12 @@ impl_GNOME_Evolution_MailConfig_addAccount (PortableServer_Servant servant, mail_service->auto_check = transport.auto_check; mail_service->auto_check_time = transport.auto_check_time; mail_service->save_passwd = transport.save_passwd; - mail_service->enabled = transport.enabled; mail_account->transport = mail_service; /* Add new account */ mail_config_add_account (mail_account); - + /* Don't write out the config right away in case the remote * component is creating or removing multiple accounts. */ @@ -2713,6 +1957,7 @@ mail_config_signature_emit_event (MailConfigSigEvent event, MailConfigSignature gchar * mail_config_signature_run_script (gchar *script) { + GConfClient *gconf; int result, status; int in_fds[2]; pid_t pid; @@ -2722,6 +1967,8 @@ mail_config_signature_run_script (gchar *script) return NULL; } + gconf = gconf_client_get_default (); + if (!(pid = fork ())) { /* child process */ int maxfd, i; @@ -2781,7 +2028,8 @@ mail_config_signature_run_script (gchar *script) filtered_stream = camel_stream_filter_new_with_stream (stream); camel_object_unref (stream); - charset = mail_config_get_default_charset (); + /* FIXME: if the composer ever gets it's own charset setting, use that instead? */ + charset = gconf_client_get_string (gconf, "/apps/evolution/mail/format/charset", NULL); charenc = (CamelMimeFilter *) camel_mime_filter_charset_new_convert (charset, "utf-8"); camel_stream_filter_add (filtered_stream, charenc); camel_object_unref (charenc); @@ -2830,12 +2078,6 @@ mail_config_signature_set_html (MailConfigSignature *sig, gboolean html) } int -mail_config_get_week_start_day(void) -{ - return config->week_start_day; -} - -int mail_config_get_time_24hour(void) { return config->time_24hour; diff --git a/mail/mail-config.h b/mail/mail-config.h index 3b8732b97b..792cdc89ca 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -55,12 +55,13 @@ typedef struct { gboolean auto_check; int auto_check_time; gboolean save_passwd; - gboolean enabled; } MailConfigService; typedef struct { char *name; + gboolean enabled; + MailConfigIdentity *id; MailConfigService *source; MailConfigService *transport; @@ -157,17 +158,6 @@ void mail_config_write_on_exit (void); gboolean mail_config_is_configured (void); gboolean mail_config_is_corrupt (void); -gboolean mail_config_get_filter_log (void); -void mail_config_set_filter_log (gboolean value); -const char *mail_config_get_filter_log_path (void); -void mail_config_set_filter_log_path (const char *path); - -const char *mail_config_get_last_filesel_dir (void); -void mail_config_set_last_filesel_dir (const char *path); - -gboolean mail_config_get_empty_trash_on_exit (void); -void mail_config_set_empty_trash_on_exit (gboolean value); - gboolean mail_config_get_thread_list (const char *uri); void mail_config_set_thread_list (const char *uri, gboolean value); @@ -177,73 +167,15 @@ void mail_config_set_thread_subject (gboolean thread_subject); gboolean mail_config_get_show_preview (const char *uri); void mail_config_set_show_preview (const char *uri, gboolean value); -gboolean mail_config_get_hide_deleted (void); -void mail_config_set_hide_deleted (gboolean value); - int mail_config_get_paned_size (void); void mail_config_set_paned_size (int size); -gboolean mail_config_get_send_html (void); -void mail_config_set_send_html (gboolean send_html); - -gboolean mail_config_get_confirm_unwanted_html (void); -void mail_config_set_confirm_unwanted_html (gboolean html_warning); - -gboolean mail_config_get_citation_highlight (void); -void mail_config_set_citation_highlight (gboolean); - -guint32 mail_config_get_citation_color (void); -void mail_config_set_citation_color (guint32); - const char *mail_config_get_label_name (int label); void mail_config_set_label_name (int label, const char *name); guint32 mail_config_get_label_color (int label); void mail_config_set_label_color (int label, guint32 color); const char *mail_config_get_label_color_string (int label); -gint mail_config_get_do_seen_timeout (void); -void mail_config_set_do_seen_timeout (gboolean do_seen_timeout); - -int mail_config_get_mark_as_seen_timeout (void); -void mail_config_set_mark_as_seen_timeout (int timeout); - -gboolean mail_config_get_prompt_empty_subject (void); -void mail_config_set_prompt_empty_subject (gboolean value); - -gboolean mail_config_get_prompt_only_bcc (void); -void mail_config_set_prompt_only_bcc (gboolean value); - -gboolean mail_config_get_confirm_expunge (void); -void mail_config_set_confirm_expunge (gboolean value); - -gboolean mail_config_get_confirm_goto_next_folder (void); -void mail_config_set_confirm_goto_next_folder (gboolean value); -gboolean mail_config_get_goto_next_folder (void); -void mail_config_set_goto_next_folder (gboolean value); - -MailConfigHTTPMode mail_config_get_http_mode (void); -void mail_config_set_http_mode (MailConfigHTTPMode); - -MailConfigForwardStyle mail_config_get_default_forward_style (void); -void mail_config_set_default_forward_style (MailConfigForwardStyle style); - -MailConfigReplyStyle mail_config_get_default_reply_style (void); -void mail_config_set_default_reply_style (MailConfigReplyStyle style); - -MailConfigDisplayStyle mail_config_get_message_display_style (void); -void mail_config_set_message_display_style (MailConfigDisplayStyle style); - -MailConfigNewMailNotify mail_config_get_new_mail_notify (void); -void mail_config_set_new_mail_notify (MailConfigNewMailNotify type); -const char *mail_config_get_new_mail_notify_sound_file (void); -void mail_config_set_new_mail_notify_sound_file (const char *filename); - -MailConfigXMailerDisplayStyle mail_config_get_x_mailer_display_style (void); -void mail_config_set_x_mailer_display_style (MailConfigXMailerDisplayStyle style); - -const char *mail_config_get_default_charset (void); -void mail_config_set_default_charset (const char *charset); - void mail_config_service_set_save_passwd (MailConfigService *service, gboolean save_passwd); gboolean mail_config_find_account (const MailConfigAccount *account); @@ -269,9 +201,6 @@ void mail_config_uri_deleted(GCompareFunc uri_cmp, const char *uri); GtkType evolution_mail_config_get_type (void); -/* convenience functions to help ease the transition over to the new codebase */ -GSList *mail_config_get_sources (void); - /* static utility functions */ char *mail_config_folder_to_cachename (CamelFolder *folder, const char *prefix); char *mail_config_folder_to_safe_url (CamelFolder *folder); @@ -282,7 +211,7 @@ gboolean mail_config_check_service (const char *url, CamelProviderType type, GLi gboolean evolution_mail_config_factory_init (void); -GList * mail_config_get_signature_list (void); +GList *mail_config_get_signature_list (void); MailConfigSignature *mail_config_signature_add (gboolean html, const gchar *script); void mail_config_signature_delete (MailConfigSignature *sig); void mail_config_signature_write (MailConfigSignature *sig); @@ -304,11 +233,8 @@ void mail_config_signature_register_client (MailConfigSignatureClient client, gp void mail_config_signature_unregister_client (MailConfigSignatureClient client, gpointer data); void mail_config_signature_emit_event (MailConfigSigEvent event, MailConfigSignature *sig); -void mail_config_write_account_sig (MailConfigAccount *account, gint i); -gchar * mail_config_signature_run_script (gchar *script); - -int mail_config_get_week_start_day(void); -int mail_config_get_time_24hour(void); +void mail_config_write_account_sig (MailConfigAccount *account, int i); +char *mail_config_signature_run_script (char *script); #ifdef __cplusplus } diff --git a/mail/mail-display.c b/mail/mail-display.c index 164372ae5c..122dd04e14 100644 --- a/mail/mail-display.c +++ b/mail/mail-display.c @@ -38,6 +38,9 @@ #include <gtk/gtkinvisible.h> #include <libgnome/gnome-program.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <libgnomevfs/gnome-vfs-mime-handlers.h> #include <libgnomevfs/gnome-vfs.h> #include <bonobo/bonobo-control-frame.h> @@ -235,18 +238,19 @@ make_safe_filename (const char *prefix,CamelMimePart *part) static void save_data_cb (GtkWidget *widget, gpointer user_data) { - GtkFileSelection *file_select = (GtkFileSelection *) - gtk_widget_get_ancestor (widget, GTK_TYPE_FILE_SELECTION); + GtkFileSelection *file_select; + GConfClient *gconf; char *dir; + file_select = (GtkFileSelection *) gtk_widget_get_ancestor (widget, GTK_TYPE_FILE_SELECTION); + /* uh, this doesn't really feel right, but i dont know what to do better */ gtk_widget_hide (GTK_WIDGET (file_select)); - write_data_to_file (user_data, gtk_file_selection_get_filename (file_select), - FALSE); + write_data_to_file (user_data, gtk_file_selection_get_filename (file_select), FALSE); /* preserve the pathname */ dir = g_path_get_dirname (gtk_file_selection_get_filename (file_select)); - mail_config_set_last_filesel_dir (dir); + gconf_client_set_string (gconf, "/apps/evolution/mail/save_dir", dir, NULL); g_free (dir); gtk_widget_destroy (GTK_WIDGET (file_select)); @@ -307,11 +311,15 @@ static void save_part (CamelMimePart *part) { GtkFileSelection *file_select; - char *filename, *base; + char *filename, *dir, *base; + GConfClient *gconf; camel_object_ref (CAMEL_OBJECT (part)); - filename = make_safe_filename (mail_config_get_last_filesel_dir (), part); + gconf = gconf_client_get_default (); + dir = gconf_client_get_string (gconf, "/apps/evolution/mail/save_dir", NULL); + filename = make_safe_filename (dir, part); + g_free (dir); file_select = GTK_FILE_SELECTION ( gtk_file_selection_new (_("Save Attachment"))); @@ -1191,10 +1199,13 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle, gpointer user_data) { MailDisplay *md = user_data; + GConfClient *gconf; GHashTable *urls; CamelMedium *medium; GByteArray *ba; + gconf = gconf_client_get_default (); + urls = g_datalist_get_data (md->data, "part_urls"); g_return_if_fail (urls != NULL); @@ -1252,10 +1263,13 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle, /* See if it's something we can load. */ if (strncmp (url, "http:", 5) == 0 || strncmp (url, "https:", 6) == 0) { - if (mail_config_get_http_mode () == MAIL_CONFIG_HTTP_ALWAYS || + int http_mode; + + http_mode = gconf_client_get_int (gconf, "/apps/evolution/mail/display/load_http_images", NULL); + if (http_mode == MAIL_CONFIG_HTTP_ALWAYS || g_datalist_get_data (md->data, "load_images")) { fetch_remote (md, url, html, handle); - } else if (mail_config_get_http_mode () == MAIL_CONFIG_HTTP_SOMETIMES && + } else if (http_mode == MAIL_CONFIG_HTTP_SOMETIMES && !g_datalist_get_data (md->data, "checking_from")) { const CamelInternetAddress *from; const char *name, *addr; @@ -1264,7 +1278,7 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle, g_datalist_set_data (md->data, "checking_from", GINT_TO_POINTER (1)); /* Make sure we aren't deal w/ some sort of a - pathological message w/o a From: header */ + pathological message w/o a From: header */ if (from != NULL && camel_internet_address_get (from, 0, &name, &addr)) e_book_query_address_default (addr, ebook_callback, md); else @@ -1666,17 +1680,27 @@ mail_text_write (MailDisplayStream *stream, MailDisplay *md, CamelMimePart *part { CamelStreamFilter *filtered_stream; CamelMimeFilter *html_filter; - guint32 flags; + GConfClient *gconf; + guint32 flags, rgb; + GdkColor colour; + char *buf; + + gconf = gconf_client_get_default (); flags = CAMEL_MIME_FILTER_TOHTML_CONVERT_NL | CAMEL_MIME_FILTER_TOHTML_CONVERT_SPACES; if (!printing) flags |= CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS | CAMEL_MIME_FILTER_TOHTML_CONVERT_ADDRESSES; - if (!printing && mail_config_get_citation_highlight ()) + if (!printing && gconf_client_get_bool (gconf, "/apps/evolution/mail/display/mark_citations", NULL)) flags |= CAMEL_MIME_FILTER_TOHTML_MARK_CITATION; - html_filter = camel_mime_filter_tohtml_new (flags, mail_config_get_citation_color ()); + buf = gconf_client_get_string (gconf, "/apps/evolution/mail/display/citation_colour", NULL); + gdk_color_parse (buf ? buf : "#737373", &colour); + g_free (buf); + + rgb = ((colour.red & 0xff00) << 8) | (colour.green & 0xff00) | ((colour.blue & 0xff00) >> 8); + html_filter = camel_mime_filter_tohtml_new (flags, rgb); filtered_stream = camel_stream_filter_new_with_stream ((CamelStream *) stream); camel_stream_filter_add (filtered_stream, html_filter); camel_object_unref (html_filter); @@ -1971,6 +1995,8 @@ static void mail_display_init (GObject *object) { MailDisplay *mail_display = MAIL_DISPLAY (object); + GConfClient *gconf; + int style; mail_display->scroll = NULL; mail_display->html = NULL; @@ -1988,7 +2014,9 @@ mail_display_init (GObject *object) g_object_ref (mail_display->invisible); gtk_object_sink ((GtkObject *) mail_display->invisible); - mail_display->display_style = mail_config_get_message_display_style (); + gconf = gconf_client_get_default (); + style = gconf_client_get_int (gconf, "/apps/evolution/mail/format/message_display_style", NULL); + mail_display->display_style = style; mail_display->printing = FALSE; diff --git a/mail/mail-format.c b/mail/mail-format.c index fefa9ef721..d1583db0fb 100644 --- a/mail/mail-format.c +++ b/mail/mail-format.c @@ -30,6 +30,9 @@ #include <ctype.h> #include <fcntl.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <libgnome/gnome-util.h> #include <libgnomevfs/gnome-vfs-mime-handlers.h> #include <gal/util/e-iconv.h> @@ -913,8 +916,7 @@ write_default_header (CamelMimeMessage *message, MailDisplay *md, static gboolean write_xmailer_header (CamelMimeMessage *message, MailDisplay *md, - MailDisplayStream *stream, - MailConfigXMailerDisplayStyle xm) + MailDisplayStream *stream, int xmask) { const char *xmailer, *evolution; @@ -926,11 +928,11 @@ write_xmailer_header (CamelMimeMessage *message, MailDisplay *md, } evolution = strstr (xmailer, "Evolution"); - if ((xm & MAIL_CONFIG_XMAILER_OTHER) || - (evolution && (xm & MAIL_CONFIG_XMAILER_EVO))) + if ((xmask & MAIL_CONFIG_XMAILER_OTHER) || + (evolution && (xmask & MAIL_CONFIG_XMAILER_EVO))) write_text_header (stream, _("Mailer"), xmailer, WRITE_BOLD); - return evolution != NULL && (xm & MAIL_CONFIG_XMAILER_RUPERT_APPROVED); + return evolution != NULL && (xmask & MAIL_CONFIG_XMAILER_RUPERT_APPROVED); } #define COLOR_IS_LIGHT(r, g, b) ((r + g + b) > (128 * 3)) @@ -938,12 +940,15 @@ write_xmailer_header (CamelMimeMessage *message, MailDisplay *md, static void write_headers (MailDisplayStream *stream, MailDisplay *md, CamelMimeMessage *message) { - MailConfigXMailerDisplayStyle xm = mail_config_get_x_mailer_display_style (); gboolean full = (md->display_style == MAIL_CONFIG_DISPLAY_FULL_HEADERS); char bgcolor[7], fontcolor[7]; GtkStyle *style = NULL; gboolean evo_icon = FALSE; - int i; + GConfClient *gconf; + int xmask, i; + + gconf = gconf_client_get_default (); + xmask = gconf_client_get_int (gconf, "/apps/evolution/mail/display/xmailer_mask", NULL); /* My favorite thing to do... muck around with colors so we respect people's stupid themes. However, we only do this if we are rendering to the screen -- we ignore the theme @@ -1026,8 +1031,8 @@ write_headers (MailDisplayStream *stream, MailDisplay *md, CamelMimeMessage *mes } else { for (i = 0; i < sizeof (default_headers) / sizeof (default_headers[0]); i++) write_default_header (message, md, stream, i, 0); - if (xm != MAIL_CONFIG_XMAILER_NONE) - evo_icon = write_xmailer_header (message, md, stream, xm); + if (xmask != MAIL_CONFIG_XMAILER_NONE) + evo_icon = write_xmailer_header (message, md, stream, xmask); } /* Close off the internal header table */ @@ -1092,7 +1097,10 @@ mail_format_data_wrapper_write_to_stream (CamelDataWrapper *wrapper, MailDisplay if (wrapper->rawtext || (mail_display && mail_display->charset)) { CamelMimeFilterCharset *filter; - const char *charset; + GConfClient *gconf; + char *charset; + + gconf = gconf_client_get_default (); if (!wrapper->rawtext) { /* data wrapper had been successfully converted to UTF-8 using the mime @@ -1102,31 +1110,35 @@ mail_format_data_wrapper_write_to_stream (CamelDataWrapper *wrapper, MailDisplay /* get the original charset of the mime part */ content_type = camel_data_wrapper_get_mime_type_field (wrapper); - charset = content_type ? header_content_type_param (content_type, "charset") : NULL; + charset = (char *) (content_type ? header_content_type_param (content_type, "charset") : NULL); if (!charset) - charset = mail_config_get_default_charset (); + charset = gconf_client_get_string (gconf, "/apps/evolution/mail/format/charset", NULL); + else + charset = g_strdup (charset); /* since the content is already in UTF-8, we need to decode into the original charset before we can convert back to UTF-8 using the charset the user is overriding with... */ - filter = camel_mime_filter_charset_new_convert ("utf-8", charset); - if (filter) { + if ((filter = camel_mime_filter_charset_new_convert ("utf-8", charset))) { camel_stream_filter_add (filtered_stream, CAMEL_MIME_FILTER (filter)); camel_object_unref (filter); } + + g_free (charset); } /* find out the charset the user wants to override to */ if (mail_display && mail_display->charset) charset = mail_display->charset; else - charset = mail_config_get_default_charset (); + charset = gconf_client_get_string (gconf, "/apps/evolution/mail/format/charset", NULL); - filter = camel_mime_filter_charset_new_convert (charset, "utf-8"); - if (filter) { + if ((filter = camel_mime_filter_charset_new_convert (charset, "utf-8"))) { camel_stream_filter_add (filtered_stream, CAMEL_MIME_FILTER (filter)); camel_object_unref (filter); } + + g_free (charset); } written = camel_data_wrapper_write_to_stream (wrapper, CAMEL_STREAM (filtered_stream)); @@ -1185,16 +1197,26 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, CamelStreamFilter *filtered_stream; CamelMimeFilter *html_filter; CamelDataWrapper *wrapper; - guint32 flags, colour = 0; CamelContentType *type; const char *format; + GConfClient *gconf; + guint32 flags, rgb = 0; + GdkColor colour; + char *buf; + + gconf = gconf_client_get_default (); flags = CAMEL_MIME_FILTER_TOHTML_CONVERT_NL | CAMEL_MIME_FILTER_TOHTML_CONVERT_SPACES; if (!md->printing) { flags |= CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS | CAMEL_MIME_FILTER_TOHTML_CONVERT_ADDRESSES; - if (mail_config_get_citation_highlight ()) { + if (gconf_client_get_bool (gconf, "/apps/evolution/mail/display/mark_citations", NULL)) { flags |= CAMEL_MIME_FILTER_TOHTML_MARK_CITATION; - colour = mail_config_get_citation_color (); + + buf = gconf_client_get_string (gconf, "/apps/evolution/mail/display/citation_colour", NULL); + gdk_color_parse (buf ? buf : "#737373", &colour); + g_free (buf); + + rgb = ((colour.red & 0xff00) << 8) | (colour.green & 0xff00) | ((colour.blue & 0xff00) >> 8); } } @@ -1204,7 +1226,7 @@ handle_text_plain (CamelMimePart *part, const char *mime_type, if (format && !strcasecmp (format, "flowed")) flags |= CAMEL_MIME_FILTER_TOHTML_FORMAT_FLOWED; - html_filter = camel_mime_filter_tohtml_new (flags, colour); + html_filter = camel_mime_filter_tohtml_new (flags, rgb); filtered_stream = camel_stream_filter_new_with_stream ((CamelStream *) stream); camel_stream_filter_add (filtered_stream, html_filter); camel_object_unref (html_filter); diff --git a/mail/mail-preferences.c b/mail/mail-preferences.c index 1d13e17ae9..b10c006d22 100644 --- a/mail/mail-preferences.c +++ b/mail/mail-preferences.c @@ -237,7 +237,7 @@ mail_preferences_construct (MailPreferences *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); + bool = gconf_client_get_bool (prefs->gconf, "/apps/evolution/mail/display/mark_citations", NULL); gtk_toggle_button_set_active (prefs->citation_highlight, bool); g_signal_connect (prefs->citation_highlight, "toggled", G_CALLBACK (toggle_button_toggled), prefs); @@ -402,7 +402,7 @@ mail_preferences_apply (MailPreferences *prefs) gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/format/charset", string, NULL); g_free (string); - gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/highlight_citations", + gconf_client_set_bool (prefs->gconf, "/apps/evolution/mail/display/mark_citations", gtk_toggle_button_get_active (prefs->citation_highlight), NULL); rgb = colorpicker_get_color (prefs->citation_color); diff --git a/mail/mail-send-recv.c b/mail/mail-send-recv.c index fc8b05a750..81f2eaf8c2 100644 --- a/mail/mail-send-recv.c +++ b/mail/mail-send-recv.c @@ -280,11 +280,11 @@ static send_info_t get_receive_type(const char *url) } static struct _send_data * -build_dialogue (GSList *sources, CamelFolder *outbox, const char *destination) +build_dialogue (const GSList *accounts, CamelFolder *outbox, const char *destination) { GtkDialog *gd; GtkTable *table; - int row; + int row, num_sources; GList *list = NULL; struct _send_data *data; GtkWidget *send_icon, *recv_icon; @@ -294,7 +294,8 @@ build_dialogue (GSList *sources, CamelFolder *outbox, const char *destination) GtkHSeparator *line; struct _send_info *info; char *pretty_url; - + const GSList *l; + gd = (GtkDialog *)send_recv_dialogue = gtk_dialog_new_with_buttons(_("Send & Receive Mail"), NULL, 0, NULL); stop = (GtkButton *)gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_button_set_label(stop, _("Cancel All")); @@ -302,18 +303,31 @@ build_dialogue (GSList *sources, CamelFolder *outbox, const char *destination) g_object_set(gd, "resizable", FALSE, NULL); gnome_window_icon_set_from_file (GTK_WINDOW (gd), EVOLUTION_ICONSDIR "/send-receive.xpm"); - table = (GtkTable *)gtk_table_new (g_slist_length (sources), 4, FALSE); + num_sources = 0; + l = accounts; + while (l != NULL) { + MailConfigAccount *account = l->data; + + if (account->source && account->source->url) + num_sources++; + + l = l->next; + } + + table = (GtkTable *)gtk_table_new (num_sources, 4, FALSE); gtk_box_pack_start (GTK_BOX (gd->vbox), GTK_WIDGET (table), TRUE, TRUE, 0); - + /* must bet setup after send_recv_dialogue as it may re-trigger send-recv button */ data = setup_send_data (); row = 0; - while (sources) { - MailConfigService *source = sources->data; + while (accounts) { + MailConfigAccount *account = accounts->data; + MailConfigService *source; - if (!source->url || !source->enabled) { - sources = sources->next; + source = account->source; + if (!account->enabled || !source || !source->url) { + accounts = accounts->next; continue; } @@ -324,12 +338,13 @@ build_dialogue (GSList *sources, CamelFolder *outbox, const char *destination) type = get_receive_type (source->url); if (type == SEND_INVALID) { - sources = sources->next; + accounts = accounts->next; continue; } info = g_malloc0 (sizeof (*info)); info->type = type; + d(printf("adding source %s\n", source->url)); info->uri = g_strdup (source->url); @@ -342,7 +357,7 @@ build_dialogue (GSList *sources, CamelFolder *outbox, const char *destination) list = g_list_prepend (list, info); } else if (info->bar != NULL) { /* incase we get the same source pop up again */ - sources = sources->next; + accounts = accounts->next; continue; } else if (info->timeout_id == 0) info->timeout_id = gtk_timeout_add (STATUS_TIMEOUT, operation_status_timeout, info); @@ -375,7 +390,7 @@ build_dialogue (GSList *sources, CamelFolder *outbox, const char *destination) info->data = data; g_signal_connect(stop, "clicked", G_CALLBACK(receive_cancel), info); - sources = sources->next; + accounts = accounts->next; row = row + 2; } @@ -650,12 +665,12 @@ receive_update_got_store (char *uri, CamelStore *store, void *data) void mail_send_receive (void) { - GSList *sources; + const GSList *accounts; GList *scan; struct _send_data *data; extern CamelFolder *outbox_folder; const MailConfigAccount *account; - + if (send_recv_dialogue != NULL) { if (GTK_WIDGET_REALIZED(send_recv_dialogue)) { gdk_window_show(send_recv_dialogue->window); @@ -667,18 +682,18 @@ void mail_send_receive (void) if (!camel_session_is_online (session)) return; - sources = mail_config_get_sources(); - if (!sources) + if (!(accounts = mail_config_get_accounts ())) return; - account = mail_config_get_default_account(); + + account = mail_config_get_default_account (); if (!account || !account->transport) return; - data = build_dialogue(sources, outbox_folder, account->transport->url); + data = build_dialogue (accounts, outbox_folder, account->transport->url); scan = data->infos; while (scan) { struct _send_info *info = scan->data; - + switch(info->type) { case SEND_RECEIVE: mail_fetch_mail(info->uri, info->keep, @@ -748,26 +763,28 @@ void mail_autoreceive_setup (void) { GHashTable *set_hash; - GSList *sources; - - sources = mail_config_get_sources(); + const GSList *accounts; - if (!sources) + if (!(accounts = mail_config_get_accounts ())) return; - + if (auto_active == NULL) auto_active = g_hash_table_new(g_str_hash, g_str_equal); - + set_hash = g_hash_table_new(g_str_hash, g_str_equal); g_hash_table_foreach(auto_active, (GHFunc)auto_setup_set, set_hash); - - while (sources) { - MailConfigService *source = sources->data; - if (source->url && source->auto_check && source->enabled) { + + while (accounts) { + MailConfigAccount *account = accounts->data; + MailConfigService *source; + + source = account->source; + + if (account->enabled && source && source->url && source->auto_check) { struct _auto_data *info; - + d(printf("setting up auto-receive mail for : %s\n", source->url)); - + g_hash_table_remove(set_hash, source->url); info = g_hash_table_lookup(auto_active, source->url); if (info) { @@ -789,8 +806,8 @@ mail_autoreceive_setup (void) /*mail_receive_uri(source->url, source->keep_on_server);*/ } } - - sources = sources->next; + + accounts = accounts->next; } g_hash_table_foreach(set_hash, (GHFunc)auto_clean_set, auto_active); diff --git a/mail/mail-session.c b/mail/mail-session.c index 6682bbba58..05375d992f 100644 --- a/mail/mail-session.c +++ b/mail/mail-session.c @@ -29,6 +29,9 @@ #include <gtk/gtkdialog.h> #include <gtk/gtkstock.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <libgnome/gnome-config.h> #include <libgnome/gnome-sound.h> @@ -746,10 +749,14 @@ static CamelFilterDriver * main_get_filter_driver (CamelSession *session, const char *type, CamelException *ex) { CamelFilterDriver *driver; - RuleContext *fc; GString *fsearch, *faction; FilterRule *rule = NULL; char *user, *system; + GConfClient *gconf; + RuleContext *fc; + long notify; + + gconf = gconf_client_get_default (); user = g_strdup_printf ("%s/filters.xml", evolution_dir); system = EVOLUTION_DATADIR "/evolution/filtertypes.xml"; @@ -760,16 +767,19 @@ main_get_filter_driver (CamelSession *session, const char *type, CamelException driver = camel_filter_driver_new (session); camel_filter_driver_set_folder_func (driver, get_folder, NULL); - if (mail_config_get_filter_log ()) { + if (gconf_client_get_bool (gconf, "/apps/evolution/mail/filters/log", NULL)) { MailSession *ms = (MailSession *) session; if (ms->filter_logfile == NULL) { - const char *filename; + char *filename; - filename = mail_config_get_filter_log_path (); - if (filename) + filename = gconf_client_get_string (gconf, "/apps/evolution/mail/filters/logfile", NULL); + if (filename) { ms->filter_logfile = fopen (filename, "a+"); + g_free (filename); + } } + if (ms->filter_logfile) camel_filter_driver_set_logfile (driver, ms->filter_logfile); } @@ -786,19 +796,26 @@ main_get_filter_driver (CamelSession *session, const char *type, CamelException /* FIXME: we need a way to distinguish between filtering new mail and re-filtering a folder because both use the "incoming" filter type */ - if (mail_config_get_new_mail_notify () && !strcmp (type, "incoming")) { + notify = gconf_client_get_bool (gconf, "/apps/evolution/mail/notify/type", NULL); + if (notify != MAIL_CONFIG_NOTIFY_NOT && !strcmp (type, "incoming")) { + char *filename; + g_string_truncate (faction, 0); g_string_append (faction, "(only-once \"new-mail-notification\" "); - switch (mail_config_get_new_mail_notify ()) { + switch (notify) { + case MAIL_CONFIG_NOTIFY_PLAY_SOUND: + filename = gconf_client_get_string (gconf, "/apps/evolution/mail/notify/sound", NULL); + if (filename) { + g_string_append_printf (faction, "\"(play-sound \\\"%s\\\")\"", filename); + g_free (filename); + break; + } + /* fall through */ case MAIL_CONFIG_NOTIFY_BEEP: g_string_append (faction, "\"(beep)\""); break; - case MAIL_CONFIG_NOTIFY_PLAY_SOUND: - g_string_append_printf (faction, "\"(play-sound \\\"%s\\\")\"", - mail_config_get_new_mail_notify_sound_file ()); - break; default: break; } diff --git a/mail/mail-tools.c b/mail/mail-tools.c index 96141e91ad..83abe3e1a2 100644 --- a/mail/mail-tools.c +++ b/mail/mail-tools.c @@ -32,6 +32,9 @@ #include <errno.h> #include <string.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <camel/camel.h> #include <camel/camel-vee-folder.h> @@ -52,12 +55,13 @@ CamelFolder * mail_tool_get_local_inbox (CamelException *ex) { - gchar *url; CamelFolder *folder; - + char *url; + url = g_strdup_printf("file://%s/local/Inbox", evolution_dir); folder = mail_tool_uri_to_folder (url, 0, ex); g_free (url); + return folder; } @@ -66,14 +70,14 @@ mail_tool_get_inbox (const gchar *url, CamelException *ex) { CamelStore *store; CamelFolder *folder; - + store = camel_session_get_store (session, url, ex); if (!store) return NULL; - + folder = camel_store_get_inbox (store, ex); camel_object_unref (store); - + return folder; } @@ -82,20 +86,20 @@ mail_tool_get_trash (const gchar *url, int connect, CamelException *ex) { CamelStore *store; CamelFolder *trash; - + if (connect) store = camel_session_get_store (session, url, ex); else - store = (CamelStore *)camel_session_get_service(session, url, CAMEL_PROVIDER_STORE, ex); - + store = (CamelStore *) camel_session_get_service (session, url, CAMEL_PROVIDER_STORE, ex); + if (!store) return NULL; - if (connect || ((CamelService *)store)->status == CAMEL_SERVICE_CONNECTED) + if (connect || ((CamelService *) store)->status == CAMEL_SERVICE_CONNECTED) trash = camel_store_get_trash (store, ex); else trash = NULL; - + camel_object_unref (store); return trash; @@ -344,7 +348,10 @@ mail_tool_quote_message (CamelMimeMessage *message, const char *fmt, ...) { CamelDataWrapper *contents; gboolean want_plain; - gchar *text; + char *text, *colour; + GConfClient *gconf; + + gconf = gconf_client_get_default (); contents = camel_medium_get_content_object (CAMEL_MEDIUM (message)); /* We pass "want_plain" for "cite", since if it's HTML, we'll @@ -378,16 +385,21 @@ mail_tool_quote_message (CamelMimeMessage *message, const char *fmt, ...) va_end (ap); } + colour = gconf_client_get_string (gconf, "/apps/evolution/mail/display/citation_colour", NULL); + ret_text = g_strdup_printf ("%s<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"orig\" value=\"1\">-->" - "<font color=\"%06x\">\n%s%s%s</font>" + "<font color=\"%s\">\n%s%s%s</font>" "<!--+GtkHTML:<DATA class=\"ClueFlow\" clear=\"orig\">-->", credits ? credits : "", - mail_config_get_citation_color (), + colour ? colour : "#737373", want_plain ? "" : "<blockquote type=cite><i>", text, want_plain ? "" : "</i></blockquote>"); + g_free (text); + g_free (colour); g_free (credits); + return ret_text; } @@ -406,13 +418,17 @@ gchar * mail_tool_forward_message (CamelMimeMessage *message, gboolean quoted) { char *title, *body, *ret; + gboolean send_html; + GConfClient *gconf; - body = mail_get_message_body (CAMEL_DATA_WRAPPER (message), - !mail_config_get_send_html (), - quoted); + gconf = gconf_client_get_default (); + send_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/send_html", NULL); + + body = mail_get_message_body (CAMEL_DATA_WRAPPER (message), !send_html, quoted); title = _("Forwarded Message"); ret = g_strdup_printf ("-----%s-----<br>%s", title, body ? body : ""); g_free (body); + return ret; } diff --git a/mail/message-browser.c b/mail/message-browser.c index 2aa53dac8d..5a9c74fc6e 100644 --- a/mail/message-browser.c +++ b/mail/message-browser.c @@ -24,6 +24,9 @@ #include <config.h> #endif +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <gal/util/e-util.h> #include <bonobo/bonobo-exception.h> @@ -65,7 +68,7 @@ message_browser_destroy (GtkObject *object) MessageBrowser *message_browser; message_browser = MESSAGE_BROWSER (object); - + if (message_browser->fb) { g_signal_handlers_disconnect_matched(message_browser->fb, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, message_browser); g_object_unref((message_browser->fb)); @@ -94,18 +97,22 @@ static void transfer_msg_done (gboolean ok, void *data) { MessageBrowser *mb = data; + gboolean hide_deleted; + GConfClient *gconf; int row; #warning "GTK_OBJECT_DESTROYED" /*if (ok && !GTK_OBJECT_DESTROYED (mb)) {*/ if (ok) { + gconf = gconf_client_get_default (); + hide_deleted = !gconf_client_get_bool (gconf, "/apps/evolution/mail/display/show_deleted", NULL); + row = e_tree_row_of_node (mb->fb->message_list->tree, e_tree_get_cursor (mb->fb->message_list->tree)); /* If this is the last message and deleted messages are hidden, select the previous */ - if ((row + 1 == e_tree_row_count (mb->fb->message_list->tree)) - && mail_config_get_hide_deleted ()) + if ((row + 1 == e_tree_row_count (mb->fb->message_list->tree)) && hide_deleted) message_list_select (mb->fb->message_list, MESSAGE_LIST_SELECT_PREVIOUS, 0, CAMEL_MESSAGE_DELETED, FALSE); else @@ -113,7 +120,7 @@ transfer_msg_done (gboolean ok, void *data) 0, 0, FALSE); } - g_object_unref((mb)); + g_object_unref (mb); } static void diff --git a/mail/message-list.c b/mail/message-list.c index e9f8856000..522a9a11c9 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -32,6 +32,9 @@ #include <glib/gunicode.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <gal/util/e-util.h> #include <gal/widgets/e-gui-utils.h> #include <gal/e-table/e-cell-text.h> @@ -2101,20 +2104,22 @@ message_changed (CamelObject *o, gpointer event_data, gpointer user_data) void message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder, gboolean outgoing) { + gboolean hide_deleted; + GConfClient *gconf; CamelException ex; - + g_return_if_fail (message_list != NULL); g_return_if_fail (IS_MESSAGE_LIST (message_list)); - + if (message_list->folder == camel_folder) return; - + camel_exception_init (&ex); - + /* cancel any outstanding regeneration requests */ if (message_list->regen) { GList *l = message_list->regen; - + while (l) { struct _mail_msg *mm = l->data; @@ -2123,8 +2128,8 @@ message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder, g l = l->next; } } - - clear_tree(message_list); + + clear_tree (message_list); if (message_list->folder) { hide_save_state(message_list); @@ -2134,41 +2139,41 @@ message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder, g message_changed, message_list); camel_object_unref (message_list->folder); } - + if (message_list->thread_tree) { camel_folder_thread_messages_unref(message_list->thread_tree); message_list->thread_tree = NULL; } - + message_list->folder = camel_folder; - + if (message_list->cursor_uid) { g_free(message_list->cursor_uid); message_list->cursor_uid = NULL; g_signal_emit(message_list, message_list_signals[MESSAGE_SELECTED], 0, NULL); } - + if (camel_folder) { /* Setup the strikeout effect for non-trash folders */ if (!(camel_folder->folder_flags & CAMEL_FOLDER_IS_TRASH)) { ECell *cell; - + cell = e_table_extras_get_cell (message_list->extras, "render_date"); g_object_set (cell, "strikeout_column", COL_DELETED, NULL); - + cell = e_table_extras_get_cell (message_list->extras, "render_text"); g_object_set (cell, "strikeout_column", COL_DELETED, NULL); - + cell = e_table_extras_get_cell (message_list->extras, "render_size"); g_object_set (cell, "strikeout_column", COL_DELETED, NULL); } - + /* Build the etree suitable for this folder */ message_list_setup_etree (message_list, outgoing); @@ -2179,8 +2184,10 @@ message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder, g camel_object_ref (camel_folder); - message_list->hidedeleted = mail_config_get_hide_deleted () - && !(camel_folder->folder_flags & CAMEL_FOLDER_IS_TRASH); + /* FIXME: probably listen for updates to show_deleted? */ + gconf = gconf_client_get_default (); + hide_deleted = !gconf_client_get_bool (gconf, "/apps/evolution/mail/display/show_deleted", NULL); + message_list->hidedeleted = hide_deleted && !(camel_folder->folder_flags & CAMEL_FOLDER_IS_TRASH); hide_load_state (message_list); mail_regen_list (message_list, message_list->search, NULL, NULL); @@ -2194,7 +2201,7 @@ on_cursor_activated_idle (gpointer data) { MessageList *message_list = data; ESelectionModel *esm = e_tree_get_selection_model (message_list->tree); - gint selected = e_selection_model_selected_count (esm); + int selected = e_selection_model_selected_count (esm); if (selected == 1 && message_list->cursor_uid) { d(printf ("emitting cursor changed signal, for uid %s\n", message_list->cursor_uid)); @@ -2594,7 +2601,9 @@ regen_list_regen (struct _mail_msg *mm) { struct _regen_list_msg *m = (struct _regen_list_msg *)mm; GPtrArray *uids, *uidnew, *showuids, *searchuids = NULL; + gboolean thread_subject; CamelMessageInfo *info; + GConfClient *gconf; int i; /* if we have hidedeleted on, use a search to find it out, merge with existing search if set */ @@ -2696,15 +2705,17 @@ regen_list_regen (struct _mail_msg *mm) } MESSAGE_LIST_UNLOCK(m->ml, hide_lock); - + + gconf = gconf_client_get_default (); + thread_subject = gconf_client_get_bool (gconf, "/apps/evolution/mail/display/thread_subject", NULL); + if (!camel_operation_cancel_check(mm->cancel)) { /* update/build a new tree */ if (m->dotree) { if (m->tree) - camel_folder_thread_messages_apply(m->tree, showuids); + camel_folder_thread_messages_apply (m->tree, showuids); else - m->tree = camel_folder_thread_messages_new (m->folder, showuids, - mail_config_get_thread_subject ()); + m->tree = camel_folder_thread_messages_new (m->folder, showuids, thread_subject); } else { m->summary = g_ptr_array_new (); for (i = 0; i < showuids->len; i++) { diff --git a/mail/message-tag-followup.c b/mail/message-tag-followup.c index e333cc0408..59ebf29f13 100644 --- a/mail/message-tag-followup.c +++ b/mail/message-tag-followup.c @@ -40,6 +40,9 @@ #include <glade/glade.h> +#include <gconf/gconf.h> +#include <gconf/gconf-client.h> + #include <libgnomeui/gnome-window-icon.h> #include <libgnomeui/gnome-pixmap.h> @@ -215,23 +218,51 @@ completed_toggled (GtkToggleButton *button, gpointer user_data) followup->completed_date = 0; } +static int +get_week_start_day (void) +{ + /* FIXME: make sure the gconf key is correct? */ + GConfClient *gconf; + + gconf = gconf_client_get_default (); + return gconf_client_get_int (gconf, "/apps/evolution/calendar/display/week_start_day", NULL); +} + +static gboolean +locale_supports_12_hour_format (void) +{ + char s[16]; + time_t t = 0; + + strftime(s, sizeof s, "%p", gmtime (&t)); + return s[0] != '\0'; +} + GtkWidget *target_date_new (const char *s1, const char *s2, int i1, int i2); GtkWidget * target_date_new (const char *s1, const char *s2, int i1, int i2) { + gboolean time_24hour = TRUE; + GConfClient *gconf; GtkWidget *widget; int start; - + widget = e_date_edit_new (); e_date_edit_set_show_date (E_DATE_EDIT (widget), TRUE); e_date_edit_set_show_time (E_DATE_EDIT (widget), TRUE); /* Note that this is 0 (Sun) to 6 (Sat), conver to 0 (mon) to 6 (sun) */ - start = (mail_config_get_week_start_day() + 6) % 7; + start = (get_week_start_day () + 6) % 7; + + /* FIXME: make sure the calendar gconf key is correct */ + if (locale_supports_12_hour_format ()) { + gconf = gconf_client_get_default (); + time_24hour = gconf_client_get_bool (gconf, "/apps/evolution/calendar/display/use_24hour_format", NULL); + } e_date_edit_set_week_start_day (E_DATE_EDIT (widget), start); - e_date_edit_set_use_24_hour_format (E_DATE_EDIT (widget), mail_config_get_time_24hour ()); + e_date_edit_set_use_24_hour_format (E_DATE_EDIT (widget), time_24hour); e_date_edit_set_allow_no_date_set (E_DATE_EDIT (widget), TRUE); e_date_edit_set_time_popup_range (E_DATE_EDIT (widget), 0, 24); diff --git a/mail/subscribe-dialog.c b/mail/subscribe-dialog.c index 93e73c31f0..ba53617715 100644 --- a/mail/subscribe-dialog.c +++ b/mail/subscribe-dialog.c @@ -1377,14 +1377,14 @@ sc_filter_toggled (GtkWidget *widget, gpointer user_data) } static void -populate_store_foreach (MailConfigService *service, SubscribeDialog *sc) +populate_store_foreach (MailConfigAccount *account, SubscribeDialog *sc) { - StoreData *sd; - - if (service->url == NULL || service->enabled == FALSE) + StoreData *sd; + + if (!account->enabled || !account->source || !account->source->url) return; - - sd = store_data_new (service->url); + + sd = store_data_new (account->source->url); sc->priv->store_list = g_list_prepend (sc->priv->store_list, sd); } @@ -1515,14 +1515,13 @@ got_sd_store (StoreData *sd, CamelStore *store, gpointer data) static void populate_store_list (SubscribeDialog *sc) { - GSList *sources; - GList *iter; - GtkWidget *menu; - GtkWidget *omenu; - - sources = mail_config_get_sources (); - g_slist_foreach (sources, (GFunc) populate_store_foreach, sc); - g_slist_free (sources); + const GSList *accounts; + GList *iter; + GtkWidget *menu; + GtkWidget *omenu; + + accounts = mail_config_get_accounts (); + g_slist_foreach ((GSList *) accounts, (GFunc) populate_store_foreach, sc); menu = gtk_menu_new (); |