diff options
Diffstat (limited to 'e-util/e-signature-list.c')
-rw-r--r-- | e-util/e-signature-list.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/e-util/e-signature-list.c b/e-util/e-signature-list.c index 2ada5c45a7..c948dbf65b 100644 --- a/e-util/e-signature-list.c +++ b/e-util/e-signature-list.c @@ -149,12 +149,24 @@ e_signature_list_finalize (GObject *object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static void +add_autogen (ESignatureList *list) +{ + ESignature *autogen; + + autogen = e_signature_new (); + autogen->name = g_strdup ("Autogenerated"); + autogen->autogen = TRUE; + + e_list_append (E_LIST (list), autogen); +} static void gconf_signatures_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data) { ESignatureList *signature_list = user_data; GSList *list, *l, *n, *new_sigs = NULL; + gboolean have_autogen = FALSE; ESignature *signature; EList *old_sigs; EIterator *iter; @@ -179,6 +191,9 @@ gconf_signatures_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, if (e_signature_set_from_xml (signature, l->data)) g_signal_emit (signature_list, signals[SIGNATURE_CHANGED], 0, signature); + if (!have_autogen) + have_autogen = signature->autogen; + break; } } @@ -186,6 +201,11 @@ gconf_signatures_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, g_object_unref (iter); } + if (!have_autogen) { + add_autogen (signature_list); + have_autogen = TRUE; + } + if (!found) { /* Must be a new signature */ signature = e_signature_new_from_xml (l->data); @@ -196,6 +216,11 @@ gconf_signatures_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, g_free (uid); } + if (!have_autogen) { + add_autogen (signature_list); + have_autogen = TRUE; + } + if (new_sigs != NULL) { /* Now emit signals for each added signature. */ l = g_slist_reverse (new_sigs); |