diff --git a/briar-gtk/briar_gtk/containers/main_window.py b/briar-gtk/briar_gtk/containers/main_window.py index f471d4eb4f64d60f66dde68fb9bda08725cf9306..f94d18db4a2d6d18abae5c521a59a214274063ac 100644 --- a/briar-gtk/briar_gtk/containers/main_window.py +++ b/briar-gtk/briar_gtk/containers/main_window.py @@ -125,7 +125,7 @@ class MainWindowContainer(Container): def _clear_history_container(self): children = self.history_container.get_children() for child in children: - self.history_container.remove(child) + child.destroy() def _setup_view(self): self._add_from_resource(self.MENU_UI) @@ -174,4 +174,4 @@ class MainWindowContainer(Container): def _clear_contact_list(self): contacts_list_box_children = self.contacts_list_box.get_children() for child in contacts_list_box_children: - self.contacts_list_box.remove(child) + child.destroy() diff --git a/briar-gtk/briar_gtk/containers/private_chat.py b/briar-gtk/briar_gtk/containers/private_chat.py index a2dbcb6b15c9d1289b37cc7cb3180b9993c020f8..cac24539b686660178252f962ad7e1aef8a93b4d 100644 --- a/briar-gtk/briar_gtk/containers/private_chat.py +++ b/briar-gtk/briar_gtk/containers/private_chat.py @@ -23,6 +23,7 @@ class PrivateChatContainer(Container): def __init__(self, contact_name, contact_id): super().__init__() + self._signals = list() self._contact_name = contact_name self._contact_id = contact_id @@ -70,6 +71,18 @@ class PrivateChatContainer(Container): self.add(messages_scroll) self.builder.connect_signals(self) + self._setup_destroy_listener() + + 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): private_chat = PrivateChat(APP().api, self._contact_id) @@ -79,9 +92,10 @@ class PrivateChatContainer(Container): # Abusing idle_add function here because otherwise the message box # is too small and scrolling cuts out messages GLib.idle_add(self._add_message, message) - # TODO: Disconnect if no more needed - APP().api.socket_listener.connect("ConversationMessageReceivedEvent", - self._add_message_async) + socket_listener = APP().api.socket_listener + signal_id = socket_listener.connect("ConversationMessageReceivedEvent", + self._add_message_async) + self._signals.append(signal_id) def _add_message(self, message): message_widget = PrivateMessageWidget(self._contact_name, message)