aboutsummaryrefslogtreecommitdiffstats
path: root/composer/e-msg-composer-hdrs.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2007-12-02 09:41:04 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2007-12-02 09:41:04 +0800
commit8266bb685a189d8560450ff161efdd5629849f11 (patch)
treef86f9368649f2a036730a704fb97c12160c10365 /composer/e-msg-composer-hdrs.c
parent253452654a4bc2fdd44f61446890ccf556c82958 (diff)
downloadgsoc2013-evolution-8266bb685a189d8560450ff161efdd5629849f11.tar
gsoc2013-evolution-8266bb685a189d8560450ff161efdd5629849f11.tar.gz
gsoc2013-evolution-8266bb685a189d8560450ff161efdd5629849f11.tar.bz2
gsoc2013-evolution-8266bb685a189d8560450ff161efdd5629849f11.tar.lz
gsoc2013-evolution-8266bb685a189d8560450ff161efdd5629849f11.tar.xz
gsoc2013-evolution-8266bb685a189d8560450ff161efdd5629849f11.tar.zst
gsoc2013-evolution-8266bb685a189d8560450ff161efdd5629849f11.zip
** Fixes part of bug #495123
2007-12-01 Matthew Barnes <mbarnes@redhat.com> ** Fixes part of bug #495123 * composer/e-msg-composer.c: * composer/e-msg-composer-hdrs.h: * composer/e-msg-composer-hdrs.c: Move signature handling to e-msg-composer-hdrs.c. Use an ESignatureComboBox. * composer/e-composer-from-header.h: * composer/e-composer-from-header.c: Clean up the GtkHBox hack. The signature combo is now packed directly into the GtkTable. * composer/e-composer-name-header.c: * composer/e-composer-text-header.c: Code cleanup. * widgets/misc/Makefile.am: Add e-signature-combo-box.[ch]. * widget/misc/e-account-combo-box.c (account_combo_box_refresh_cb): Make sure the EAccount isn't lost while swapping models. * widget/misc/e-signature-combo-box.c: * widget/misc/e-signature-combo-box.h: New widget renders an ESignatureList as a combo box. Also listens for changes to the ESignatureList and updates itself accordingly. svn path=/trunk/; revision=34620
Diffstat (limited to 'composer/e-msg-composer-hdrs.c')
-rw-r--r--composer/e-msg-composer-hdrs.c82
1 files changed, 80 insertions, 2 deletions
diff --git a/composer/e-msg-composer-hdrs.c b/composer/e-msg-composer-hdrs.c
index 02208c14fa..471cc40dc2 100644
--- a/composer/e-msg-composer-hdrs.c
+++ b/composer/e-msg-composer-hdrs.c
@@ -41,6 +41,7 @@
#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"
@@ -68,6 +69,7 @@ enum {
SUBJECT_CHANGED,
HDRS_CHANGED,
FROM_CHANGED,
+ SIGNATURE_CHANGED,
LAST_SIGNAL
};
@@ -78,6 +80,7 @@ struct _EMsgComposerHdrsPrivate {
BonoboUIComponent *uic;
EComposerHeader *headers[NUM_HEADERS];
+ GtkWidget *signature_combo_box;
};
static gpointer parent_class;
@@ -105,6 +108,12 @@ from_changed (EComposerFromHeader *from_header, EMsgComposerHdrs *hdrs)
}
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;
@@ -176,6 +185,7 @@ msg_composer_hdrs_constructor (GType type,
{
GObject *object;
EMsgComposerHdrsPrivate *priv;
+ GtkWidget *widget;
guint rows, ii;
/* Chain up to parent's constructor() method. */
@@ -185,7 +195,7 @@ msg_composer_hdrs_constructor (GType type,
priv = E_MSG_COMPOSER_HDRS_GET_PRIVATE (object);
rows = G_N_ELEMENTS (priv->headers);
- gtk_table_resize (GTK_TABLE (object), rows, 2);
+ 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);
@@ -198,9 +208,27 @@ msg_composer_hdrs_constructor (GType type,
0, 1, ii, ii + 1, GTK_FILL, GTK_FILL, 0, 3);
gtk_table_attach (
GTK_TABLE (object), priv->headers[ii]->input_widget,
- 1, 2, ii, ii + 1, GTK_FILL | GTK_EXPAND, 0, 0, 3);
+ 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;
}
@@ -224,6 +252,11 @@ msg_composer_hdrs_dispose (GObject *object)
}
}
+ 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);
}
@@ -267,6 +300,14 @@ msg_composer_hdrs_class_init (EMsgComposerHdrsClass *class)
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
@@ -274,6 +315,7 @@ msg_composer_hdrs_init (EMsgComposerHdrs *hdrs)
{
EComposerHeader *header;
ENameSelector *name_selector;
+ GtkWidget *widget;
hdrs->priv = E_MSG_COMPOSER_HDRS_GET_PRIVATE (hdrs);
@@ -318,6 +360,19 @@ msg_composer_hdrs_init (EMsgComposerHdrs *hdrs)
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
@@ -559,6 +614,29 @@ e_msg_composer_hdrs_set_from_account (EMsgComposerHdrs *hdrs,
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)