[geary] Make the conversation address popover copy the full address. Bug 765516.



commit e789173c3097a07e394116861a786a59236d6c6e
Author: Michael James Gratton <mike vee net>
Date:   Sat Oct 8 20:23:38 2016 +1100

    Make the conversation address popover copy the full address. Bug 765516.
    
    * src/client/conversation-viewer/conversation-message.vala
      (ConversationMessage::on_address_box_child_activated): Set the copy
      action's param using the full address.
      (ConversationMessage::set_action_param_strings): New method to allow
      specifying different action param values.

 .../conversation-viewer/conversation-message.vala  |   48 ++++++++++++++-----
 1 files changed, 35 insertions(+), 13 deletions(-)
---
diff --git a/src/client/conversation-viewer/conversation-message.vala 
b/src/client/conversation-viewer/conversation-message.vala
index d06208a..53a807f 100644
--- a/src/client/conversation-viewer/conversation-message.vala
+++ b/src/client/conversation-viewer/conversation-message.vala
@@ -681,6 +681,24 @@ public class ConversationMessage : Gtk.Grid {
         return menu;
     }
 
+    private Menu set_action_param_strings(MenuModel existing,
+                                          Gee.Map<string,string> values) {
+        Menu menu = new Menu();
+        for (int i = 0; i < existing.get_n_items(); i++) {
+            MenuItem item = new MenuItem.from_model(existing, i);
+            Variant action = item.get_attribute_value(
+                Menu.ATTRIBUTE_ACTION, VariantType.STRING
+            );
+            string fq_name = action.get_string();
+            string name = fq_name.substring(fq_name.index_of(".") + 1);
+            item.set_action_and_target(
+                fq_name, VariantType.STRING.dup_string(), values[name]
+            );
+            menu.append_item(item);
+        }
+        return menu;
+    }
+
     private string format_originator_preview(string empty_from_text) {
         string text = "";
         if (this.message.from != null && this.message.from.size > 0) {
@@ -1276,18 +1294,21 @@ public class ConversationMessage : Gtk.Grid {
         if (address_child != null) {
             address_child.set_state_flags(Gtk.StateFlags.ACTIVE, false);
 
-            string address = address_child.address.address;
+            Geary.RFC822.MailboxAddress address = address_child.address;
+            Gee.Map<string,string> values = new Gee.HashMap<string,string>();
+            values[ACTION_OPEN_LINK] =
+                Geary.ComposedEmail.MAILTO_SCHEME + address.address;
+            values[ACTION_COPY_EMAIL] = address.get_full_address();
+            values[ACTION_SEARCH_FROM] = address.address;
+
             Menu model = new Menu();
             model.append_section(
-                null, set_action_param_string(
-                    this.context_menu_email, "mailto:"; + address
-                    ));
+                null, set_action_param_strings(this.context_menu_email, values)
+            );
             model.append_section(
-                null, set_action_param_string(
-                    this.context_menu_contact, address
-                    ));
-            Gtk.Popover popover =
-            new Gtk.Popover.from_model(child, model);
+                null, set_action_param_strings(this.context_menu_contact, values)
+            );
+            Gtk.Popover popover = new Gtk.Popover.from_model(child, model);
             popover.set_position(Gtk.PositionType.BOTTOM);
             popover.closed.connect(() => {
                     address_child.unset_state_flags(Gtk.StateFlags.ACTIVE);
@@ -1461,11 +1482,12 @@ public class ConversationMessage : Gtk.Grid {
     }
 
     private void on_copy_email_address(Variant? param) {
-        string mailto = param.get_string().substring(
-            Geary.ComposedEmail.MAILTO_SCHEME.length, -1
-        );
+        string value = param.get_string();
+        if (value.has_prefix(Geary.ComposedEmail.MAILTO_SCHEME)) {
+            value = value.substring(Geary.ComposedEmail.MAILTO_SCHEME.length, -1);
+        }
         Gtk.Clipboard clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD);
-        clipboard.set_text(mailto, -1);
+        clipboard.set_text(value, -1);
         clipboard.store();
     }
 


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