conversationpopupmenu: add option to copy the ring uri

Change-Id: Ic6c80df4be23accb60e34b0c49b923cc68f9514c
Reviewed-by: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
diff --git a/src/conversationpopupmenu.cpp b/src/conversationpopupmenu.cpp
index ccf3171..da66d34 100644
--- a/src/conversationpopupmenu.cpp
+++ b/src/conversationpopupmenu.cpp
@@ -52,6 +52,27 @@
 #define CONVERSATION_POPUP_MENU_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CONVERSATION_POPUP_MENU_TYPE, ConversationPopupMenuPrivate))
 
 static void
+copy_contact_info(G_GNUC_UNUSED GtkWidget *menu, ConversationPopupMenuPrivate* priv)
+{
+    try
+    {
+        auto conversation = priv->accountContainer_->info.conversationModel->filteredConversation(priv->row_);
+        if (conversation.participants.empty()) return;
+        auto& contact = priv->accountContainer_->info.contactModel->getContact(conversation.participants.front());
+        auto bestName = contact.registeredName.empty() ? contact.profileInfo.uri : contact.registeredName;
+        auto text = (gchar *)bestName.c_str();
+        GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+        gtk_clipboard_set_text(clip, text, -1);
+        clip = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+        gtk_clipboard_set_text(clip, text, -1);
+    }
+    catch (...)
+    {
+        g_warning("Can't get conversation at row %i", priv->row_);
+    }
+}
+
+static void
 remove_history_conversation(G_GNUC_UNUSED GtkWidget *menu, ConversationPopupMenuPrivate* priv)
 {
     try
@@ -147,6 +168,9 @@
     auto place_call_conversation = gtk_menu_item_new_with_mnemonic(_("_Place call"));
     gtk_menu_shell_append(GTK_MENU_SHELL(self), place_call_conversation);
     g_signal_connect(place_call_conversation, "activate", G_CALLBACK(place_call), priv);
+    auto copy_name = gtk_menu_item_new_with_mnemonic(_("_Copy name"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(self), copy_name);
+    g_signal_connect(copy_name, "activate", G_CALLBACK(copy_contact_info), priv);
     if (contactInfo.profileInfo.type == lrc::api::profile::Type::TEMPORARY ||
         contactInfo.profileInfo.type == lrc::api::profile::Type::PENDING) {
         // If we can add this conversation
@@ -162,7 +186,7 @@
             g_signal_connect(block_conversation_item, "activate", G_CALLBACK(block_conversation), priv);
         }
     } else {
-        auto rm_history_conversation = gtk_menu_item_new_with_mnemonic(_("_Clear history"));
+        auto rm_history_conversation = gtk_menu_item_new_with_mnemonic(_("C_lear history"));
         gtk_menu_shell_append(GTK_MENU_SHELL(self), rm_history_conversation);
         g_signal_connect(rm_history_conversation, "activate", G_CALLBACK(remove_history_conversation), priv);
         auto rm_conversation_item = gtk_menu_item_new_with_mnemonic(_("_Remove conversation"));