Daniel Brötzmann pushed to branch gtk4 at gajim / gajim


Commits:
ff1a30a1 by wurstsalat at 2024-10-20T16:03:29+02:00
refactor: ChatList: Use SignalManager, correctly finalize

- - - - -


1 changed file:

- gajim/gtk/chat_list.py


Changes:

=====================================
gajim/gtk/chat_list.py
=====================================
@@ -22,6 +22,7 @@
 from gajim.common import ged
 from gajim.common.const import Direction
 from gajim.common.const import RowHeaderType
+from gajim.common.ged import EventHelper
 from gajim.common.i18n import _
 from gajim.common.modules.message_util import get_nickname_from_message
 from gajim.common.setting_values import OpenChatsSettingT
@@ -32,14 +33,14 @@
 from gajim.common.util.user_strings import get_moderation_text
 
 from gajim.gtk.chat_list_row import ChatListRow
-from gajim.gtk.util import EventHelper
 from gajim.gtk.util import get_listbox_row_count
 from gajim.gtk.util import iterate_listbox_children
+from gajim.gtk.util import SignalManager
 
 log = logging.getLogger('gajim.gtk.chatlist')
 
 
-class ChatList(Gtk.ListBox, EventHelper):
+class ChatList(Gtk.ListBox, EventHelper, SignalManager):
 
     __gsignals__ = {
         'chat-order-changed': (GObject.SignalFlags.RUN_LAST,
@@ -50,6 +51,8 @@ class ChatList(Gtk.ListBox, EventHelper):
     def __init__(self, workspace_id: str) -> None:
         Gtk.ListBox.__init__(self)
         EventHelper.__init__(self)
+        SignalManager.__init__(self)
+
         self._workspace_id = workspace_id
 
         self._chats: dict[tuple[str, JID], ChatListRow] = {}
@@ -68,15 +71,15 @@ def __init__(self, workspace_id: str) -> None:
         self._pinned_order_change = False
 
         hover_controller = Gtk.EventControllerMotion()
-        hover_controller.connect('enter', self._on_cursor_enter)
-        hover_controller.connect('leave', self._on_cursor_leave)
+        self._connect(hover_controller, 'enter', self._on_cursor_enter)
+        self._connect(hover_controller, 'leave', self._on_cursor_leave)
         self.add_controller(hover_controller)
 
         drop_target = Gtk.DropTarget(
             formats=Gdk.ContentFormats.new_for_gtype(ChatListRow),
             actions=Gdk.DragAction.MOVE
         )
-        drop_target.connect('drop', self._on_drop)
+        self._connect(drop_target, 'drop', self._on_drop)
         self.add_controller(drop_target)
 
         self._chat_order: list[ChatListRow] = []
@@ -87,10 +90,18 @@ def __init__(self, workspace_id: str) -> None:
             ('bookmarks-received', ged.GUI1, self._on_bookmarks_received),
         ])
 
-        self.connect('destroy', self._on_destroy)
-
         self._timer_id = GLib.timeout_add_seconds(60, self._update_row_state)
 
+    def do_unroot(self) -> None:
+        Gtk.ListBox.do_unroot(self)
+        self._disconnect_all()
+        self.unregister_events()
+        self.set_filter_func(None)
+        self.set_header_func(None)
+        self.set_sort_func(None)
+        GLib.source_remove(self._timer_id)
+        app.check_finalize(self)
+
     @property
     def workspace_id(self) -> str:
         return self._workspace_id
@@ -286,11 +297,11 @@ def remove_chat(self,
                     ) -> None:
 
         row = self._chats.pop((account, jid))
+
         if row.is_pinned:
             self._chat_order.remove(row)
         self.remove(row)
-        # TODO GTK4
-        # row.destroy()
+
         if emit_unread:
             self._emit_unread_changed()
 
@@ -662,6 +673,3 @@ def _on_account_changed(self, *args: Any) -> None:
     def _on_bookmarks_received(self, _event: events.BookmarksReceived) -> None:
         for row in self._iterate_rows():
             row.update_name()
-
-    def _on_destroy(self, _widget: Gtk.Widget) -> None:
-        GLib.source_remove(self._timer_id)



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/ff1a30a1daa289c5bbb8be5d05285ff2c955bc1a

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/ff1a30a1daa289c5bbb8be5d05285ff2c955bc1a
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to