From dd88db7556a20707f6fe3c81b3c58df42a0f5224 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Wed, 9 Aug 2017 22:58:36 +0200 Subject: RosterList: Disconnect handlers on widget destroy Fixes #119 --- main/src/ui/add_conversation/chat/roster_list.vala | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'main/src/ui/add_conversation/chat/roster_list.vala') diff --git a/main/src/ui/add_conversation/chat/roster_list.vala b/main/src/ui/add_conversation/chat/roster_list.vala index 3c324cf6..f4b42cc4 100644 --- a/main/src/ui/add_conversation/chat/roster_list.vala +++ b/main/src/ui/add_conversation/chat/roster_list.vala @@ -11,6 +11,7 @@ protected class RosterList : FilterableList { public signal void conversation_selected(Conversation? conversation); private StreamInteractor stream_interactor; private Gee.List accounts; + private ulong[] handler_ids = new ulong[0]; private HashMap> rows = new HashMap>(Account.hash_func, Account.equals_func); @@ -22,13 +23,18 @@ protected class RosterList : FilterableList { set_header_func(header); set_sort_func(sort); - stream_interactor.get_module(RosterManager.IDENTITY).removed_roster_item.connect( (account, jid, roster_item) => { - if (accounts.contains(account)) + handler_ids += stream_interactor.get_module(RosterManager.IDENTITY).removed_roster_item.connect( (account, jid, roster_item) => { + if (accounts.contains(account)) { Idle.add(() => { on_removed_roster_item(account, jid, roster_item); return false;}); + } }); - stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.connect( (account, jid, roster_item) => { - if (accounts.contains(account)) + handler_ids += stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.connect( (account, jid, roster_item) => { + if (accounts.contains(account)) { Idle.add(() => { on_updated_roster_item(account, jid, roster_item); return false;}); + } + }); + destroy.connect(() => { + foreach (ulong handler_id in handler_ids) stream_interactor.get_module(RosterManager.IDENTITY).disconnect(handler_id); }); foreach (Account a in accounts) fetch_roster_items(a); @@ -85,4 +91,4 @@ protected class RosterList : FilterableList { } } -} \ No newline at end of file +} -- cgit v1.2.3-70-g09d2