aboutsummaryrefslogtreecommitdiffstats
path: root/composer/e-composer-from-header.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2007-11-28 04:24:44 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2007-11-28 04:24:44 +0800
commitf5bed9bf7b143fff9bd258ea31fdac192e00a0d9 (patch)
tree46dca324c927780390cfbc8f4ddf200184462926 /composer/e-composer-from-header.c
parent8aa60af54eee1092e8963c0927c53e8f738eb4cd (diff)
downloadgsoc2013-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.c178
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;
+}