[evolution/gnome-3-36] I#914 - Allow setting Reply-To and From values via a mailto: URI



commit 6278afacdaeec9f123d55bcf7b101949032cbf91
Author: Milan Crha <mcrha redhat com>
Date:   Mon May 11 15:44:35 2020 +0200

    I#914 - Allow setting Reply-To and From values via a mailto: URI
    
    Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/914

 src/composer/e-msg-composer.c | 60 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 58 insertions(+), 2 deletions(-)
---
diff --git a/src/composer/e-msg-composer.c b/src/composer/e-msg-composer.c
index 1c6db9adb1..810f4b1379 100644
--- a/src/composer/e-msg-composer.c
+++ b/src/composer/e-msg-composer.c
@@ -4898,9 +4898,65 @@ handle_mailto (EMsgComposer *composer,
                                g_object_unref (attachment);
                                g_clear_object (&file);
                        } else if (!g_ascii_strcasecmp (header, "from")) {
-                               /* Ignore */
+                               EComposerHeader *composer_header;
+
+                               camel_url_decode (content);
+
+                               composer_header = e_composer_header_table_get_header (table, 
E_COMPOSER_HEADER_FROM);
+
+                               if (content && *content && composer_header && composer_header->input_widget) {
+                                       GtkTreeModel *model;
+                                       GtkTreeIter iter;
+
+                                       model = gtk_combo_box_get_model (GTK_COMBO_BOX 
(composer_header->input_widget));
+
+                                       if (model && gtk_tree_model_get_iter_first (model, &iter)) {
+                                               ESourceRegistry *registry;
+                                               gchar *combo_id = NULL, *address = NULL, *uid = NULL;
+                                               gboolean done;
+
+                                               registry = e_mail_identity_combo_box_get_registry 
(E_MAIL_IDENTITY_COMBO_BOX (composer_header->input_widget));
+
+                                               do {
+                                                       gtk_tree_model_get (model, &iter,
+                                                               E_MAIL_IDENTITY_COMBO_BOX_COLUMN_COMBO_ID, 
&combo_id,
+                                                               E_MAIL_IDENTITY_COMBO_BOX_COLUMN_UID, &uid,
+                                                               E_MAIL_IDENTITY_COMBO_BOX_COLUMN_ADDRESS, 
&address,
+                                                               -1);
+
+                                                       done = combo_id && address && g_ascii_strcasecmp 
(address, content) == 0;
+
+                                                       if (!done && uid) {
+                                                               ESource *source;
+
+                                                               source = e_source_registry_ref_source 
(registry, uid);
+
+                                                               if (source && e_source_has_extension (source, 
E_SOURCE_EXTENSION_MAIL_IDENTITY)) {
+                                                                       ESourceMailIdentity *extension;
+
+                                                                       g_clear_pointer (&address, g_free);
+
+                                                                       extension = e_source_get_extension 
(source, E_SOURCE_EXTENSION_MAIL_IDENTITY);
+                                                                       address = 
e_source_mail_identity_dup_address (extension);
+
+                                                                       done = combo_id && address && 
g_ascii_strcasecmp (address, content) == 0;
+                                                               }
+
+                                                               g_clear_object (&source);
+                                                       }
+
+                                                       if (done)
+                                                               gtk_combo_box_set_active_id (GTK_COMBO_BOX 
(composer_header->input_widget), combo_id);
+
+                                                       g_clear_pointer (&combo_id, g_free);
+                                                       g_clear_pointer (&address, g_free);
+                                                       g_clear_pointer (&uid, g_free);
+                                               } while (!done && gtk_tree_model_iter_next (model, &iter));
+                                       }
+                               }
                        } else if (!g_ascii_strcasecmp (header, "reply-to")) {
-                               /* ignore */
+                               camel_url_decode (content);
+                               e_composer_header_table_set_reply_to (table, content);
                        } else {
                                /* add an arbitrary header? */
                                camel_url_decode (content);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]