[fractal/fractal-next] event-actions: Implement Copy for sent messages



commit 8b248c0e4ab229229935fae168e24548ba01b31a
Author: Kirill Schmidt <kirill schmidt teckids org>
Date:   Fri Jan 21 21:05:37 2022 +0100

    event-actions: Implement Copy for sent messages
    
    In order to use the "Copy Text" option only on
    text messages the code checks the MessageType.
    The macro `action!` sets the body of the
    event to the content of the clipboard.
    
    Enhances #745.

 src/session/room/event_actions.rs | 49 ++++++++++++++++++++++++---------------
 1 file changed, 30 insertions(+), 19 deletions(-)
---
diff --git a/src/session/room/event_actions.rs b/src/session/room/event_actions.rs
index 5301d437..5925e535 100644
--- a/src/session/room/event_actions.rs
+++ b/src/session/room/event_actions.rs
@@ -102,28 +102,39 @@ where
                 }
             }));
             action_group.add_action(&toggle_reaction);
+            match message.msgtype {
+                // Copy Text-Message
+                MessageType::Text(text_message) => {
+                    gtk_macros::action!(
+                        &action_group,
+                        "copy-text",
+                        clone!(@weak self as widget => move |_, _| {
+                            widget.clipboard().set_text(&text_message.body);
+                        })
+                    );
+                }
+                MessageType::File(_) => {
+                    // Save message's file
+                    let file_save = gio::SimpleAction::new("file-save", None);
+                    file_save.connect_activate(
+                        clone!(@weak self as widget, @weak event => move |_, _| {
+                            widget.save_event_file(event);
+                        }),
+                    );
+                    action_group.add_action(&file_save);
 
-            if let MessageType::File(_) = message.msgtype {
-                // Save message's file
-                let file_save = gio::SimpleAction::new("file-save", None);
-                file_save.connect_activate(
-                    clone!(@weak self as widget, @weak event => move |_, _| {
-                        widget.save_event_file(event);
-                    }),
-                );
-                action_group.add_action(&file_save);
-
-                // Open message's file
-                let file_open = gio::SimpleAction::new("file-open", None);
-                file_open.connect_activate(
-                    clone!(@weak self as widget, @weak event => move |_, _| {
-                        widget.open_event_file(event);
-                    }),
-                );
-                action_group.add_action(&file_open);
+                    // Open message's file
+                    let file_open = gio::SimpleAction::new("file-open", None);
+                    file_open.connect_activate(
+                        clone!(@weak self as widget, @weak event => move |_, _| {
+                            widget.open_event_file(event);
+                        }),
+                    );
+                    action_group.add_action(&file_open);
+                }
+                _ => {}
             }
         }
-
         self.insert_action_group("event", Some(&action_group));
         Some(action_group)
     }


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