diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2008-04-03 02:37:22 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2008-04-03 02:37:22 +0800 |
commit | 16068d9b4191ea142a9e75a50eb8d260ed2bb406 (patch) | |
tree | 835a7909cd8b352d8c414986f1f5e27697b4de98 /composer/e-msg-composer-hdrs.c | |
parent | ee50e5d68e4f1a793541f1ee4979818ed4940173 (diff) | |
download | gsoc2013-evolution-16068d9b4191ea142a9e75a50eb8d260ed2bb406.tar gsoc2013-evolution-16068d9b4191ea142a9e75a50eb8d260ed2bb406.tar.gz gsoc2013-evolution-16068d9b4191ea142a9e75a50eb8d260ed2bb406.tar.bz2 gsoc2013-evolution-16068d9b4191ea142a9e75a50eb8d260ed2bb406.tar.lz gsoc2013-evolution-16068d9b4191ea142a9e75a50eb8d260ed2bb406.tar.xz gsoc2013-evolution-16068d9b4191ea142a9e75a50eb8d260ed2bb406.tar.zst gsoc2013-evolution-16068d9b4191ea142a9e75a50eb8d260ed2bb406.zip |
** Merge the mbarnes-composer branch
2008-04-02 Matthew Barnes <mbarnes@redhat.com>
** Merge the mbarnes-composer branch
* configure.in:
Bump libgtkhtml requirement to 3.19.1.
Add gtkhtml-editor dependency for addressbook, calendar and mail.
Remove print-message plugin; new composer implements this natively.
* tools/Makefile.am:
Remove CORBA rules for the old composer.
* addressbook/gui/widgets/Makefile.am:
Remove CORBA rules for the old composer.
* addressbook/gui/widgets/eab-gui-util.c
(eab_send_to_contact_and_email_num_list),
(eab_send_contact_list_as_attachment):
Adapt to new Bonobo-less composer widget.
* calendar/gui/Makefile.am:
Remove CORBA rules for the old composer.
* calendar/gui/itip-utils.c (comp_from), (comp_to_list),
(comp_subject), (comp_content_type), (comp_filename),
(comp_description), (append_cal_attachments), (itip_send_comp),
(reply_to_calendar_comp):
Adapt to new Bonobo-less composer widget.
* composer/Makefile.am:
Remove CORBA rules for the old composer.
* composer/e-msg-composer.c:
* composer/e-msg-composer.h:
EMsgComposer is now a subclass of GtkhtmlEditor.
Extensive refactoring and cleanup, too much to list in detail.
* composer/e-composer-header.c:
* composer/e-composer-header.h:
Add "sensitive" property along with get/set functions.
* composer/e-composer-from-header.c:
* composer/e-composer-from-header.h:
Propagate "refreshed" signal from EAccountComboBox.
Add function e_composer_from_header_get_account_list().
* composer/e-composer-private.c:
* composer/e-composer-private.h:
New files manage composer's private data.
Allows other composer files to manipulate private data.
* composer/e-msg-composer-hdrs.c:
* composer/e-msg-composer-hdrs.h:
Remove these files; replaced by EComposerHeaderTable widget.
* composer/evolution-composer.c:
* composer/evolution-composer.h:
Remove these files; composer is now a subclass of GtkhtmlEditor.
* composer/e-msg-composer-select-file.c:
* composer/e-msg-composer-select-file.h:
Remove these files; logic moved to e-msg-composer.c.
* composer/listener.c:
* composer/listener.h:
Remove these files; event handlers moved to e-msg-composer.c.
* composer/Composer.idl:
* composer/Evolution-Composer.idl:
Remove these files; composer is no longer a Bonobo object.
* mail/em-composer-prefs (sig_edit_cb),
(em_composer_prefs_new_signature):
Adapt to new Bonobo-less signature editor.
* mail/mail-signature-editor.c:
* mail/mail-signature-editor.h:
Rewrite the signature editor as a subclass of GtkhtmlEditor.
Eliminates Bonobo from the equation.
* mail/em-composer-utils.c (composer_get_message),
(em_utils_composer_send_cb), (save_draft_done),
(em_utils_composer_save_draft_cb), (create_new_composer),
(em_utils_compose_new_message),
(em_utils_compose_new_message_with_mailto), (em_utils_post_to_folder),
(em_utils_post_to_url), (edit_message), (forward_attached),
(forward_non_attached), (reply_get_composer), (composer_set_body),
(em_utils_reply_to_message), (post_reply_to_message):
Adapt to new Bonobo-less composer.
* mail/mail-component-factory.c:
Composer is no longer needs a Bonobo factory.
* mail/mail-config.c:
Fix style pattern for EMsgComposer widgets.
* plugins/groupwise/mail-send-options.c
(org_gnome_composer_send_options):
Adapt to streamlined EMsgComposer API.
* plugins/exchange-operations/Makefile.am:
Add EVOLUTION_MAIL_CFLAGS and EVOLUTION_MAIL_LIBS.
* plugins/exchange-operations/exchange-mail-send-options.c
(append_to_header), (org_gnome_exchange_send_options):
Adapt to streamlined EMsgComposer API.
* plugins/mailing-list-actions/mailing-list-actions.c
(emla_list_action_do):
Adapt to streamlined EMsgComposer API.
* po/POTFILES.in: Update file list for new composer.
* ui/evolution-composer-entries.xml:
Remove this file; obsoleted by new composer.
* widgets/misc/Makefile.am:
Add EVOLUTION_MAIL_LIBS.
* widgets/misc/e-account-combo-box.c:
* widgets/misc/e-account-combo-box.h:
New function e_account_combo_box_get_account_list().
Emit a "refreshed" signal when the EAccountList changes.
Add an internal reverse-lookup index.
* widgets/misc/e-charset-picker.c (e_charser_add_radio_actions):
New function adds radio actions to an action group.
Will eventually replace e_charset_picker_bonobo_ui_populate().
* widgets/misc/e-signature-combo-box.c:
* widgets/misc/e-signature-combo-box.h:
New function e_signature_combo_box_get_signature_list().
... separate issue ...
* configure.in:
Bump eds_minimum_version to 2.23.1 for
CAMEL_FOLDER_JUNKED_NOT_DELETED symbol.
svn path=/trunk/; revision=35313
Diffstat (limited to 'composer/e-msg-composer-hdrs.c')
-rw-r--r-- | composer/e-msg-composer-hdrs.c | 967 |
1 files changed, 0 insertions, 967 deletions
diff --git a/composer/e-msg-composer-hdrs.c b/composer/e-msg-composer-hdrs.c deleted file mode 100644 index 471cc40dc2..0000000000 --- a/composer/e-msg-composer-hdrs.c +++ /dev/null @@ -1,967 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* msg-composer-hdrs.c - * - * Copyright (C) 1999 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * published by the Free Software Foundation; either version 2 of the - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * Author: Ettore Perazzoli - */ - - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <bonobo/bonobo-control.h> -#include <bonobo/bonobo-widget.h> - -#include <glib/gi18n.h> -#include <libedataserverui/e-name-selector.h> - -#include "Composer.h" - -#include <camel/camel.h> -#include <camel/camel-store.h> -#include <camel/camel-session.h> -#include "e-msg-composer-hdrs.h" -#include "mail/mail-config.h" -#include "mail/mail-session.h" -#include "e-account-combo-box.h" -#include "e-signature-combo-box.h" - -#include "e-composer-header.h" -#include "e-composer-from-header.h" -#include "e-composer-name-header.h" -#include "e-composer-post-header.h" -#include "e-composer-text-header.h" - -#define E_MSG_COMPOSER_HDRS_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE \ - ((obj), E_TYPE_MSG_COMPOSER_HDRS, EMsgComposerHdrsPrivate)) - -/* Headers, listed in the order that they should appear in the table. */ -enum { - HEADER_FROM, - HEADER_REPLY_TO, - HEADER_TO, - HEADER_CC, - HEADER_BCC, - HEADER_POST_TO, - HEADER_SUBJECT, - NUM_HEADERS -}; - -enum { - SUBJECT_CHANGED, - HDRS_CHANGED, - FROM_CHANGED, - SIGNATURE_CHANGED, - LAST_SIGNAL -}; - -struct _EMsgComposerHdrsPrivate { - ENameSelector *name_selector; - - /* ui component */ - BonoboUIComponent *uic; - - EComposerHeader *headers[NUM_HEADERS]; - GtkWidget *signature_combo_box; -}; - -static gpointer parent_class; -static guint signal_ids[LAST_SIGNAL]; - -static void -from_changed (EComposerFromHeader *from_header, EMsgComposerHdrs *hdrs) -{ - EComposerHeader *header; - EAccount *account; - - account = e_composer_from_header_get_active (from_header); - - header = hdrs->priv->headers[HEADER_POST_TO]; - e_composer_post_header_set_account ( - E_COMPOSER_POST_HEADER (header), account); - - /* we do this rather than calling e_msg_composer_hdrs_set_reply_to() - because we don't want to change the visibility of the header */ - header = hdrs->priv->headers[HEADER_REPLY_TO]; - e_composer_text_header_set_text ( - E_COMPOSER_TEXT_HEADER (header), account->id->reply_to); - - g_signal_emit (hdrs, signal_ids[FROM_CHANGED], 0); -} - -static void -signature_changed (EMsgComposerHdrs *hdrs) -{ - g_signal_emit (hdrs, signal_ids[SIGNATURE_CHANGED], 0); -} - -static void -headers_set_visibility (EMsgComposerHdrs *h, int visible_flags) -{ - EMsgComposerHdrsPrivate *p = h->priv; - - /* To is always visible if we're not doing Post-To */ - if (!(h->visible_mask & E_MSG_COMPOSER_VISIBLE_POSTTO)) - visible_flags |= E_MSG_COMPOSER_VISIBLE_TO; - else - visible_flags |= E_MSG_COMPOSER_VISIBLE_POSTTO; - - e_composer_header_set_visible ( - p->headers[HEADER_FROM], - visible_flags & E_MSG_COMPOSER_VISIBLE_FROM); - e_composer_header_set_visible ( - p->headers[HEADER_REPLY_TO], - visible_flags & E_MSG_COMPOSER_VISIBLE_REPLYTO); - e_composer_header_set_visible ( - p->headers[HEADER_TO], - visible_flags & E_MSG_COMPOSER_VISIBLE_TO); - e_composer_header_set_visible ( - p->headers[HEADER_CC], - visible_flags & E_MSG_COMPOSER_VISIBLE_CC); - e_composer_header_set_visible ( - p->headers[HEADER_BCC], - visible_flags & E_MSG_COMPOSER_VISIBLE_BCC); - e_composer_header_set_visible ( - p->headers[HEADER_POST_TO], - visible_flags & E_MSG_COMPOSER_VISIBLE_POSTTO); - e_composer_header_set_visible ( - p->headers[HEADER_SUBJECT], - visible_flags & E_MSG_COMPOSER_VISIBLE_SUBJECT); -} - -static void -headers_set_sensitivity (EMsgComposerHdrs *h) -{ - /* these ones are always on */ - bonobo_ui_component_set_prop ( - h->priv->uic, "/commands/ViewTo", "sensitive", - h->visible_mask & E_MSG_COMPOSER_VISIBLE_TO ? "0" : "1", NULL); - - bonobo_ui_component_set_prop ( - h->priv->uic, "/commands/ViewPostTo", "sensitive", - h->visible_mask & E_MSG_COMPOSER_VISIBLE_POSTTO ? "0" : "1", NULL); -} - -void -e_msg_composer_hdrs_set_visible_mask (EMsgComposerHdrs *hdrs, int visible_mask) -{ - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - - hdrs->visible_mask = visible_mask; - headers_set_sensitivity (hdrs); -} - -void -e_msg_composer_hdrs_set_visible (EMsgComposerHdrs *hdrs, int visible_flags) -{ - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - - headers_set_visibility (hdrs, visible_flags); - gtk_widget_queue_resize (GTK_WIDGET (hdrs)); -} - -static GObject * -msg_composer_hdrs_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_properties) -{ - GObject *object; - EMsgComposerHdrsPrivate *priv; - GtkWidget *widget; - guint rows, ii; - - /* Chain up to parent's constructor() method. */ - object = G_OBJECT_CLASS (parent_class)->constructor ( - type, n_construct_properties, construct_properties); - - priv = E_MSG_COMPOSER_HDRS_GET_PRIVATE (object); - - rows = G_N_ELEMENTS (priv->headers); - gtk_table_resize (GTK_TABLE (object), rows, 4); - gtk_table_set_row_spacings (GTK_TABLE (object), 0); - gtk_table_set_col_spacings (GTK_TABLE (object), 6); - - /* Use "ypadding" instead of "row-spacing" because some rows may - * be invisible and we don't want spacing around them. */ - - for (ii = 0; ii < rows; ii++) { - gtk_table_attach ( - GTK_TABLE (object), priv->headers[ii]->title_widget, - 0, 1, ii, ii + 1, GTK_FILL, GTK_FILL, 0, 3); - gtk_table_attach ( - GTK_TABLE (object), priv->headers[ii]->input_widget, - 1, 4, ii, ii + 1, GTK_FILL | GTK_EXPAND, 0, 0, 3); - } - - /* Leave room in the "From" row for signature stuff. */ - gtk_container_child_set ( - GTK_CONTAINER (object), - priv->headers[HEADER_FROM]->input_widget, - "right-attach", 2, NULL); - - /* Now add the signature stuff. */ - widget = gtk_label_new_with_mnemonic (_("Si_gnature:")); - gtk_table_attach ( - GTK_TABLE (object), widget, - 2, 3, HEADER_FROM, HEADER_FROM + 1, 0, 0, 0, 3); - gtk_table_attach ( - GTK_TABLE (object), priv->signature_combo_box, - 3, 4, HEADER_FROM, HEADER_FROM + 1, 0, 0, 0, 3); - gtk_label_set_mnemonic_widget ( - GTK_LABEL (widget), priv->signature_combo_box); - gtk_widget_show (widget); - - return object; -} - -static void -msg_composer_hdrs_dispose (GObject *object) -{ - EMsgComposerHdrsPrivate *priv; - gint ii; - - priv = E_MSG_COMPOSER_HDRS_GET_PRIVATE (object); - - if (priv->name_selector != NULL) { - g_object_unref (priv->name_selector); - priv->name_selector = NULL; - } - - for (ii = 0; ii < G_N_ELEMENTS (priv->headers); ii++) { - if (priv->headers[ii] != NULL) { - g_object_unref (priv->headers[ii]); - priv->headers[ii] = NULL; - } - } - - if (priv->signature_combo_box != NULL) { - g_object_unref (priv->signature_combo_box); - priv->signature_combo_box = NULL; - } - - /* Chain up to parent's dispose() method. */ - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -static void -msg_composer_hdrs_class_init (EMsgComposerHdrsClass *class) -{ - GObjectClass *object_class; - - parent_class = g_type_class_peek_parent (class); - g_type_class_add_private (class, sizeof (EMsgComposerHdrsPrivate)); - - object_class = G_OBJECT_CLASS (class); - object_class->constructor = msg_composer_hdrs_constructor; - object_class->dispose = msg_composer_hdrs_dispose; - - signal_ids[SUBJECT_CHANGED] = - g_signal_new ("subject_changed", - E_TYPE_MSG_COMPOSER_HDRS, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(EMsgComposerHdrsClass, subject_changed), - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, - 1, G_TYPE_STRING); - - signal_ids[HDRS_CHANGED] = - g_signal_new ("hdrs_changed", - E_TYPE_MSG_COMPOSER_HDRS, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(EMsgComposerHdrsClass, hdrs_changed), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - signal_ids[FROM_CHANGED] = - g_signal_new ("from_changed", - E_TYPE_MSG_COMPOSER_HDRS, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(EMsgComposerHdrsClass, from_changed), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - signal_ids[SIGNATURE_CHANGED] = - g_signal_new ("signature_changed", - E_TYPE_MSG_COMPOSER_HDRS, - G_SIGNAL_RUN_LAST, - 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); -} - -static void -msg_composer_hdrs_init (EMsgComposerHdrs *hdrs) -{ - EComposerHeader *header; - ENameSelector *name_selector; - GtkWidget *widget; - - hdrs->priv = E_MSG_COMPOSER_HDRS_GET_PRIVATE (hdrs); - - name_selector = e_name_selector_new (); - - hdrs->priv->name_selector = name_selector; - - header = e_composer_from_header_new (_("Fr_om:")); - g_signal_connect ( - header, "changed", - G_CALLBACK (from_changed), hdrs); - hdrs->priv->headers[HEADER_FROM] = header; - - header = e_composer_text_header_new_label (_("_Reply-To:")); - hdrs->priv->headers[HEADER_REPLY_TO] = header; - - header = e_composer_name_header_new (_("_To:"), name_selector); - e_composer_header_set_input_tooltip ( - header, _("Enter the recipients of the message")); - hdrs->priv->headers[HEADER_TO] = header; - - header = e_composer_name_header_new (_("_Cc:"), name_selector); - e_composer_header_set_input_tooltip ( - header, _("Enter the addresses that will receive a " - "carbon copy of the message")); - hdrs->priv->headers[HEADER_CC] = header; - - header = e_composer_name_header_new (_("_Bcc:"), name_selector); - e_composer_header_set_input_tooltip ( - header, _("Enter the addresses that will receive a " - "carbon copy of the message without appearing in the " - "recipient list of the message")); - hdrs->priv->headers[HEADER_BCC] = header; - - header = e_composer_post_header_new (_("_Post To:")); - hdrs->priv->headers[HEADER_POST_TO] = header; - - header = e_composer_text_header_new_label (_("S_ubject:")); - hdrs->priv->headers[HEADER_SUBJECT] = header; - - /* Do this after all the headers are initialized. */ - e_composer_from_header_set_account_list ( - E_COMPOSER_FROM_HEADER (hdrs->priv->headers[HEADER_FROM]), - mail_config_get_accounts ()); - - widget = e_signature_combo_box_new (); - e_signature_combo_box_set_signature_list ( - E_SIGNATURE_COMBO_BOX (widget), - mail_config_get_signatures ()); - g_signal_connect_swapped ( - widget, "changed", - G_CALLBACK (signature_changed), hdrs); - g_signal_connect_swapped ( - widget, "refreshed", - G_CALLBACK (signature_changed), hdrs); - hdrs->priv->signature_combo_box = g_object_ref_sink (widget); - gtk_widget_show (widget); -} - -GType -e_msg_composer_hdrs_get_type (void) -{ - static GType type = 0; - - if (G_UNLIKELY (type == 0)) { - static const GTypeInfo type_info = { - sizeof (EMsgComposerHdrsClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) msg_composer_hdrs_class_init, - (GClassFinalizeFunc) NULL, - NULL, /* class_data */ - sizeof (EMsgComposerHdrs), - 0, /* n_preallocs */ - (GInstanceInitFunc) msg_composer_hdrs_init, - NULL /* value_table */ - }; - - type = g_type_register_static ( - GTK_TYPE_TABLE, "EMsgComposerHdrs", &type_info, 0); - } - - return type; -} - -GtkWidget * -e_msg_composer_hdrs_new (BonoboUIComponent *uic, int visible_mask, int visible_flags) -{ - EMsgComposerHdrs *new; - EMsgComposerHdrsPrivate *priv; - - new = g_object_new (E_TYPE_MSG_COMPOSER_HDRS, NULL); - priv = new->priv; - priv->uic = uic; - - g_object_ref_sink (new); - - new->visible_mask = visible_mask; - - headers_set_sensitivity (new); - headers_set_visibility (new, visible_flags); - - return GTK_WIDGET (new); -} - -static void -set_recipients_from_destv (CamelMimeMessage *msg, - EDestination **to_destv, - EDestination **cc_destv, - EDestination **bcc_destv, - gboolean redirect) -{ - CamelInternetAddress *to_addr; - CamelInternetAddress *cc_addr; - CamelInternetAddress *bcc_addr; - CamelInternetAddress *target; - const char *text_addr, *header; - gboolean seen_hidden_list = FALSE; - int i; - - to_addr = camel_internet_address_new (); - cc_addr = camel_internet_address_new (); - bcc_addr = camel_internet_address_new (); - - if (to_destv) { - for (i = 0; to_destv[i] != NULL; ++i) { - text_addr = e_destination_get_address (to_destv[i]); - - if (text_addr && *text_addr) { - target = to_addr; - if (e_destination_is_evolution_list (to_destv[i]) - && !e_destination_list_show_addresses (to_destv[i])) { - target = bcc_addr; - seen_hidden_list = TRUE; - } - - camel_address_decode (CAMEL_ADDRESS (target), text_addr); - } - } - } - - if (cc_destv) { - for (i = 0; cc_destv[i] != NULL; ++i) { - text_addr = e_destination_get_address (cc_destv[i]); - if (text_addr && *text_addr) { - target = cc_addr; - if (e_destination_is_evolution_list (cc_destv[i]) - && !e_destination_list_show_addresses (cc_destv[i])) { - target = bcc_addr; - seen_hidden_list = TRUE; - } - - camel_address_decode (CAMEL_ADDRESS (target), text_addr); - } - } - } - - if (bcc_destv) { - for (i = 0; bcc_destv[i] != NULL; ++i) { - text_addr = e_destination_get_address (bcc_destv[i]); - if (text_addr && *text_addr) { - camel_address_decode (CAMEL_ADDRESS (bcc_addr), text_addr); - } - } - } - - header = redirect ? CAMEL_RECIPIENT_TYPE_RESENT_TO : CAMEL_RECIPIENT_TYPE_TO; - if (camel_address_length (CAMEL_ADDRESS (to_addr)) > 0) { - camel_mime_message_set_recipients (msg, header, to_addr); - } else if (seen_hidden_list) { - camel_medium_set_header (CAMEL_MEDIUM (msg), header, "Undisclosed-Recipient:;"); - } - - header = redirect ? CAMEL_RECIPIENT_TYPE_RESENT_CC : CAMEL_RECIPIENT_TYPE_CC; - if (camel_address_length (CAMEL_ADDRESS (cc_addr)) > 0) { - camel_mime_message_set_recipients (msg, header, cc_addr); - } - - header = redirect ? CAMEL_RECIPIENT_TYPE_RESENT_BCC : CAMEL_RECIPIENT_TYPE_BCC; - if (camel_address_length (CAMEL_ADDRESS (bcc_addr)) > 0) { - camel_mime_message_set_recipients (msg, header, bcc_addr); - } - - camel_object_unref (to_addr); - camel_object_unref (cc_addr); - camel_object_unref (bcc_addr); -} - -static void -e_msg_composer_hdrs_to_message_internal (EMsgComposerHdrs *hdrs, - CamelMimeMessage *msg, - gboolean redirect) -{ - EDestination **to_destv, **cc_destv, **bcc_destv; - CamelInternetAddress *addr; - const char *subject; - gboolean visible; - char *header; - - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - g_return_if_fail (CAMEL_IS_MIME_MESSAGE (msg)); - - subject = e_msg_composer_hdrs_get_subject (hdrs); - camel_mime_message_set_subject (msg, subject); - - addr = e_msg_composer_hdrs_get_from (hdrs); - if (redirect) { - header = camel_address_encode (CAMEL_ADDRESS (addr)); - camel_medium_set_header (CAMEL_MEDIUM (msg), "Resent-From", header); - g_free (header); - } else { - camel_mime_message_set_from (msg, addr); - } - camel_object_unref (addr); - - addr = e_msg_composer_hdrs_get_reply_to (hdrs); - if (addr) { - camel_mime_message_set_reply_to (msg, addr); - camel_object_unref (addr); - } - - visible = - e_composer_header_get_visible ( - hdrs->priv->headers[HEADER_TO]) || - e_composer_header_get_visible ( - hdrs->priv->headers[HEADER_CC]) || - e_composer_header_get_visible ( - hdrs->priv->headers[HEADER_BCC]); - - if (visible) { - to_destv = e_msg_composer_hdrs_get_to (hdrs); - cc_destv = e_msg_composer_hdrs_get_cc (hdrs); - bcc_destv = e_msg_composer_hdrs_get_bcc (hdrs); - - /* Attach destinations to the message. */ - - set_recipients_from_destv (msg, to_destv, cc_destv, bcc_destv, redirect); - - e_destination_freev (to_destv); - e_destination_freev (cc_destv); - e_destination_freev (bcc_destv); - } - - visible = e_composer_header_get_visible ( - hdrs->priv->headers[HEADER_POST_TO]); - - if (visible) { - GList *post, *l; - - camel_medium_remove_header((CamelMedium *)msg, "X-Evolution-PostTo"); - post = e_msg_composer_hdrs_get_post_to(hdrs); - for (l=post;l;l=g_list_next(l)) { - camel_medium_add_header((CamelMedium *)msg, "X-Evolution-PostTo", l->data); - g_free(l->data); - } - g_list_free(post); - } -} - - -void -e_msg_composer_hdrs_to_message (EMsgComposerHdrs *hdrs, - CamelMimeMessage *msg) -{ - e_msg_composer_hdrs_to_message_internal (hdrs, msg, FALSE); -} - - -void -e_msg_composer_hdrs_to_redirect (EMsgComposerHdrs *hdrs, - CamelMimeMessage *msg) -{ - e_msg_composer_hdrs_to_message_internal (hdrs, msg, TRUE); -} - -EAccount * -e_msg_composer_hdrs_get_from_account (EMsgComposerHdrs *hdrs) -{ - EComposerFromHeader *header; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - header = E_COMPOSER_FROM_HEADER (hdrs->priv->headers[HEADER_FROM]); - return e_composer_from_header_get_active (header); -} - -gboolean -e_msg_composer_hdrs_set_from_account (EMsgComposerHdrs *hdrs, - const gchar *account_name) -{ - EComposerFromHeader *header; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), FALSE); - - header = E_COMPOSER_FROM_HEADER (hdrs->priv->headers[HEADER_FROM]); - return e_composer_from_header_set_active_name (header, account_name); -} - -ESignature * -e_msg_composer_hdrs_get_signature (EMsgComposerHdrs *hdrs) -{ - ESignatureComboBox *combo_box; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - combo_box = E_SIGNATURE_COMBO_BOX (hdrs->priv->signature_combo_box); - return e_signature_combo_box_get_active (combo_box); -} - -gboolean -e_msg_composer_hdrs_set_signature (EMsgComposerHdrs *hdrs, - ESignature *signature) -{ - ESignatureComboBox *combo_box; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), FALSE); - - combo_box = E_SIGNATURE_COMBO_BOX (hdrs->priv->signature_combo_box); - return e_signature_combo_box_set_active (combo_box, signature); -} - -void -e_msg_composer_hdrs_set_reply_to (EMsgComposerHdrs *hdrs, - const gchar *text) -{ - EComposerHeader *header; - - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - - header = hdrs->priv->headers[HEADER_REPLY_TO]; - - e_composer_text_header_set_text ( - E_COMPOSER_TEXT_HEADER (header), text); - - if (*text != '\0') - e_composer_header_set_visible (header, TRUE); -} - -void -e_msg_composer_hdrs_set_to (EMsgComposerHdrs *hdrs, - EDestination **to_destv) -{ - EComposerHeader *header; - - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - - header = hdrs->priv->headers[HEADER_TO]; - - e_composer_name_header_set_destinations ( - E_COMPOSER_NAME_HEADER (header), to_destv); -} - -void -e_msg_composer_hdrs_set_cc (EMsgComposerHdrs *hdrs, - EDestination **cc_destv) -{ - EComposerHeader *header; - - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - - header = hdrs->priv->headers[HEADER_CC]; - - e_composer_name_header_set_destinations ( - E_COMPOSER_NAME_HEADER (header), cc_destv); - - if (cc_destv != NULL && *cc_destv != NULL) - e_composer_header_set_visible (header, TRUE); -} - -void -e_msg_composer_hdrs_set_bcc (EMsgComposerHdrs *hdrs, - EDestination **bcc_destv) -{ - EComposerHeader *header; - - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - - header = hdrs->priv->headers[HEADER_BCC]; - - e_composer_name_header_set_destinations ( - E_COMPOSER_NAME_HEADER (header), bcc_destv); - - if (bcc_destv != NULL && *bcc_destv != NULL) - e_composer_header_set_visible (header, TRUE); -} - -void -e_msg_composer_hdrs_set_post_to (EMsgComposerHdrs *hdrs, - const char *post_to) -{ - GList *list; - - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - g_return_if_fail (post_to != NULL); - - list = g_list_append (NULL, g_strdup (post_to)); - - e_msg_composer_hdrs_set_post_to_list (hdrs, list); - - g_free (list->data); - g_list_free (list); -} - -void -e_msg_composer_hdrs_set_post_to_list (EMsgComposerHdrs *hdrs, GList *urls) -{ - EComposerHeader *header; - - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - - header = hdrs->priv->headers[HEADER_POST_TO]; - - e_composer_post_header_set_folders ( - E_COMPOSER_POST_HEADER (header), urls); -} - -void -e_msg_composer_hdrs_set_post_to_base (EMsgComposerHdrs *hdrs, - const gchar *base, - const gchar *post_to) -{ - EComposerHeader *header; - - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - - header = hdrs->priv->headers[HEADER_POST_TO]; - - e_composer_post_header_set_folders_base ( - E_COMPOSER_POST_HEADER (header), base, post_to); -} - -void -e_msg_composer_hdrs_set_subject (EMsgComposerHdrs *hdrs, - const gchar *subject) -{ - EComposerHeader *header; - - g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs)); - g_return_if_fail (subject != NULL); - - header = hdrs->priv->headers[HEADER_SUBJECT]; - - e_composer_text_header_set_text ( - E_COMPOSER_TEXT_HEADER (header), subject); -} - - -CamelInternetAddress * -e_msg_composer_hdrs_get_from (EMsgComposerHdrs *hdrs) -{ - EComposerHeader *header; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - header = hdrs->priv->headers[HEADER_FROM]; - - return e_composer_from_header_get_active_address ( - E_COMPOSER_FROM_HEADER (header)); -} - -CamelInternetAddress * -e_msg_composer_hdrs_get_reply_to (EMsgComposerHdrs *hdrs) -{ - CamelInternetAddress *addr; - EComposerHeader *header; - const gchar *text; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - header = hdrs->priv->headers[HEADER_REPLY_TO]; - - text = e_composer_text_header_get_text ( - E_COMPOSER_TEXT_HEADER (header)); - - if (text == NULL || *text == '\0') - return NULL; - - addr = camel_internet_address_new (); - if (camel_address_unformat (CAMEL_ADDRESS (addr), text) == -1) { - camel_object_unref (CAMEL_OBJECT (addr)); - return NULL; - } - - return addr; -} - -EDestination ** -e_msg_composer_hdrs_get_to (EMsgComposerHdrs *hdrs) -{ - EComposerNameHeader *header; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - header = E_COMPOSER_NAME_HEADER (hdrs->priv->headers[HEADER_TO]); - return e_composer_name_header_get_destinations (header); -} - -EDestination ** -e_msg_composer_hdrs_get_cc (EMsgComposerHdrs *hdrs) -{ - EComposerNameHeader *header; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - header = E_COMPOSER_NAME_HEADER (hdrs->priv->headers[HEADER_CC]); - return e_composer_name_header_get_destinations (header); -} - -EDestination ** -e_msg_composer_hdrs_get_bcc (EMsgComposerHdrs *hdrs) -{ - EComposerNameHeader *header; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - header = E_COMPOSER_NAME_HEADER (hdrs->priv->headers[HEADER_BCC]); - return e_composer_name_header_get_destinations (header); -} - -EDestination ** -e_msg_composer_hdrs_get_recipients (EMsgComposerHdrs *hdrs) -{ - EDestination **to_destv; - EDestination **cc_destv; - EDestination **bcc_destv; - EDestination **recip_destv; - int i, j, n; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - to_destv = e_msg_composer_hdrs_get_to (hdrs); - cc_destv = e_msg_composer_hdrs_get_cc (hdrs); - bcc_destv = e_msg_composer_hdrs_get_bcc (hdrs); - - n = 0; - - for (i = 0; to_destv && to_destv[i] != NULL; i++, n++); - for (i = 0; cc_destv && cc_destv[i] != NULL; i++, n++); - for (i = 0; bcc_destv && bcc_destv[i] != NULL; i++, n++); - - if (n == 0) - return NULL; - - recip_destv = g_new (EDestination *, n + 1); - - j = 0; - - for (i = 0; to_destv && to_destv[i] != NULL; i++, j++) - recip_destv[j] = to_destv[i]; - for (i = 0; cc_destv && cc_destv[i] != NULL; i++, j++) - recip_destv[j] = cc_destv[i]; - for (i = 0; bcc_destv && bcc_destv[i] != NULL; i++, j++) - recip_destv[j] = bcc_destv[i]; - - if (j != n) { - g_warning ("j!=n \n"); - } - recip_destv[j] = NULL; - - g_free (to_destv); - g_free (cc_destv); - g_free (bcc_destv); - - return recip_destv; -} - - -GList * -e_msg_composer_hdrs_get_post_to (EMsgComposerHdrs *hdrs) -{ - EComposerHeader *header; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - header = hdrs->priv->headers[HEADER_POST_TO]; - - return e_composer_post_header_get_folders ( - E_COMPOSER_POST_HEADER (header)); -} - - -const gchar * -e_msg_composer_hdrs_get_subject (EMsgComposerHdrs *hdrs) -{ - GtkWidget *widget; - - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - widget = e_msg_composer_hdrs_get_subject_entry (hdrs); - - return gtk_entry_get_text (GTK_ENTRY (widget)); -} - - -GtkWidget * -e_msg_composer_hdrs_get_reply_to_entry (EMsgComposerHdrs *hdrs) -{ - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - return hdrs->priv->headers[HEADER_REPLY_TO]->input_widget; -} - -GtkWidget * -e_msg_composer_hdrs_get_to_entry (EMsgComposerHdrs *hdrs) -{ - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - return hdrs->priv->headers[HEADER_TO]->input_widget; -} - -GtkWidget * -e_msg_composer_hdrs_get_cc_entry (EMsgComposerHdrs *hdrs) -{ - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - return hdrs->priv->headers[HEADER_CC]->input_widget; -} - -GtkWidget * -e_msg_composer_hdrs_get_bcc_entry (EMsgComposerHdrs *hdrs) -{ - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - return hdrs->priv->headers[HEADER_BCC]->input_widget; -} - -GtkWidget * -e_msg_composer_hdrs_get_post_to_label (EMsgComposerHdrs *hdrs) -{ - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - return hdrs->priv->headers[HEADER_POST_TO]->input_widget; -} - -GtkWidget * -e_msg_composer_hdrs_get_subject_entry (EMsgComposerHdrs *hdrs) -{ - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - return hdrs->priv->headers[HEADER_SUBJECT]->input_widget; -} - -GtkWidget * -e_msg_composer_hdrs_get_from_hbox (EMsgComposerHdrs *hdrs) -{ - g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL); - - return hdrs->priv->headers[HEADER_FROM]->input_widget; -} |