diff options
| author | Marvin W <git@larma.de> | 2026-04-10 21:54:26 +0200 |
|---|---|---|
| committer | Marvin W <git@larma.de> | 2026-04-10 21:54:26 +0200 |
| commit | c5ba4275ae68dd558108ce273dafa1bf890259e8 (patch) | |
| tree | c11797edfb7190ae0fb5166cec60881237bcd0bf | |
| parent | 0baeaa2b8f481f60f8c7eecc856c48a11f211a20 (diff) | |
Early dispose the reaction widget when no longer needed
It previously triggered the leak checker, even though eventually the widget
would be disposed when the corresponding message skeletion got disposed.
| -rw-r--r-- | libdino/src/plugin/interfaces.vala | 2 | ||||
| -rw-r--r-- | main/src/ui/conversation_content_view/conversation_item_skeleton.vala | 10 | ||||
| -rw-r--r-- | main/src/ui/conversation_content_view/reactions_widget.vala | 4 |
3 files changed, 10 insertions, 6 deletions
diff --git a/libdino/src/plugin/interfaces.vala b/libdino/src/plugin/interfaces.vala index 39728275..3f0330f0 100644 --- a/libdino/src/plugin/interfaces.vala +++ b/libdino/src/plugin/interfaces.vala @@ -157,7 +157,7 @@ public abstract class MetaConversationItem : Object { } public interface ConversationItemWidgetInterface: Object { - public abstract void set_widget(Object object, WidgetType type, int priority); + public abstract void set_widget(Object? object, WidgetType type, int priority); } public delegate void MessageActionEvoked(Variant? variant); diff --git a/main/src/ui/conversation_content_view/conversation_item_skeleton.vala b/main/src/ui/conversation_content_view/conversation_item_skeleton.vala index 3c1b4e3b..d8cf469c 100644 --- a/main/src/ui/conversation_content_view/conversation_item_skeleton.vala +++ b/main/src/ui/conversation_content_view/conversation_item_skeleton.vala @@ -102,12 +102,16 @@ public class ConversationItemSkeleton : Plugins.ConversationItemWidgetInterface, update_received_mark(); } - public void set_widget(Object object, Plugins.WidgetType type, int priority) { + public void set_widget(Object? object, Plugins.WidgetType type, int priority) { foreach (var content_widget in content_widgets.values) { content_widget.unparent(); } - content_widgets[priority] = (Widget) object; + if (object is Widget) { + content_widgets[priority] = (Widget) object; + } else { + content_widgets.unset(priority); + } int row_no = 1; for (int i = 0; i < 5; i++) { if (!content_widgets.has_key(i)) continue; @@ -169,7 +173,7 @@ public class ConversationItemSkeleton : Plugins.ConversationItemWidgetInterface, } } - private void on_reaction_box_activated(Widget widget) { + private void on_reaction_box_activated(Widget? widget) { set_widget(widget, Plugins.WidgetType.GTK4, 3); } diff --git a/main/src/ui/conversation_content_view/reactions_widget.vala b/main/src/ui/conversation_content_view/reactions_widget.vala index a148a677..cb756167 100644 --- a/main/src/ui/conversation_content_view/reactions_widget.vala +++ b/main/src/ui/conversation_content_view/reactions_widget.vala @@ -7,7 +7,7 @@ using Xmpp; namespace Dino.Ui.ConversationSummary { public class ReactionsController : Object { - public signal void box_activated(Widget widget); + public signal void box_activated(Widget? widget); private Conversation conversation; private Account account; @@ -94,7 +94,7 @@ public class ReactionsController : Object { } if (reactions.size == 0) { - widget.unparent(); + box_activated(null); this.widget.set(null); } } |
