diff --git a/src/session/view/content/room_history/message_row/reaction/reaction_popover.rs b/src/session/view/content/room_history/message_row/reaction/reaction_popover.rs index 75861d55..b6b87aa6 100644 --- a/src/session/view/content/room_history/message_row/reaction/reaction_popover.rs +++ b/src/session/view/content/room_history/message_row/reaction/reaction_popover.rs @@ -1,7 +1,16 @@ -use adw::subclass::prelude::*; -use gtk::{gio, glib, prelude::*, CompositeTemplate}; +use adw::{prelude::*, subclass::prelude::*}; +use gtk::{ + gio, + glib::{self, clone}, + CompositeTemplate, +}; -use crate::session::view::content::room_history::member_timestamp::row::MemberTimestampRow; +use crate::{ + components::UserProfileDialog, + session::view::content::room_history::member_timestamp::{ + row::MemberTimestampRow, MemberTimestamp, + }, +}; mod imp { use glib::subclass::InitializingObject; @@ -46,9 +55,24 @@ mod imp { impl ReactionPopover { /// Set the reaction senders to display. fn set_senders(&self, senders: gio::ListStore) { + let obj = self.obj(); + self.senders.set(Some(&senders)); self.list .set_model(Some(>k::NoSelection::new(Some(senders)))); + self.list + .connect_activate(clone!(@weak obj => move |_, pos| { + let Some(member) = obj.senders() + .and_then(|list| list.item(pos)) + .and_downcast::() + .and_then(|ts| ts.member()) + else { return; }; + + let dialog = UserProfileDialog::new(); + dialog.set_room_member(member); + dialog.present(&obj); + obj.popdown(); + })); } } } diff --git a/src/session/view/content/room_history/message_row/reaction/reaction_popover.ui b/src/session/view/content/room_history/message_row/reaction/reaction_popover.ui index 45baa059..231dbced 100644 --- a/src/session/view/content/room_history/message_row/reaction/reaction_popover.ui +++ b/src/session/view/content/room_history/message_row/reaction/reaction_popover.ui @@ -13,13 +13,13 @@ 280 + True