diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2001-12-20 08:35:40 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-12-20 08:35:40 +0800 |
commit | 34ea30a0d8b5efe1c03a1c93d4929ba51aa5c716 (patch) | |
tree | 8e49d2870b7de39db1aa6033f1796a054e1e2494 /mail | |
parent | 28d014efff13377bb743a69ba164f6476de71a8c (diff) | |
download | gsoc2013-evolution-34ea30a0d8b5efe1c03a1c93d4929ba51aa5c716.tar.gz gsoc2013-evolution-34ea30a0d8b5efe1c03a1c93d4929ba51aa5c716.tar.zst gsoc2013-evolution-34ea30a0d8b5efe1c03a1c93d4929ba51aa5c716.zip |
Add the auto-cc/bcc recipients here. The problem with setting them in the
2001-12-19 Jeffrey Stedfast <fejj@ximian.com>
* mail-callbacks.c (composer_get_message): Add the auto-cc/bcc
recipients here. The problem with setting them in the composer is
that what if the user changes which account he wants to use? We'd
either have to clear the cc/bcc lists *or* we'd have to leave them
alone. Either way is bad. We can't just clear the entries because
the user may have added addresses since the composer was
opened. We don't want to leave any old auto-cc/bcc addresses there
because that isn't desirable either. So we give up and add them
here after the user has already hit the send button.
* mail-config.c (account_copy): Update to copy the always-[b]cc
options.
(account_destroy): Update to destroy the above options.
(config_read): Update to read in those values.
(mail_config_write): Save those options.
* mail-account-gui.c (mail_account_gui_new): Setup Always Cc/Bcc
widgets.
(mail_account_gui_save): Get the user-entered values for the
always-cc/bcc stuff.
svn path=/trunk/; revision=15189
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 23 | ||||
-rw-r--r-- | mail/mail-account-gui.c | 19 | ||||
-rw-r--r-- | mail/mail-account-gui.h | 6 | ||||
-rw-r--r-- | mail/mail-callbacks.c | 48 | ||||
-rw-r--r-- | mail/mail-config.c | 80 | ||||
-rw-r--r-- | mail/mail-config.glade | 145 | ||||
-rw-r--r-- | mail/mail-config.h | 39 |
7 files changed, 315 insertions, 45 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 39d1ea7918..fbef455982 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,28 @@ 2001-12-19 Jeffrey Stedfast <fejj@ximian.com> + * mail-callbacks.c (composer_get_message): Add the auto-cc/bcc + recipients here. The problem with setting them in the composer is + that what if the user changes which account he wants to use? We'd + either have to clear the cc/bcc lists *or* we'd have to leave them + alone. Either way is bad. We can't just clear the entries because + the user may have added addresses since the composer was + opened. We don't want to leave any old auto-cc/bcc addresses there + because that isn't desirable either. So we give up and add them + here after the user has already hit the send button. + + * mail-config.c (account_copy): Update to copy the always-[b]cc + options. + (account_destroy): Update to destroy the above options. + (config_read): Update to read in those values. + (mail_config_write): Save those options. + + * mail-account-gui.c (mail_account_gui_new): Setup Always Cc/Bcc + widgets. + (mail_account_gui_save): Get the user-entered values for the + always-cc/bcc stuff. + +2001-12-19 Jeffrey Stedfast <fejj@ximian.com> + * mail-account-gui.c (setup_service): If the provider is NULL, don't do anything. diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c index 856d72984f..8672d4e0d9 100644 --- a/mail/mail-account-gui.c +++ b/mail/mail-account-gui.c @@ -1347,6 +1347,18 @@ mail_account_gui_new (MailConfigAccount *account) } set_folder_picker_label (gui->sent_folder_button, gui->sent_folder.name); + /* Always Cc */ + gui->always_cc = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "always_cc")); + gtk_toggle_button_set_active (gui->always_cc, account->always_cc); + gui->cc_addrs = GTK_ENTRY (glade_xml_get_widget (gui->xml, "cc_addrs")); + e_utf8_gtk_entry_set_text (gui->cc_addrs, account->cc_addrs); + + /* Always Bcc */ + gui->always_bcc = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "always_bcc")); + gtk_toggle_button_set_active (gui->always_bcc, account->always_bcc); + gui->bcc_addrs = GTK_ENTRY (glade_xml_get_widget (gui->xml, "bcc_addrs")); + e_utf8_gtk_entry_set_text (gui->bcc_addrs, account->bcc_addrs); + /* Security */ gui->pgp_key = GTK_ENTRY (glade_xml_get_widget (gui->xml, "pgp_key")); if (account->pgp_key) @@ -1633,7 +1645,7 @@ mail_account_gui_save (MailAccountGui *gui) const MailConfigAccount *old_account; CamelProvider *provider = NULL; CamelURL *source_url = NULL, *url; - gchar *new_name; + char *new_name; gboolean old_enabled; if (!mail_account_gui_identity_complete (gui, NULL) || @@ -1728,6 +1740,11 @@ mail_account_gui_save (MailAccountGui *gui) if (source_url) camel_url_free (source_url); + account->always_cc = gtk_toggle_button_get_active (gui->always_cc); + account->cc_addrs = e_utf8_gtk_entry_get_text (gui->cc_addrs); + account->always_bcc = gtk_toggle_button_get_active (gui->always_bcc); + account->bcc_addrs = e_utf8_gtk_entry_get_text (gui->bcc_addrs); + g_free (account->pgp_key); account->pgp_key = e_utf8_gtk_entry_get_text (gui->pgp_key); account->pgp_encrypt_to_self = gtk_toggle_button_get_active (gui->pgp_encrypt_to_self); diff --git a/mail/mail-account-gui.h b/mail/mail-account-gui.h index 23ee016198..190d983a83 100644 --- a/mail/mail-account-gui.h +++ b/mail/mail-account-gui.h @@ -95,6 +95,12 @@ typedef struct { GtkButton *sent_folder_button; MailAccountGuiFolder sent_folder; + /* always cc/bcc */ + GtkToggleButton *always_cc; + GtkEntry *cc_addrs; + GtkToggleButton *always_bcc; + GtkEntry *bcc_addrs; + /* Security */ GtkEntry *pgp_key; GtkToggleButton *pgp_encrypt_to_self; diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index 3f1baa452f..1c6a40609f 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -452,12 +452,45 @@ composer_get_message (EMsgComposer *composer) if (message == NULL) return NULL; + /* Add info about the sending account */ + account = e_msg_composer_get_preferred_account (composer); + if (account) { + camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Account", account->name); + camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Transport", account->transport->url); + camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Fcc", account->sent_folder_uri); + + /* add the always-cc/bcc addresses */ + if (account->always_cc && account->cc_addrs) { + CamelInternetAddress *addrs; + + addrs = camel_internet_address_new (); + camel_address_decode (CAMEL_ADDRESS (addrs), account->cc_addrs); + iaddr = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC); + if (iaddr) + camel_address_cat (CAMEL_ADDRESS (addrs), CAMEL_ADDRESS (iaddr)); + camel_mime_message_set_recipients (message, CAMEL_RECIPIENT_TYPE_CC, addrs); + camel_object_unref (CAMEL_OBJECT (addrs)); + } + + if (account->always_bcc && account->bcc_addrs) { + CamelInternetAddress *addrs; + + addrs = camel_internet_address_new (); + camel_address_decode (CAMEL_ADDRESS (addrs), account->bcc_addrs); + iaddr = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_BCC); + if (iaddr) + camel_address_cat (CAMEL_ADDRESS (addrs), CAMEL_ADDRESS (iaddr)); + camel_mime_message_set_recipients (message, CAMEL_RECIPIENT_TYPE_BCC, addrs); + camel_object_unref (CAMEL_OBJECT (addrs)); + } + } + recipients = e_msg_composer_get_recipients (composer); /* Check for invalid recipients */ if (recipients) { gboolean have_invalid = FALSE; - gchar *msg, *new_msg; + char *msg, *new_msg; GtkWidget *message_box; for (i = 0; recipients[i] && !have_invalid; ++i) { @@ -524,7 +557,7 @@ composer_get_message (EMsgComposer *composer) so that it can present the user with a dialog whose text has been modified to reflect this situation. */ - const gchar *to_header = camel_medium_get_header (CAMEL_MEDIUM (message), CAMEL_RECIPIENT_TYPE_TO); + const char *to_header = camel_medium_get_header (CAMEL_MEDIUM (message), CAMEL_RECIPIENT_TYPE_TO); gboolean hidden_list_case = FALSE; if (to_header && !strcmp (to_header, "Undisclosed-Recipient:;")) @@ -569,14 +602,6 @@ composer_get_message (EMsgComposer *composer) } } - /* Add info about the sending account */ - account = e_msg_composer_get_preferred_account (composer); - if (account) { - camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Account", account->name); - camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Transport", account->transport->url); - camel_medium_set_header (CAMEL_MEDIUM (message), "X-Evolution-Fcc", account->sent_folder_uri); - } - /* Get the message recipients and 'touch' them, boosting their use scores */ recipients = e_msg_composer_get_recipients (composer); e_destination_touchv (recipients); @@ -618,7 +643,7 @@ composer_send_cb (EMsgComposer *composer, gpointer data) send->composer = composer; gtk_object_ref (GTK_OBJECT (composer)); gtk_widget_hide (GTK_WIDGET (composer)); - e_msg_composer_set_enable_autosave(composer, FALSE); + e_msg_composer_set_enable_autosave (composer, FALSE); mail_send_mail (transport->url, message, composer_sent_cb, send); } @@ -639,6 +664,7 @@ composer_postpone_cb (EMsgComposer *composer, gpointer data) message = composer_get_message (composer); if (message == NULL) return; + info = camel_message_info_new (); info->flags = CAMEL_MESSAGE_SEEN; diff --git a/mail/mail-config.c b/mail/mail-config.c index a21af27d17..4151c0c3a7 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -76,7 +76,7 @@ typedef struct { gboolean show_preview; gboolean thread_list; gboolean hide_deleted; - gint paned_size; + int paned_size; gboolean send_html; gboolean confirm_unwanted_html; gboolean citation_highlight; @@ -85,11 +85,11 @@ typedef struct { gboolean prompt_only_bcc; gboolean confirm_expunge; gboolean do_seen_timeout; - gint seen_timeout; + int seen_timeout; gboolean empty_trash_on_exit; GSList *accounts; - gint default_account; + int default_account; GSList *news; @@ -117,7 +117,7 @@ static MailConfig *config = NULL; /* Prototypes */ static void config_read (void); -static void mail_config_set_default_account_num (gint new_default); +static void mail_config_set_default_account_num (int new_default); /* Identity */ @@ -210,6 +210,11 @@ account_copy (const MailConfigAccount *account) new->sent_folder_name = g_strdup (account->sent_folder_name); new->sent_folder_uri = g_strdup (account->sent_folder_uri); + new->always_cc = account->always_cc; + new->cc_addrs = g_strdup (account->cc_addrs); + new->always_bcc = account->always_bcc; + new->bcc_addrs = g_strdup (account->bcc_addrs); + new->pgp_key = g_strdup (account->pgp_key); new->pgp_encrypt_to_self = account->pgp_encrypt_to_self; new->pgp_always_sign = account->pgp_always_sign; @@ -238,6 +243,9 @@ account_destroy (MailConfigAccount *account) g_free (account->sent_folder_name); g_free (account->sent_folder_uri); + g_free (account->cc_addrs); + g_free (account->bcc_addrs); + g_free (account->pgp_key); g_free (account->smime_key); @@ -362,6 +370,32 @@ config_read (void) else g_free (val); + path = g_strdup_printf ("/Mail/Accounts/account_always_cc_%d", i); + account->always_cc = bonobo_config_get_boolean_with_default ( + config->db, path, FALSE, NULL); + g_free (path); + + path = g_strdup_printf ("/Mail/Accounts/account_always_cc_addrs_%d", i); + val = bonobo_config_get_string (config->db, path, NULL); + g_free (path); + if (val && *val) + account->cc_addrs = val; + else + g_free (val); + + path = g_strdup_printf ("/Mail/Accounts/account_always_bcc_%d", i); + account->always_bcc = bonobo_config_get_boolean_with_default ( + config->db, path, FALSE, NULL); + g_free (path); + + path = g_strdup_printf ("/Mail/Accounts/account_always_bcc_addrs_%d", i); + val = bonobo_config_get_string (config->db, path, NULL); + g_free (path); + if (val && *val) + account->bcc_addrs = val; + else + g_free (val); + /* get the pgp info */ path = g_strdup_printf ("/Mail/Accounts/account_pgp_key_%d", i); val = bonobo_config_get_string (config->db, path, NULL); @@ -500,7 +534,7 @@ config_read (void) "/News/Sources/num", 0, NULL); for (i = 0; i < len; i++) { MailConfigService *n; - gchar *path, *r; + char *path, *r; path = g_strdup_printf ("/News/Sources/url_%d", i); @@ -679,6 +713,24 @@ mail_config_write (void) account->sent_folder_uri, NULL); g_free (path); + path = g_strdup_printf ("/Mail/Accounts/account_always_cc_%d", i); + bonobo_config_set_boolean (config->db, path, account->always_cc, NULL); + g_free (path); + + path = g_strdup_printf ("/Mail/Accounts/account_always_cc_addrs_%d", i); + bonobo_config_set_string_wrapper (config->db, path, + account->cc_addrs, NULL); + g_free (path); + + path = g_strdup_printf ("/Mail/Accounts/account_always_bcc_%d", i); + bonobo_config_set_boolean (config->db, path, account->always_bcc, NULL); + g_free (path); + + path = g_strdup_printf ("/Mail/Accounts/account_always_bcc_addrs_%d", i); + bonobo_config_set_string_wrapper (config->db, path, + account->bcc_addrs, NULL); + g_free (path); + /* account pgp options */ path = g_strdup_printf ("/Mail/Accounts/account_pgp_key_%d", i); bonobo_config_set_string_wrapper (config->db, path, account->pgp_key, NULL); @@ -773,7 +825,7 @@ mail_config_write (void) bonobo_config_set_long (config->db, "/News/Sources/num", len, NULL); for (i = 0; i < len; i++) { MailConfigService *n; - gchar *path; + char *path; n = g_slist_nth_data (config->news, i); @@ -1149,14 +1201,14 @@ mail_config_set_hide_deleted (gboolean value) config->hide_deleted = value; } -gint +int mail_config_get_paned_size (void) { return config->paned_size; } void -mail_config_set_paned_size (gint value) +mail_config_set_paned_size (int value) { config->paned_size = value; } @@ -1221,14 +1273,14 @@ mail_config_set_do_seen_timeout (gboolean do_seen_timeout) config->do_seen_timeout = do_seen_timeout; } -gint +int mail_config_get_mark_as_seen_timeout (void) { return config->seen_timeout; } void -mail_config_set_mark_as_seen_timeout (gint timeout) +mail_config_set_mark_as_seen_timeout (int timeout) { config->seen_timeout = timeout; } @@ -1876,8 +1928,8 @@ new_source_created (MailConfigAccount *account) CamelProvider *prov; CamelFolder *inbox; CamelException ex; - gchar *name; - gchar *url; + char *name; + char *url; /* no source, don't bother. */ if (!account->source || !account->source->url) @@ -2015,14 +2067,14 @@ mail_config_remove_account (MailConfigAccount *account) return config->accounts; } -gint +int mail_config_get_default_account_num (void) { return config->default_account; } static void -mail_config_set_default_account_num (gint new_default) +mail_config_set_default_account_num (int new_default) { config->default_account = new_default; } diff --git a/mail/mail-config.glade b/mail/mail-config.glade index 2aa4748e51..1991576d0a 100644 --- a/mail/mail-config.glade +++ b/mail/mail-config.glade @@ -1847,13 +1847,154 @@ Kerberos </widget> </widget> </widget> + + <widget> + <class>GtkFrame</class> + <name>frame2</name> + <label>Composing Messages</label> + <label_xalign>0</label_xalign> + <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkVBox</class> + <name>vbox67</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + + <widget> + <class>GtkHBox</class> + <name>hbox61</name> + <homogeneous>False</homogeneous> + <spacing>0</spacing> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkTable</class> + <name>table8</name> + <rows>2</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>0</row_spacing> + <column_spacing>0</column_spacing> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkCheckButton</class> + <name>always_cc</name> + <can_focus>True</can_focus> + <label>Always carbon-copy to:</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkCheckButton</class> + <name>always_bcc</name> + <can_focus>True</can_focus> + <label>Always blind carbon-copy to:</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkEntry</class> + <name>cc_addrs</name> + <can_focus>True</can_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkEntry</class> + <name>bcc_addrs</name> + <can_focus>True</can_focus> + <editable>True</editable> + <text_visible>True</text_visible> + <text_max_length>0</text_max_length> + <text></text> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + </widget> + </widget> + </widget> + </widget> </widget> <widget> <class>GtkLabel</class> <child_name>Notebook:tab</child_name> <name>label35</name> - <label>Special Folders</label> + <label>Defaults</label> <justify>GTK_JUSTIFY_CENTER</justify> <wrap>False</wrap> <xalign>0.5</xalign> @@ -3134,7 +3275,7 @@ Quoted <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> <child> <padding>0</padding> - <expand>True</expand> + <expand>False</expand> <fill>True</fill> </child> diff --git a/mail/mail-config.h b/mail/mail-config.h index c54fef4eba..2575f8b817 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -32,38 +32,43 @@ extern "C" { #endif /* __cplusplus */ typedef struct { - gchar *name; - gchar *address; - gchar *organization; - gchar *signature; - gchar *html_signature; + char *name; + char *address; + char *organization; + char *signature; + char *html_signature; gboolean has_html_signature; } MailConfigIdentity; typedef struct { - gchar *url; + char *url; gboolean keep_on_server; gboolean auto_check; - gint auto_check_time; + int auto_check_time; gboolean save_passwd; gboolean enabled; } MailConfigService; typedef struct { - gchar *name; + char *name; MailConfigIdentity *id; MailConfigService *source; MailConfigService *transport; - gchar *drafts_folder_name, *drafts_folder_uri; - gchar *sent_folder_name, *sent_folder_uri; + char *drafts_folder_name, *drafts_folder_uri; + char *sent_folder_name, *sent_folder_uri; - gchar *pgp_key; + gboolean always_cc; + char *cc_addrs; + gboolean always_bcc; + char *bcc_addrs; + + char *pgp_key; gboolean pgp_encrypt_to_self; gboolean pgp_always_sign; - gchar *smime_key; + char *smime_key; gboolean smime_encrypt_to_self; gboolean smime_always_sign; } MailConfigAccount; @@ -134,8 +139,8 @@ 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); -gint mail_config_get_paned_size (void); -void mail_config_set_paned_size (gint size); +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); @@ -152,8 +157,8 @@ void mail_config_set_citation_color (guint32); gint mail_config_get_do_seen_timeout (void); void mail_config_set_do_seen_timeout (gboolean do_seen_timeout); -gint mail_config_get_mark_as_seen_timeout (void); -void mail_config_set_mark_as_seen_timeout (gint 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); @@ -193,7 +198,7 @@ void mail_config_service_set_save_passwd (MailConfigService *service, gboolean s gboolean mail_config_find_account (const MailConfigAccount *account); const MailConfigAccount *mail_config_get_default_account (void); -gint mail_config_get_default_account_num (void); +int mail_config_get_default_account_num (void); const MailConfigAccount *mail_config_get_account_by_name (const char *account_name); const MailConfigAccount *mail_config_get_account_by_source_url (const char *url); const MailConfigAccount *mail_config_get_account_by_transport_url (const char *url); |