summaryrefslogtreecommitdiff
path: root/src/windows
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows')
-rw-r--r--src/windows/voicewindow.cpp12
-rw-r--r--src/windows/voicewindow.hpp4
2 files changed, 16 insertions, 0 deletions
diff --git a/src/windows/voicewindow.cpp b/src/windows/voicewindow.cpp
index b8ade8f..7019140 100644
--- a/src/windows/voicewindow.cpp
+++ b/src/windows/voicewindow.cpp
@@ -84,6 +84,8 @@ VoiceWindow::VoiceWindow(Snowflake channel_id)
auto &discord = Abaddon::Get().GetDiscordClient();
SetUsers(discord.GetUsersInVoiceChannel(m_channel_id));
+ discord.signal_voice_user_disconnect().connect(sigc::mem_fun(*this, &VoiceWindow::OnUserDisconnect));
+
m_mute.signal_toggled().connect(sigc::mem_fun(*this, &VoiceWindow::OnMuteChanged));
m_deafen.signal_toggled().connect(sigc::mem_fun(*this, &VoiceWindow::OnDeafenChanged));
@@ -103,6 +105,7 @@ VoiceWindow::VoiceWindow(Snowflake channel_id)
void VoiceWindow::SetUsers(const std::unordered_set<Snowflake> &user_ids) {
for (auto id : user_ids) {
auto *row = Gtk::make_managed<VoiceWindowUserListEntry>(id);
+ m_rows[id] = row;
row->signal_mute_cs().connect([this, id](bool is_muted) {
m_signal_mute_user_cs.emit(id, is_muted);
});
@@ -121,6 +124,15 @@ void VoiceWindow::OnDeafenChanged() {
m_signal_deafen.emit(m_deafen.get_active());
}
+void VoiceWindow::OnUserDisconnect(Snowflake user_id, Snowflake from_channel_id) {
+ if (m_channel_id == from_channel_id) {
+ if (auto it = m_rows.find(user_id); it != m_rows.end()) {
+ delete it->second;
+ m_rows.erase(it);
+ }
+ }
+}
+
VoiceWindow::type_signal_mute VoiceWindow::signal_mute() {
return m_signal_mute;
}
diff --git a/src/windows/voicewindow.hpp b/src/windows/voicewindow.hpp
index b3edf46..c968acb 100644
--- a/src/windows/voicewindow.hpp
+++ b/src/windows/voicewindow.hpp
@@ -18,6 +18,8 @@ public:
private:
void SetUsers(const std::unordered_set<Snowflake> &user_ids);
+ void OnUserDisconnect(Snowflake user_id, Snowflake from_channel_id);
+
void OnMuteChanged();
void OnDeafenChanged();
@@ -32,6 +34,8 @@ private:
Snowflake m_channel_id;
+ std::unordered_map<Snowflake, Gtk::ListBoxRow *> m_rows;
+
public:
using type_signal_mute = sigc::signal<void(bool)>;
using type_signal_deafen = sigc::signal<void(bool)>;