aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/conversation_content_view/message_widget.vala
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2023-02-27 23:38:31 +0100
committerfiaxh <git@lightrise.org>2023-02-27 23:38:31 +0100
commitfb799e3ba8313ff2da53d9d5c34f8421f164cbf1 (patch)
tree2de44bcf7a01917610d9ad96396da3df5a314ae9 /main/src/ui/conversation_content_view/message_widget.vala
parentc526848098ff187615f0be0b531c9b45644d0e03 (diff)
downloaddino-fb799e3ba8313ff2da53d9d5c34f8421f164cbf1.tar.gz
dino-fb799e3ba8313ff2da53d9d5c34f8421f164cbf1.zip
Fix some memory leaks
Diffstat (limited to 'main/src/ui/conversation_content_view/message_widget.vala')
-rw-r--r--main/src/ui/conversation_content_view/message_widget.vala88
1 files changed, 51 insertions, 37 deletions
diff --git a/main/src/ui/conversation_content_view/message_widget.vala b/main/src/ui/conversation_content_view/message_widget.vala
index d7733d5a..11b38286 100644
--- a/main/src/ui/conversation_content_view/message_widget.vala
+++ b/main/src/ui/conversation_content_view/message_widget.vala
@@ -19,6 +19,7 @@ public class MessageMetaItem : ContentMetaItem {
private StreamInteractor stream_interactor;
private MessageItem message_item;
public Message.Marked marked { get; set; }
+ public Plugins.ConversationItemWidgetInterface outer = null;
MessageItemEditMode? edit_mode = null;
ChatTextViewController? controller = null;
@@ -35,6 +36,8 @@ public class MessageMetaItem : ContentMetaItem {
message_item = content_item as MessageItem;
this.stream_interactor = stream_interactor;
+ stream_interactor.get_module(MessageCorrection.IDENTITY).received_correction.connect(on_received_correction);
+
label.activate_link.connect(on_label_activate_link);
Message message = ((MessageItem) content_item).message;
@@ -146,43 +149,9 @@ public class MessageMetaItem : ContentMetaItem {
}
public override Object? get_widget(Plugins.ConversationItemWidgetInterface outer, Plugins.WidgetType type) {
+ this.outer = outer;
- stream_interactor.get_module(MessageCorrection.IDENTITY).received_correction.connect(on_received_correction);
-
- this.notify["in-edit-mode"].connect(() => {
- if (in_edit_mode == false) return;
- bool allowed = stream_interactor.get_module(MessageCorrection.IDENTITY).is_own_correction_allowed(message_item.conversation, message_item.message);
- if (allowed) {
- MessageItem message_item = content_item as MessageItem;
- Message message = message_item.message;
-
- edit_mode = new MessageItemEditMode();
- controller = new ChatTextViewController(edit_mode.chat_text_view, stream_interactor);
- Conversation conversation = message_item.conversation;
- controller.initialize_for_conversation(conversation);
-
- edit_mode.cancelled.connect(() => {
- in_edit_mode = false;
- outer.set_widget(label, Plugins.WidgetType.GTK4, 2);
- });
- edit_mode.send.connect(() => {
- if (((MessageItem) content_item).message.body != edit_mode.chat_text_view.text_view.buffer.text) {
- on_edit_send(edit_mode.chat_text_view.text_view.buffer.text);
- } else {
-// edit_cancelled();
- }
- in_edit_mode = false;
- outer.set_widget(label, Plugins.WidgetType.GTK4, 2);
- });
-
- edit_mode.chat_text_view.text_view.buffer.text = message.body;
-
- outer.set_widget(edit_mode, Plugins.WidgetType.GTK4, 2);
- edit_mode.chat_text_view.text_view.grab_focus();
- } else {
- this.in_edit_mode = false;
- }
- });
+ this.notify["in-edit-mode"].connect(on_in_edit_mode_changed);
outer.set_widget(label, Plugins.WidgetType.GTK4, 2);
@@ -201,7 +170,6 @@ public class MessageMetaItem : ContentMetaItem {
}
public override Gee.List<Plugins.MessageAction>? get_item_actions(Plugins.WidgetType type) {
- if (content_item as FileItem != null || this.in_edit_mode) return null;
if (in_edit_mode) return null;
Gee.List<Plugins.MessageAction> actions = new ArrayList<Plugins.MessageAction>();
@@ -224,6 +192,41 @@ public class MessageMetaItem : ContentMetaItem {
return actions;
}
+ private void on_in_edit_mode_changed() {
+ if (in_edit_mode == false) return;
+ bool allowed = stream_interactor.get_module(MessageCorrection.IDENTITY).is_own_correction_allowed(message_item.conversation, message_item.message);
+ if (allowed) {
+ MessageItem message_item = content_item as MessageItem;
+ Message message = message_item.message;
+
+ edit_mode = new MessageItemEditMode();
+ controller = new ChatTextViewController(edit_mode.chat_text_view, stream_interactor);
+ Conversation conversation = message_item.conversation;
+ controller.initialize_for_conversation(conversation);
+
+ edit_mode.cancelled.connect(() => {
+ in_edit_mode = false;
+ outer.set_widget(label, Plugins.WidgetType.GTK4, 2);
+ });
+ edit_mode.send.connect(() => {
+ if (((MessageItem) content_item).message.body != edit_mode.chat_text_view.text_view.buffer.text) {
+ on_edit_send(edit_mode.chat_text_view.text_view.buffer.text);
+ } else {
+// edit_cancelled();
+ }
+ in_edit_mode = false;
+ outer.set_widget(label, Plugins.WidgetType.GTK4, 2);
+ });
+
+ edit_mode.chat_text_view.text_view.buffer.text = message.body;
+
+ outer.set_widget(edit_mode, Plugins.WidgetType.GTK4, 2);
+ edit_mode.chat_text_view.text_view.grab_focus();
+ } else {
+ this.in_edit_mode = false;
+ }
+ }
+
private void on_edit_send(string text) {
stream_interactor.get_module(MessageCorrection.IDENTITY).send_correction(message_item.conversation, message_item.message, text);
this.in_edit_mode = false;
@@ -244,6 +247,17 @@ public class MessageMetaItem : ContentMetaItem {
Dino.Application.get_default().open(new File[]{file}, "");
return true;
}
+
+ public override void dispose() {
+ stream_interactor.get_module(MessageCorrection.IDENTITY).received_correction.disconnect(on_received_correction);
+ this.notify["in-edit-mode"].disconnect(on_in_edit_mode_changed);
+ if (label != null) {
+ label.unparent();
+ label.dispose();
+ label = null;
+ }
+ base.dispose();
+ }
}
[GtkTemplate (ui = "/im/dino/Dino/message_item_widget_edit_mode.ui")]