[fractal/fractal-next] sidebar: Rename Categories to ItemList and cleanup
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal/fractal-next] sidebar: Rename Categories to ItemList and cleanup
- Date: Sat, 12 Jun 2021 14:09:45 +0000 (UTC)
commit f69e6562a518762649a36b3c407cf33e91c92f41
Author: Julian Sparber <julian sparber net>
Date: Thu Jun 3 19:54:38 2021 +0200
sidebar: Rename Categories to ItemList and cleanup
data/resources/ui/session.ui | 2 +-
src/meson.build | 2 +-
src/session/mod.rs | 31 +++++++++-------------
.../sidebar/{categories.rs => item_list.rs} | 22 +++++++--------
src/session/sidebar/mod.rs | 4 +--
src/session/sidebar/sidebar.rs | 25 +++++++++--------
6 files changed, 41 insertions(+), 45 deletions(-)
---
diff --git a/data/resources/ui/session.ui b/data/resources/ui/session.ui
index 1a2a052c..590cf2cc 100644
--- a/data/resources/ui/session.ui
+++ b/data/resources/ui/session.ui
@@ -49,7 +49,7 @@
<child>
<object class="Sidebar">
<property name="compact" bind-source="content" bind-property="folded"
bind-flags="sync-create"/>
- <property name="categories" bind-source="Session" bind-property="categories"
bind-flags="sync-create"/>
+ <property name="room-list" bind-source="Session" bind-property="room-list"
bind-flags="sync-create"/>
<property name="selected-room" bind-source="Session" bind-property="selected-room"
bind-flags="sync-create | bidirectional"/>
</object>
</child>
diff --git a/src/meson.build b/src/meson.build
index 91ff1a75..d0734274 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -55,7 +55,7 @@ sources = files(
'session/room/room_type.rs',
'session/room_list.rs',
'session/room/timeline.rs',
- 'session/sidebar/categories.rs',
+ 'session/sidebar/item_list.rs',
'session/sidebar/category.rs',
'session/sidebar/category_row.rs',
'session/sidebar/mod.rs',
diff --git a/src/session/mod.rs b/src/session/mod.rs
index 85ea3300..470a5006 100644
--- a/src/session/mod.rs
+++ b/src/session/mod.rs
@@ -10,7 +10,6 @@ pub use self::avatar::Avatar;
use self::content::Content;
pub use self::room::Room;
use self::room_list::RoomList;
-use self::sidebar::Categories;
use self::sidebar::Sidebar;
pub use self::user::User;
@@ -57,7 +56,6 @@ mod imp {
pub error: RefCell<Option<matrix_sdk::Error>>,
pub client: OnceCell<Client>,
pub room_list: OnceCell<RoomList>,
- pub categories: Categories,
pub user: OnceCell<User>,
pub selected_room: RefCell<Option<Room>>,
pub is_ready: OnceCell<bool>,
@@ -87,10 +85,10 @@ mod imp {
static PROPERTIES: Lazy<Vec<glib::ParamSpec>> = Lazy::new(|| {
vec![
glib::ParamSpec::new_object(
- "categories",
- "Categories",
- "A list of rooms grouped into categories",
- Categories::static_type(),
+ "room-list",
+ "Room List",
+ "The list of rooms",
+ RoomList::static_type(),
glib::ParamFlags::READABLE,
),
glib::ParamSpec::new_object(
@@ -131,7 +129,7 @@ mod imp {
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
- "categories" => self.categories.to_value(),
+ "room-list" => obj.room_list().to_value(),
"selected-room" => obj.selected_room().to_value(),
"user" => obj.user().to_value(),
_ => unimplemented!(),
@@ -277,11 +275,7 @@ impl Session {
secret::store_session(session).unwrap();
}
- let room_list = RoomList::new(self);
- priv_.categories.set_room_list(&room_list);
- room_list.load();
- priv_.room_list.set(room_list).unwrap();
-
+ self.room_list().load();
self.sync();
}
Err(error) => {
@@ -336,6 +330,11 @@ impl Session {
priv_.is_ready.get().copied().unwrap_or_default()
}
+ pub fn room_list(&self) -> &RoomList {
+ let priv_ = &imp::Session::from_instance(self);
+ priv_.room_list.get_or_init(|| RoomList::new(self))
+ }
+
pub fn user(&self) -> &User {
let priv_ = &imp::Session::from_instance(self);
priv_.user.get().unwrap()
@@ -391,12 +390,6 @@ impl Session {
}
fn handle_sync_response(&self, response: SyncResponse) {
- let priv_ = imp::Session::from_instance(self);
-
- priv_
- .room_list
- .get()
- .unwrap()
- .handle_response_rooms(response.rooms);
+ self.room_list().handle_response_rooms(response.rooms);
}
}
diff --git a/src/session/sidebar/categories.rs b/src/session/sidebar/item_list.rs
similarity index 77%
rename from src/session/sidebar/categories.rs
rename to src/session/sidebar/item_list.rs
index 1da6a012..0cd4a89d 100644
--- a/src/session/sidebar/categories.rs
+++ b/src/session/sidebar/item_list.rs
@@ -8,21 +8,21 @@ mod imp {
use super::*;
#[derive(Debug, Default)]
- pub struct Categories {
+ pub struct ItemList {
pub list: OnceCell<[Category; 5]>,
}
#[glib::object_subclass]
- impl ObjectSubclass for Categories {
- const NAME: &'static str = "Categories";
- type Type = super::Categories;
+ impl ObjectSubclass for ItemList {
+ const NAME: &'static str = "ItemList";
+ type Type = super::ItemList;
type ParentType = glib::Object;
type Interfaces = (gio::ListModel,);
}
- impl ObjectImpl for Categories {}
+ impl ObjectImpl for ItemList {}
- impl ListModelImpl for Categories {
+ impl ListModelImpl for ItemList {
fn item_type(&self, _list_model: &Self::Type) -> glib::Type {
Category::static_type()
}
@@ -40,23 +40,23 @@ mod imp {
}
glib::wrapper! {
- pub struct Categories(ObjectSubclass<imp::Categories>)
+ pub struct ItemList(ObjectSubclass<imp::ItemList>)
@implements gio::ListModel;
}
-impl Default for Categories {
+impl Default for ItemList {
fn default() -> Self {
Self::new()
}
}
-impl Categories {
+impl ItemList {
pub fn new() -> Self {
- glib::Object::new(&[]).expect("Failed to create Categories")
+ glib::Object::new(&[]).expect("Failed to create ItemList")
}
pub fn set_room_list(&self, room_list: &RoomList) {
- let priv_ = imp::Categories::from_instance(&self);
+ let priv_ = imp::ItemList::from_instance(&self);
priv_
.list
diff --git a/src/session/sidebar/mod.rs b/src/session/sidebar/mod.rs
index b6ab3c27..0b298088 100644
--- a/src/session/sidebar/mod.rs
+++ b/src/session/sidebar/mod.rs
@@ -1,14 +1,14 @@
-mod categories;
mod category;
mod category_row;
+mod item_list;
mod room_row;
mod row;
mod selection;
mod sidebar;
-pub use self::categories::Categories;
pub use self::category::Category;
use self::category_row::CategoryRow;
+pub use self::item_list::ItemList;
use self::room_row::RoomRow;
use self::row::Row;
use self::selection::Selection;
diff --git a/src/session/sidebar/sidebar.rs b/src/session/sidebar/sidebar.rs
index 2d579e09..40d858dd 100644
--- a/src/session/sidebar/sidebar.rs
+++ b/src/session/sidebar/sidebar.rs
@@ -3,7 +3,8 @@ use gtk::{gio, glib, prelude::*, subclass::prelude::*, CompositeTemplate};
use crate::session::{
room::Room,
- sidebar::{Categories, Category, RoomRow, Row, Selection},
+ sidebar::{Category, ItemList, RoomRow, Row, Selection},
+ RoomList,
};
mod imp {
@@ -54,10 +55,10 @@ mod imp {
glib::ParamFlags::READWRITE,
),
glib::ParamSpec::new_object(
- "categories",
- "Categories",
- "A list of rooms grouped into categories",
- Categories::static_type(),
+ "room-list",
+ "Room List",
+ "The list of rooms",
+ RoomList::static_type(),
glib::ParamFlags::WRITABLE,
),
glib::ParamSpec::new_object(
@@ -85,9 +86,9 @@ mod imp {
let compact = value.get().unwrap();
self.compact.set(compact);
}
- "categories" => {
- let categories = value.get().unwrap();
- obj.set_categories(categories);
+ "room-list" => {
+ let room_list = value.get().unwrap();
+ obj.set_room_list(room_list);
}
"selected-room" => {
let selected_room = value.get().unwrap();
@@ -151,12 +152,14 @@ impl Sidebar {
priv_.selected_room.borrow().clone()
}
- pub fn set_categories(&self, categories: Option<Categories>) {
+ pub fn set_room_list(&self, room_list: Option<RoomList>) {
let priv_ = imp::Sidebar::from_instance(self);
- if let Some(categories) = categories {
+ if let Some(room_list) = room_list {
// TODO: hide empty categories
- let tree_model = gtk::TreeListModel::new(&categories, false, true, |item| {
+ let item_list = ItemList::new();
+ item_list.set_room_list(&room_list);
+ let tree_model = gtk::TreeListModel::new(&item_list, false, true, |item| {
item.clone().downcast::<gio::ListModel>().ok()
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]