File 1097.patch of Package dino

From e5454b81b39023441b67f734c922b2c27a89c014 Mon Sep 17 00:00:00 2001
From: MarcoPolo-PasTonMolo <marcopolopastonmolo@protonmail.com>
Date: Sun, 22 Aug 2021 16:34:24 +0300
Subject: [PATCH 1/2] Adds quote functionality

---
 .../conversation_view.vala                    |  4 +++
 .../message_widget.vala                       | 11 ++++++++
 main/src/ui/conversation_view.vala            | 27 +++++++++++++++++++
 3 files changed, 42 insertions(+)

diff --git a/main/src/ui/conversation_content_view/conversation_view.vala b/main/src/ui/conversation_content_view/conversation_view.vala
index 9eb18cfd2..3102975c6 100644
--- a/main/src/ui/conversation_content_view/conversation_view.vala
+++ b/main/src/ui/conversation_content_view/conversation_view.vala
@@ -10,6 +10,7 @@ namespace Dino.Ui.ConversationSummary {
 [GtkTemplate (ui = "/im/dino/Dino/conversation_content_view/view.ui")]
 public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins.NotificationCollection {
 
+    public signal void on_quote_text(string nick, string text);
     public Conversation? conversation { get; private set; }
 
     [GtkChild] public ScrolledWindow scrolled;
@@ -308,6 +309,9 @@ public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins
             insert_new(item);
             if (item as ContentMetaItem != null) {
                 content_items.add(item);
+
+                MessageMetaItem current_item = item as MessageMetaItem;
+                current_item.on_quote_text.connect((t, nick, text) => on_quote_text(nick, 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 44584709e..08c198eb7 100644
--- a/main/src/ui/conversation_content_view/message_widget.vala
+++ b/main/src/ui/conversation_content_view/message_widget.vala
@@ -10,6 +10,7 @@ namespace Dino.Ui.ConversationSummary {
 
 public class MessageMetaItem : ContentMetaItem {
 
+    public signal void on_quote_text(string nick, string text);
     private StreamInteractor stream_interactor;
     private MessageItemWidget message_item_widget;
     private MessageItem message_item;
@@ -54,6 +55,16 @@ public class MessageMetaItem : ContentMetaItem {
             };
             actions.add(action1);
         }
+
+        Plugins.MessageAction action2 = new Plugins.MessageAction();
+        action2.icon_name = "go-previous-symbolic-rtl";
+        action2.callback = (button, content_meta_item_activated, widget) => {
+            string nick = Util.get_participant_display_name(stream_interactor, message_item.conversation, message_item.message.from);
+            string text_to_quote = ((MessageItem) message_item_widget.content_item).message.body;
+            on_quote_text(nick, text_to_quote);
+        };
+        actions.add(action2);
+
         return actions;
     }
 
diff --git a/main/src/ui/conversation_view.vala b/main/src/ui/conversation_view.vala
index 53f1c4c86..8c7a67417 100644
--- a/main/src/ui/conversation_view.vala
+++ b/main/src/ui/conversation_view.vala
@@ -17,6 +17,33 @@ public class ConversationView : Gtk.Overlay {
 
     construct {
         white_revealer.notify["child-revealed"].connect_after(on_child_revealed_changed);
+        conversation_frame.on_quote_text.connect((t, nick, text) => on_quote_text(nick, text));
+    }
+
+    public void on_quote_text(string nick, string text) {
+        unowned TextBuffer buffer = chat_input.chat_text_view.text_view.buffer;
+        string text_to_quote = text;
+
+        Regex quotes = new Regex("((?<=\n)>.*(\n|$))|(^>.*(\n|$))");
+        Regex whitespace = new Regex("(\n *){2,}");
+        Regex first_column = new Regex("(^|\n)(.+)");
+        Regex end = new Regex("\n*$");
+
+        text_to_quote = quotes.replace(text_to_quote, -1, 0, "");
+        text_to_quote = whitespace.replace(text_to_quote, -1, 0, "\n");
+        text_to_quote = "%s: %s".printf(nick, text_to_quote);
+
+        text_to_quote = first_column.replace(text_to_quote, -1, 0, "\\1> \\2");
+
+        string to_replace = "\n";
+        if(buffer.cursor_position > 0) {
+            to_replace = "";
+            text_to_quote = "\n" + text_to_quote;
+        }
+
+        text_to_quote = end.replace(text_to_quote, -1, 0, to_replace);
+
+        buffer.insert_at_cursor(text_to_quote, -1);
     }
 
     public void add_overlay_dialog(Widget widget) {

From 1aa327d5c4a713189c5563f204cf16e4f3a76c0f Mon Sep 17 00:00:00 2001
From: MarcoPolo-PasTonMolo <marcopolopastonmolo@protonmail.com>
Date: Sun, 22 Aug 2021 18:04:51 +0300
Subject: [PATCH 2/2] Fix edit button not showing

---
 main/data/conversation_content_view/view.ui     | 15 +++++++++++++++
 .../conversation_view.vala                      | 15 +++++++++++++--
 .../message_widget.vala                         | 17 +++++++++--------
 3 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/main/data/conversation_content_view/view.ui b/main/data/conversation_content_view/view.ui
index 17f753f58..7138c6b97 100644
--- a/main/data/conversation_content_view/view.ui
+++ b/main/data/conversation_content_view/view.ui
@@ -58,6 +58,21 @@
                                                                     </child>
                                                                 </object>
                                                             </child>
+                                                            <child>
+                                                                <object class="GtkButton" id="button2">
+                                                                    <property name="vexpand">False</property>
+                                                                    <property name="halign">end</property>
+                                                                    <property name="valign">end</property>
+                                                                    <property name="visible">True</property>
+                                                                    <child>
+                                                                        <object class="GtkImage" id="button2_icon">
+                                                                            <property name="icon-name">go-previous-symbolic-rtl</property>
+                                                                            <property name="icon-size">1</property>
+                                                                            <property name="visible">True</property>
+                                                                        </object>
+                                                                    </child>
+                                                                </object>
+                                                            </child>
                                                         </object>
                                                     </child>
                                             </object>
diff --git a/main/src/ui/conversation_content_view/conversation_view.vala b/main/src/ui/conversation_content_view/conversation_view.vala
index 3102975c6..99e6655ee 100644
--- a/main/src/ui/conversation_content_view/conversation_view.vala
+++ b/main/src/ui/conversation_content_view/conversation_view.vala
@@ -18,6 +18,8 @@ public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins
     [GtkChild] private Box message_menu_box;
     [GtkChild] private Button button1;
     [GtkChild] private Image button1_icon;
+    [GtkChild] private Button button2;
+    [GtkChild] private Image button2_icon;
     [GtkChild] private Box notifications;
     [GtkChild] private Box main;
     [GtkChild] private EventBox main_event_box;
@@ -78,10 +80,14 @@ public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins
         main_event_box.motion_notify_event.connect(on_motion_notify_event);
 
         button1.clicked.connect(() => {
-            current_meta_item.get_item_actions(Plugins.WidgetType.GTK)[0].callback(button1, current_meta_item, currently_highlighted.widget);
+            current_meta_item.get_item_actions(Plugins.WidgetType.GTK)[1].callback(button1, current_meta_item, currently_highlighted.widget);
             update_message_menu();
         });
 
+        button2.clicked.connect(() => {
+            current_meta_item.get_item_actions(Plugins.WidgetType.GTK)[0].callback(button2, current_meta_item, currently_highlighted.widget);
+        });
+
         return this;
     }
 
@@ -187,9 +193,14 @@ public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins
 
         var actions = current_meta_item.get_item_actions(Plugins.WidgetType.GTK);
         message_menu_box.visible = actions != null && actions.size > 0;
+
         if (actions != null && actions.size == 1) {
+            button1.visible = false;
+        }
+
+        if (actions != null && actions.size == 2) {
             button1.visible = true;
-            button1_icon.set_from_icon_name(actions[0].icon_name, IconSize.SMALL_TOOLBAR);
+            button1_icon.set_from_icon_name(actions[1].icon_name, IconSize.SMALL_TOOLBAR);
         }
     }
 
diff --git a/main/src/ui/conversation_content_view/message_widget.vala b/main/src/ui/conversation_content_view/message_widget.vala
index 08c198eb7..6847a36e9 100644
--- a/main/src/ui/conversation_content_view/message_widget.vala
+++ b/main/src/ui/conversation_content_view/message_widget.vala
@@ -47,14 +47,6 @@ public class MessageMetaItem : ContentMetaItem {
 
         bool allowed = stream_interactor.get_module(MessageCorrection.IDENTITY).is_own_correction_allowed(message_item.conversation, message_item.message);
         Gee.List<Plugins.MessageAction> actions = new ArrayList<Plugins.MessageAction>();
-        if (allowed && !in_edit_mode) {
-            Plugins.MessageAction action1 = new Plugins.MessageAction();
-            action1.icon_name = "document-edit-symbolic";
-            action1.callback = (button, content_meta_item_activated, widget) => {
-                this.in_edit_mode = true;
-            };
-            actions.add(action1);
-        }
 
         Plugins.MessageAction action2 = new Plugins.MessageAction();
         action2.icon_name = "go-previous-symbolic-rtl";
@@ -65,6 +57,15 @@ public class MessageMetaItem : ContentMetaItem {
         };
         actions.add(action2);
 
+        if (allowed && !in_edit_mode) {
+            Plugins.MessageAction action1 = new Plugins.MessageAction();
+            action1.icon_name = "document-edit-symbolic";
+            action1.callback = (button, content_meta_item_activated, widget) => {
+                this.in_edit_mode = true;
+            };
+            actions.add(action1);
+        }
+
         return actions;
     }
 
openSUSE Build Service is sponsored by