summaryrefslogtreecommitdiff
path: root/src/windows
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2022-10-12 01:51:32 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2022-10-12 01:51:32 -0400
commit17e7478bb4827e094a06faca6c5f2d5f4e5a45cc (patch)
tree91baee37c2b9a7c0e5591f20be89fdfd428d9aea /src/windows
parent78a5b9599c900c5da56da0a15835f425e455b510 (diff)
downloadabaddon-portaudio-17e7478bb4827e094a06faca6c5f2d5f4e5a45cc.tar.gz
abaddon-portaudio-17e7478bb4827e094a06faca6c5f2d5f4e5a45cc.zip
add user row on voice connect
Diffstat (limited to 'src/windows')
-rw-r--r--src/windows/voicewindow.cpp32
-rw-r--r--src/windows/voicewindow.hpp3
2 files changed, 26 insertions, 9 deletions
diff --git a/src/windows/voicewindow.cpp b/src/windows/voicewindow.cpp
index 7019140..0af8176 100644
--- a/src/windows/voicewindow.cpp
+++ b/src/windows/voicewindow.cpp
@@ -85,6 +85,7 @@ VoiceWindow::VoiceWindow(Snowflake channel_id)
SetUsers(discord.GetUsersInVoiceChannel(m_channel_id));
discord.signal_voice_user_disconnect().connect(sigc::mem_fun(*this, &VoiceWindow::OnUserDisconnect));
+ discord.signal_voice_user_connect().connect(sigc::mem_fun(*this, &VoiceWindow::OnUserConnect));
m_mute.signal_toggled().connect(sigc::mem_fun(*this, &VoiceWindow::OnMuteChanged));
m_deafen.signal_toggled().connect(sigc::mem_fun(*this, &VoiceWindow::OnDeafenChanged));
@@ -104,18 +105,23 @@ 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);
- });
- row->signal_volume().connect([this, id](double volume) {
- m_signal_user_volume_changed.emit(id, volume);
- });
- m_user_list.add(*row);
+ m_user_list.add(*CreateRow(id));
}
}
+Gtk::ListBoxRow *VoiceWindow::CreateRow(Snowflake id) {
+ 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);
+ });
+ row->signal_volume().connect([this, id](double volume) {
+ m_signal_user_volume_changed.emit(id, volume);
+ });
+ row->show_all();
+ return row;
+}
+
void VoiceWindow::OnMuteChanged() {
m_signal_mute.emit(m_mute.get_active());
}
@@ -124,6 +130,14 @@ void VoiceWindow::OnDeafenChanged() {
m_signal_deafen.emit(m_deafen.get_active());
}
+void VoiceWindow::OnUserConnect(Snowflake user_id, Snowflake to_channel_id) {
+ if (m_channel_id == to_channel_id) {
+ if (auto it = m_rows.find(user_id); it == m_rows.end()) {
+ m_user_list.add(*CreateRow(user_id));
+ }
+ }
+}
+
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()) {
diff --git a/src/windows/voicewindow.hpp b/src/windows/voicewindow.hpp
index c968acb..aaf77d7 100644
--- a/src/windows/voicewindow.hpp
+++ b/src/windows/voicewindow.hpp
@@ -18,6 +18,9 @@ public:
private:
void SetUsers(const std::unordered_set<Snowflake> &user_ids);
+ Gtk::ListBoxRow *CreateRow(Snowflake id);
+
+ void OnUserConnect(Snowflake user_id, Snowflake to_channel_id);
void OnUserDisconnect(Snowflake user_id, Snowflake from_channel_id);
void OnMuteChanged();