summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--components/friendslist.cpp11
-rw-r--r--components/friendslist.hpp2
2 files changed, 13 insertions, 0 deletions
diff --git a/components/friendslist.cpp b/components/friendslist.cpp
index 704d278..2221547 100644
--- a/components/friendslist.cpp
+++ b/components/friendslist.cpp
@@ -7,6 +7,8 @@ FriendsList::FriendsList()
, m_filter_mode(FILTER_FRIENDS) {
auto &discord = Abaddon::Get().GetDiscordClient();
+ discord.signal_relationship_remove().connect(sigc::mem_fun(*this, &FriendsList::OnRelationshipRemove));
+
for (const auto &[id, type] : discord.GetRelationships()) {
const auto user = discord.GetUser(id);
if (!user.has_value()) continue;
@@ -69,6 +71,15 @@ FriendsList::FriendsList()
m_list.show();
}
+void FriendsList::OnRelationshipRemove(Snowflake id, RelationshipType type) {
+ for (auto *row_ : m_list.get_children()) {
+ auto *row = dynamic_cast<FriendsListFriendRow *>(row_);
+ if (row == nullptr || row->ID != id) continue;
+ delete row;
+ return;
+ }
+}
+
int FriendsList::ListSortFunc(Gtk::ListBoxRow *a_, Gtk::ListBoxRow *b_) {
auto *a = dynamic_cast<FriendsListFriendRow *>(a_);
auto *b = dynamic_cast<FriendsListFriendRow *>(b_);
diff --git a/components/friendslist.hpp b/components/friendslist.hpp
index fef04da..c161de4 100644
--- a/components/friendslist.hpp
+++ b/components/friendslist.hpp
@@ -20,6 +20,8 @@ public:
FriendsList();
private:
+ void OnRelationshipRemove(Snowflake id, RelationshipType type);
+
enum FilterMode {
FILTER_FRIENDS,
FILTER_ONLINE,