[fractal/fractal-next] session: Add selected-room property
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal/fractal-next] session: Add selected-room property
- Date: Wed, 5 May 2021 09:29:50 +0000 (UTC)
commit dfc41bb5965acaaf2024c39fb404ca1cfa297ef2
Author: Kévin Commaille <zecakeh tedomum fr>
Date: Tue May 4 17:09:20 2021 +0200
session: Add selected-room property
Bind it to Content's room property
data/resources/ui/session.ui | 1 +
src/session/mod.rs | 41 ++++++++++++++++++++++++++++++++++++-----
2 files changed, 37 insertions(+), 5 deletions(-)
---
diff --git a/data/resources/ui/session.ui b/data/resources/ui/session.ui
index eb778f0d..4f5bcf58 100644
--- a/data/resources/ui/session.ui
+++ b/data/resources/ui/session.ui
@@ -12,6 +12,7 @@
<child>
<object class="Content" id="content">
<property name="compact" bind-source="session" bind-property="folded" bind-flags="sync-create" />
+ <property name="room" bind-source="Session" bind-property="selected-room"
bind-flags="sync-create" />
</object>
</child>
</object>
diff --git a/src/session/mod.rs b/src/session/mod.rs
index 2164a5eb..2eae75a0 100644
--- a/src/session/mod.rs
+++ b/src/session/mod.rs
@@ -5,6 +5,7 @@ mod sidebar;
mod user;
use self::content::Content;
+use self::room::Room;
use self::sidebar::Sidebar;
use self::user::User;
@@ -52,9 +53,10 @@ mod imp {
/// Contains the error if something went wrong
pub error: RefCell<Option<matrix_sdk::Error>>,
pub client: OnceCell<Client>,
- pub rooms: RefCell<HashMap<RoomId, room::Room>>,
+ pub rooms: RefCell<HashMap<RoomId, Room>>,
pub categories: Categories,
pub user: OnceCell<User>,
+ pub selected_room: RefCell<Option<Room>>,
}
#[glib::object_subclass]
@@ -105,6 +107,13 @@ mod imp {
Categories::static_type(),
glib::ParamFlags::READABLE,
),
+ glib::ParamSpec::new_object(
+ "selected-room",
+ "Selected Room",
+ "The selected room in this session",
+ Room::static_type(),
+ glib::ParamFlags::READWRITE | glib::ParamFlags::EXPLICIT_NOTIFY,
+ ),
]
});
@@ -113,7 +122,7 @@ mod imp {
fn set_property(
&self,
- _obj: &Self::Type,
+ obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
@@ -125,14 +134,19 @@ mod imp {
.expect("type conformity checked by `Object::set_property`");
let _ = self.homeserver.set(homeserver);
}
+ "selected-room" => {
+ let selected_room = value.get().unwrap();
+ obj.set_selected_room(selected_room);
+ }
_ => unimplemented!(),
}
}
- fn property(&self, _obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
+ fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"homeserver" => self.homeserver.get().to_value(),
"categories" => self.categories.to_value(),
+ "selected-room" => obj.selected_room().to_value(),
_ => unimplemented!(),
}
}
@@ -171,6 +185,23 @@ impl Session {
glib::Object::new(&[("homeserver", &homeserver)]).expect("Failed to create Session")
}
+ pub fn selected_room(&self) -> Option<Room> {
+ let priv_ = imp::Session::from_instance(self);
+ priv_.selected_room.borrow().clone()
+ }
+
+ fn set_selected_room(&self, selected_room: Option<Room>) {
+ let priv_ = imp::Session::from_instance(self);
+
+ if self.selected_room() == selected_room {
+ return;
+ }
+
+ priv_.selected_room.replace(selected_room);
+
+ self.notify("selected-room");
+ }
+
pub fn login_with_password(&self, username: String, password: String) {
let method = CreationMethod::Password(username, password);
self.login(method);
@@ -349,7 +380,7 @@ impl Session {
fn handle_show_room_action(&self, room_id: RoomId) {
let priv_ = imp::Session::from_instance(self);
let room = priv_.rooms.borrow().get(&room_id).cloned();
- priv_.content.set_room(room);
+ self.set_selected_room(room);
}
fn handle_sync_response(&self, response: SyncResponse) {
@@ -381,7 +412,7 @@ impl Session {
for room_id in new_rooms_id {
if let Some(matrix_room) = priv_.client.get().unwrap().get_room(&room_id) {
- let room = room::Room::new(matrix_room, self.user());
+ let room = Room::new(matrix_room, self.user());
rooms_map.insert(room_id.clone(), room.clone());
new_rooms.push(room.clone());
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]