diff --git a/briar-gtk/briar_gtk/containers/main_window.py b/briar-gtk/briar_gtk/containers/main_window.py index f94d18db4a2d6d18abae5c521a59a214274063ac..c8512708deb556c078b5caa84072a9f291ae2285 100644 --- a/briar-gtk/briar_gtk/containers/main_window.py +++ b/briar-gtk/briar_gtk/containers/main_window.py @@ -23,6 +23,7 @@ class MainWindowContainer(Container): def __init__(self): super().__init__() + self._signals = list() self._setup_view() self._load_content() @@ -135,6 +136,7 @@ class MainWindowContainer(Container): self._setup_main_window_stack() self._setup_headerbar_stack_holder() self.contact_name_label.set_text("") + self._setup_destroy_listener() def _setup_main_window_stack(self): main_window_stack = self.builder.get_object("main_window_stack") @@ -147,14 +149,27 @@ class MainWindowContainer(Container): headerbar_stack_holder.show_all() APP().window.set_titlebar(headerbar_stack_holder) + def _setup_destroy_listener(self): + self.connect("destroy", self._on_destroy) + + # pylint: disable=unused-argument + def _on_destroy(self, widget): + self._disconnect_signals() + + def _disconnect_signals(self): + for signal in self._signals: + APP().api.socket_listener.disconnect(signal) + def _load_content(self): self._contacts = Contacts(APP().api) self._load_contacts() - # TODO: Disconnect if no more needed - APP().api.socket_listener.connect("ContactAddedEvent", - self._refresh_contacts_async) - APP().api.socket_listener.connect("ConversationMessageReceivedEvent", - self._refresh_contacts_async) + socket_listener = APP().api.socket_listener + signal_id = socket_listener.connect("ContactAddedEvent", + self._refresh_contacts_async) + self._signals.append(signal_id) + signal_id = socket_listener.connect("ConversationMessageReceivedEvent", + self._refresh_contacts_async) + self._signals.append(signal_id) def _load_contacts(self): self.contacts_list = self._contacts.get()