aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-10-01 02:28:24 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-10-09 14:08:59 +0200
commit7fbdd24b503d85423d51da49896cc99191d65c4d (patch)
tree85dc584805ff5d80a001207899f55eeeee60931e
parent964de8706d49f73717f05cda518d16e1fd48a0ad (diff)
Allow to copy messages
-rw-r--r--main/src/ui/conversation_content_view/conversation_view.vala2
-rw-r--r--main/src/ui/conversation_content_view/message_widget.vala9
-rw-r--r--main/src/ui/conversation_view.vala2
-rw-r--r--main/src/ui/main_window.vala6
4 files changed, 19 insertions, 0 deletions
diff --git a/main/src/ui/conversation_content_view/conversation_view.vala b/main/src/ui/conversation_content_view/conversation_view.vala
index d7660488..9825bc15 100644
--- a/main/src/ui/conversation_content_view/conversation_view.vala
+++ b/main/src/ui/conversation_content_view/conversation_view.vala
@@ -11,6 +11,7 @@ namespace Dino.Ui.ConversationSummary {
public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins.NotificationCollection {
public signal void on_quote_text(string text);
+ public signal void on_copy_text(string text);
public Conversation? conversation { get; private set; }
[GtkChild] public unowned ScrolledWindow scrolled;
@@ -330,6 +331,7 @@ public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins
MessageMetaItem current_item = item as MessageMetaItem;
current_item.on_quote_text.connect((t, text) => on_quote_text(text));
+ current_item.on_copy_text.connect((t, text) => on_copy_text(text));
}
meta_items.add(item);
}
diff --git a/main/src/ui/conversation_content_view/message_widget.vala b/main/src/ui/conversation_content_view/message_widget.vala
index b17f04fe..c2feec0d 100644
--- a/main/src/ui/conversation_content_view/message_widget.vala
+++ b/main/src/ui/conversation_content_view/message_widget.vala
@@ -11,6 +11,7 @@ namespace Dino.Ui.ConversationSummary {
public class MessageMetaItem : ContentMetaItem {
public signal void on_quote_text(string text);
+ public signal void on_copy_text(string text);
private StreamInteractor stream_interactor;
private MessageItemWidget message_item_widget;
private MessageItem message_item;
@@ -56,6 +57,14 @@ public class MessageMetaItem : ContentMetaItem {
};
actions.add(action2);
+ Plugins.MessageAction copy_action = new Plugins.MessageAction();
+ copy_action.icon_name = "edit-copy";
+ copy_action.callback = (button, content_meta_item_activated, widget) => {
+ string text = ((MessageItem) message_item_widget.content_item).message.body;
+ on_copy_text(text);
+ };
+ actions.add(copy_action);
+
if (allowed && !in_edit_mode) {
Plugins.MessageAction action1 = new Plugins.MessageAction();
action1.icon_name = "document-edit-symbolic";
diff --git a/main/src/ui/conversation_view.vala b/main/src/ui/conversation_view.vala
index 47d54f92..fd0c8d66 100644
--- a/main/src/ui/conversation_view.vala
+++ b/main/src/ui/conversation_view.vala
@@ -14,10 +14,12 @@ public class ConversationView : Gtk.Overlay {
[GtkChild] public unowned ChatInput.View chat_input;
[GtkChild] public unowned ConversationSummary.ConversationView conversation_frame;
[GtkChild] public unowned Revealer white_revealer;
+ public signal void copy_text(string text);
construct {
white_revealer.notify["child-revealed"].connect_after(on_child_revealed_changed);
conversation_frame.on_quote_text.connect((t, text) => on_quote_text(text));
+ conversation_frame.on_copy_text.connect((t, text) => copy_text(text));
}
public void on_quote_text(string text) {
diff --git a/main/src/ui/main_window.vala b/main/src/ui/main_window.vala
index 14563c28..15502350 100644
--- a/main/src/ui/main_window.vala
+++ b/main/src/ui/main_window.vala
@@ -78,6 +78,12 @@ public class MainWindow : Gtk.Window {
search_entry = (SearchEntry) builder.get_object("search_entry");
Image conversation_list_placeholder_image = (Image) builder.get_object("conversation_list_placeholder_image");
conversation_list_placeholder_image.set_from_pixbuf(new Pixbuf.from_resource("/im/dino/Dino/icons/dino-conversation-list-placeholder-arrow.svg"));
+
+ conversation_view.copy_text.connect((text) => {
+ var display = get_display();
+ var clipboard = Gtk.Clipboard.get_default(display);
+ clipboard.set_text(text, text.length);
+ });
}
private void update_headerbar() {