diff --git a/src/toad/widgets/comms_sidebar.py b/src/toad/widgets/comms_sidebar.py index bdcda4ff5..c06d93786 100644 --- a/src/toad/widgets/comms_sidebar.py +++ b/src/toad/widgets/comms_sidebar.py @@ -97,8 +97,8 @@ def __init__(self, row: CommsRow, *, expanded: bool): def sidebar(self) -> CommsSidebar: return self.query_ancestor(CommsSidebar) - def present(self, channel: ChannelRowModel) -> None: - """Paint the channel header from its model row.""" + def present(self, channel: ChannelRowModel) -> frozenset[str]: + """Paint the header and return members whose channel pin changed.""" previous, self.channel = self.channel, channel row = self.row if previous.label != channel.label: @@ -113,6 +113,7 @@ def present(self, channel: ChannelRowModel) -> None: self.unread_badge.update(label, layout=width_changed) self.unread_badge.display = bool(label) self.sort_control.update_order(channel.order) + return previous.pinned_members ^ channel.pinned_members def toggle_members(self) -> None: super().toggle_members() diff --git a/src/toad/widgets/sidebar_tree.py b/src/toad/widgets/sidebar_tree.py index 7342ad0ba..91340c513 100644 --- a/src/toad/widgets/sidebar_tree.py +++ b/src/toad/widgets/sidebar_tree.py @@ -459,8 +459,7 @@ def apply_comms(self, sidebar: CommsSidebar, rows: Mapping[str, ChannelRowModel] for name in self.names: group = sidebar.groups.get(name) if group is not None: - group.present(rows[name]) - group.sync_members(frozenset(group.member_keys)) + group.sync_members(group.present(rows[name])) def apply_welcome(self, channel_list: SidebarGroup, thread_list: SidebarGroup) -> None: channel_list.sync_members(self.names)