diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2007-11-28 04:24:44 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2007-11-28 04:24:44 +0800 |
commit | f5bed9bf7b143fff9bd258ea31fdac192e00a0d9 (patch) | |
tree | 46dca324c927780390cfbc8f4ddf200184462926 /composer/e-composer-from-header.c | |
parent | 8aa60af54eee1092e8963c0927c53e8f738eb4cd (diff) | |
download | gsoc2013-evolution-f5bed9bf7b143fff9bd258ea31fdac192e00a0d9.tar.gz gsoc2013-evolution-f5bed9bf7b143fff9bd258ea31fdac192e00a0d9.tar.zst gsoc2013-evolution-f5bed9bf7b143fff9bd258ea31fdac192e00a0d9.zip |
** Fixes bug #495123
2007-11-27 Matthew Barnes <mbarnes@redhat.com>
** Fixes bug #495123
* composer/Makefile.am:
Add a bunch of files for managing composer headers.
* composer/e-msg-composer.c (build_message), (from_changed_cb),
(set_editor_signature), (e_msg_composer_set_body),
(e_msg_composer_get_preferred_account):
* plugins/exchange-operations/exchange-mail-send-options.c
(append_to_header):
Use e_msg_composer_hdrs_get_from_account() to obtain the EAccount.
* composer/e-msg-composer-hdrs.c:
* composer/e-msg-composer-hdrs.h:
Massive refactoring to use new EComposerHeader classes.
* composer/e-composer-header.c:
* composer/e-composer-header.h:
* composer/e-composer-from-header.c:
* composer/e-composer-from-header.h:
* composer/e-composer-name-header.c:
* composer/e-composer-name-header.h:
* composer/e-composer-post-header.c:
* composer/e-composer-post-header.h:
* composer/e-composer-text-header.c:
* composer/e-composer-text-header.h:
New GObject classes manage different types of composer headers.
See bug #495123 for a more detailed description of each class.
* mail/mail-session.c (mail_session_init):
Pass the CamelSession to the EAccountComboBox class (ugly hack).
* widgets/misc/Makefile.am:
Add e-account-combo-box.[ch].
* widgets/misc/e-account-combo-box.c:
* widgets/misc/e-account-combo-box.h:
New widget renders an EAccountList as a combo box. Also listens
for changes to the EAccountList and updates itself accordingly.
svn path=/trunk/; revision=34600
Diffstat (limited to 'composer/e-composer-from-header.c')
-rw-r--r-- | composer/e-composer-from-header.c | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/composer/e-composer-from-header.c b/composer/e-composer-from-header.c new file mode 100644 index 0000000000..de4f8ac8e0 --- /dev/null +++ b/composer/e-composer-from-header.c @@ -0,0 +1,178 @@ +#include "e-composer-from-header.h" + +#define E_COMPOSER_FROM_HEADER_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE \ + ((obj), E_TYPE_COMPOSER_FROM_HEADER, EComposerFromHeaderPrivate)) + +struct _EComposerFromHeaderPrivate { + GtkWidget *combo_box; +}; + +static gpointer parent_class; + +static void +composer_from_header_changed_cb (EAccountComboBox *combo_box, + EComposerFromHeader *header) +{ + g_signal_emit_by_name (header, "changed"); +} + +static void +composer_from_header_dispose (GObject *object) +{ + EComposerFromHeaderPrivate *priv; + + priv = E_COMPOSER_FROM_HEADER_GET_PRIVATE (object); + + if (priv->combo_box != NULL) { + g_object_unref (priv->combo_box); + priv->combo_box = NULL; + } + + /* Chain up to parent's dispose() method. */ + G_OBJECT_CLASS (parent_class)->dispose (object); +} + +static void +composer_from_header_class_init (EComposerFromHeaderClass *class) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (class); + g_type_class_add_private (class, sizeof (EComposerFromHeaderPrivate)); + + object_class = G_OBJECT_CLASS (class); + object_class->dispose = composer_from_header_dispose; +} + +static void +composer_from_header_init (EComposerFromHeader *header) +{ + GtkWidget *hbox; + GtkWidget *widget; + + header->priv = E_COMPOSER_FROM_HEADER_GET_PRIVATE (header); + + hbox = g_object_ref_sink (gtk_hbox_new (FALSE, 6)); + E_COMPOSER_HEADER (header)->input_widget = hbox; + + widget = e_account_combo_box_new (); + g_signal_connect ( + widget, "changed", + G_CALLBACK (composer_from_header_changed_cb), header); + gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0); + header->priv->combo_box = g_object_ref_sink (widget); + gtk_widget_show (widget); +} + +GType +e_composer_from_header_get_type (void) +{ + static GType type = 0; + + if (G_UNLIKELY (type == 0)) { + static const GTypeInfo type_info = { + sizeof (EComposerFromHeaderClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) composer_from_header_class_init, + (GClassFinalizeFunc) NULL, + NULL, /* class_data */ + sizeof (EComposerFromHeader), + 0, /* n_preallocs */ + (GInstanceInitFunc) composer_from_header_init, + NULL /* value_table */ + }; + + type = g_type_register_static ( + E_TYPE_COMPOSER_HEADER, "EComposerFromHeader", + &type_info, 0); + } + + return type; +} + +EComposerHeader * +e_composer_from_header_new (const gchar *label) +{ + return g_object_new ( + E_TYPE_COMPOSER_FROM_HEADER, "label", label, + "button", FALSE, NULL); +} + +void +e_composer_from_header_set_account_list (EComposerFromHeader *header, + EAccountList *account_list) +{ + EAccountComboBox *combo_box; + + g_return_if_fail (E_IS_COMPOSER_FROM_HEADER (header)); + + combo_box = E_ACCOUNT_COMBO_BOX (header->priv->combo_box); + e_account_combo_box_set_account_list (combo_box, account_list); +} + +EAccount * +e_composer_from_header_get_active (EComposerFromHeader *header) +{ + EAccountComboBox *combo_box; + + g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), NULL); + + combo_box = E_ACCOUNT_COMBO_BOX (header->priv->combo_box); + return e_account_combo_box_get_active (combo_box); +} + +gboolean +e_composer_from_header_set_active (EComposerFromHeader *header, + EAccount *account) +{ + EAccountComboBox *combo_box; + + g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), FALSE); + + combo_box = E_ACCOUNT_COMBO_BOX (header->priv->combo_box); + return e_account_combo_box_set_active (combo_box, account); +} + +const gchar * +e_composer_from_header_get_active_name (EComposerFromHeader *header) +{ + EAccountComboBox *combo_box; + + g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), NULL); + + combo_box = E_ACCOUNT_COMBO_BOX (header->priv->combo_box); + return e_account_combo_box_get_active_name (combo_box); +} + +gboolean +e_composer_from_header_set_active_name (EComposerFromHeader *header, + const gchar *account_name) +{ + EAccountComboBox *combo_box; + + g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), FALSE); + + combo_box = E_ACCOUNT_COMBO_BOX (header->priv->combo_box); + return e_account_combo_box_set_active_name (combo_box, account_name); +} + +CamelInternetAddress * +e_composer_from_header_get_active_address (EComposerFromHeader *header) +{ + CamelInternetAddress *address; + EAccount *account; + + g_return_val_if_fail (E_IS_COMPOSER_FROM_HEADER (header), NULL); + + account = e_composer_from_header_get_active (header); + if (account == NULL) + return NULL; + + address = camel_internet_address_new (); + camel_internet_address_add ( + address, account->id->name, account->id->address); + + return address; +} |