From 98fc1110df2fcbe5c0c21b21ed8e92da0cc6e275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Mon, 21 Jul 2025 09:47:22 +0200 Subject: [PATCH] room-details: Support empty list of members with assigned power levels --- po/POTFILES.in | 1 + .../members_page/members_list_view/mod.rs | 2 +- .../permissions/members_subpage.rs | 39 ++++++++++++++ .../permissions/members_subpage.ui | 54 +++++++++++++------ 4 files changed, 79 insertions(+), 17 deletions(-) diff --git a/po/POTFILES.in b/po/POTFILES.in index b65c8905..193ed87e 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -142,6 +142,7 @@ src/session/view/content/room_details/members_page/members_list_view/mod.ui src/session/view/content/room_details/mod.rs src/session/view/content/room_details/mod.ui src/session/view/content/room_details/permissions/add_members_subpage.ui +src/session/view/content/room_details/permissions/members_subpage.rs src/session/view/content/room_details/permissions/members_subpage.ui src/session/view/content/room_details/permissions/permissions_subpage.rs src/session/view/content/room_details/permissions/permissions_subpage.ui diff --git a/src/session/view/content/room_details/members_page/members_list_view/mod.rs b/src/session/view/content/room_details/members_page/members_list_view/mod.rs index a41c2162..2ac0f7c6 100644 --- a/src/session/view/content/room_details/members_page/members_list_view/mod.rs +++ b/src/session/view/content/room_details/members_page/members_list_view/mod.rs @@ -347,7 +347,7 @@ mod imp { /// Update the view for the current state. fn update_view(&self) { let Some(members) = self.members.obj() else { - self.stack.set_visible_child_name("no-members"); + self.stack.set_visible_child_name("empty"); return; }; diff --git a/src/session/view/content/room_details/permissions/members_subpage.rs b/src/session/view/content/room_details/permissions/members_subpage.rs index 63a56a35..ba679159 100644 --- a/src/session/view/content/room_details/permissions/members_subpage.rs +++ b/src/session/view/content/room_details/permissions/members_subpage.rs @@ -1,4 +1,5 @@ use adw::{prelude::*, subclass::prelude::*}; +use gettextrs::gettext; use gtk::{ CompositeTemplate, glib, glib::{clone, closure}, @@ -26,6 +27,10 @@ mod imp { #[template_child] search_entry: TemplateChild, #[template_child] + stack: TemplateChild, + #[template_child] + empty_page: TemplateChild, + #[template_child] list_view: TemplateChild, filtered_model: gtk::FilterListModel, /// The list used for this view. @@ -82,6 +87,22 @@ mod imp { self.filtered_model.set_filter(Some(&search_filter)); + self.filtered_model.connect_items_changed(clone!( + #[weak(rename_to = imp)] + self, + move |_, _, _, _| { + imp.update_visible_page(); + } + )); + self.search_entry.connect_text_notify(clone!( + #[weak(rename_to = imp)] + self, + move |_| { + imp.update_visible_page(); + } + )); + self.update_visible_page(); + // Sort members by power level, then display name, then user ID. let power_level_expr = MemberPowerLevel::this_expression("power-level"); let power_level_sorter = gtk::NumericSorter::builder() @@ -161,6 +182,24 @@ mod imp { self.editable.set(editable); self.obj().notify_editable(); } + + /// Update the visible page for the current state. + fn update_visible_page(&self) { + if self.filtered_model.n_items() > 0 { + self.stack.set_visible_child_name("members"); + return; + } + + // Update the empty page before showing it. + let description = if self.search_entry.text().is_empty() { + gettext("There are no room members with assigned power levels in this room") + } else { + gettext("There are no room members with assigned power levels matching the search") + }; + self.empty_page.set_description(Some(&description)); + + self.stack.set_visible_child_name("empty"); + } } } diff --git a/src/session/view/content/room_details/permissions/members_subpage.ui b/src/session/view/content/room_details/permissions/members_subpage.ui index 72f83518..a23fb0fd 100644 --- a/src/session/view/content/room_details/permissions/members_subpage.ui +++ b/src/session/view/content/room_details/permissions/members_subpage.ui @@ -40,26 +40,48 @@ - - True - True - never - True - - - 12 - 12 + + crossfade + + + empty - - True - item - + + true + users-symbolic + No Room Members - + + + + members + + + True + True + never + True + + + 12 + 12 + + + True + item + + + + + + + + +