Fix retain cycles
This commit is contained in:
@@ -9,16 +9,25 @@ public class TranscriptView : Adw.Bin
|
||||
return _model;
|
||||
}
|
||||
set {
|
||||
if (_model != null) {
|
||||
_model.disconnect(messages_changed_handler_id);
|
||||
_model.unwatch_updates();
|
||||
}
|
||||
|
||||
_model = value;
|
||||
|
||||
if (model != null) {
|
||||
if (value != null) {
|
||||
// Reset scroll position
|
||||
scrolled_window.vadjustment = new Gtk.Adjustment(0, 0, 0, 0, 0, 0);
|
||||
|
||||
model.messages_changed.connect(reload_messages);
|
||||
model.load_messages();
|
||||
weak TranscriptView self = this;
|
||||
messages_changed_handler_id = value.messages_changed.connect(() => {
|
||||
self.reload_messages();
|
||||
});
|
||||
|
||||
value.load_messages();
|
||||
} else {
|
||||
transcript_drawing_area.set_messages(new TreeSet<Message>());
|
||||
transcript_drawing_area.set_messages(new ArrayList<Message>());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -34,10 +43,9 @@ public class TranscriptView : Adw.Bin
|
||||
|
||||
private TranscriptDrawingArea transcript_drawing_area = new TranscriptDrawingArea();
|
||||
private ScrolledWindow scrolled_window = new ScrolledWindow();
|
||||
private ulong messages_changed_handler_id = 0;
|
||||
|
||||
public TranscriptView(MessageListModel? model = null) {
|
||||
this.model = model;
|
||||
|
||||
public TranscriptView() {
|
||||
container = new Adw.ToolbarView();
|
||||
set_child(container);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user