diff --git a/src/windows/voice/voicewindow.cpp b/src/windows/voice/voicewindow.cpp index 944d848..e59705a 100644 --- a/src/windows/voice/voicewindow.cpp +++ b/src/windows/voice/voicewindow.cpp @@ -193,28 +193,15 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) combos_combos->pack_start(m_capture_combo); if (const auto instance = discord.GetStageInstanceFromChannel(channel_id); instance.has_value()) { - printf("%s\n", instance->Topic.c_str()); - m_TMP_stagelabel.show(); - m_TMP_stagelabel.set_markup("" + instance->Topic + ""); + m_stage_topic_label.show(); + UpdateStageTopicLabel(instance->Topic); } else { - m_TMP_stagelabel.hide(); + m_stage_topic_label.hide(); } - discord.signal_stage_instance_create().connect(sigc::track_obj([this](const StageInstance &instance) { - m_TMP_stagelabel.show(); - m_TMP_stagelabel.set_markup("" + instance.Topic + ""); - }, - *this)); - - discord.signal_stage_instance_update().connect(sigc::track_obj([this](const StageInstance &instance) { - m_TMP_stagelabel.set_markup("" + instance.Topic + ""); - }, - *this)); - - discord.signal_stage_instance_delete().connect(sigc::track_obj([this](const StageInstance &instance) { - m_TMP_stagelabel.hide(); - }, - *this)); + discord.signal_stage_instance_create().connect(sigc::mem_fun(*this, &VoiceWindow::OnStageInstanceCreate)); + discord.signal_stage_instance_update().connect(sigc::mem_fun(*this, &VoiceWindow::OnStageInstanceUpdate)); + discord.signal_stage_instance_delete().connect(sigc::mem_fun(*this, &VoiceWindow::OnStageInstanceDelete)); m_stage_command.signal_clicked().connect([this]() { auto &discord = Abaddon::Get().GetDiscordClient(); @@ -263,7 +250,6 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) m_stage_invite_btns.pack_start(m_stage_accept, false, true); m_stage_invite_btns.pack_start(m_stage_decline, false, true); m_main.pack_start(m_menu_bar, false, true); - m_main.pack_start(m_TMP_stagelabel, false, true); m_main.pack_start(m_controls, false, true); m_main.pack_start(m_buttons, false, true); m_main.pack_start(m_stage_invite_box, false, true); @@ -271,6 +257,9 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) m_main.pack_start(*Gtk::make_managed("Input Settings"), false, true); m_main.pack_start(*sliders_container, false, true); m_main.pack_start(m_scroll); + m_stage_topic_label.set_ellipsize(Pango::ELLIPSIZE_END); + m_stage_topic_label.set_halign(Gtk::ALIGN_CENTER); + m_main.pack_start(m_stage_topic_label, false, true); m_main.pack_start(*combos_container, false, true, 2); add(m_main); show_all_children(); @@ -391,6 +380,10 @@ void VoiceWindow::UpdateStageCommand() { } } +void VoiceWindow::UpdateStageTopicLabel(const std::string &topic) { + m_stage_topic_label.set_markup("Topic: " + topic); +} + 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()) { @@ -424,6 +417,19 @@ void VoiceWindow::OnVoiceStateUpdate(Snowflake user_id, Snowflake channel_id, Vo UpdateStageCommand(); } +void VoiceWindow::OnStageInstanceCreate(const StageInstance &instance) { + m_stage_topic_label.show(); + UpdateStageTopicLabel(instance.Topic); +} + +void VoiceWindow::OnStageInstanceUpdate(const StageInstance &instance) { + UpdateStageTopicLabel(instance.Topic); +} + +void VoiceWindow::OnStageInstanceDelete(const StageInstance &instance) { + m_stage_topic_label.hide(); +} + VoiceWindow::type_signal_mute VoiceWindow::signal_mute() { return m_signal_mute; } diff --git a/src/windows/voice/voicewindow.hpp b/src/windows/voice/voicewindow.hpp index 64b14a9..05033d9 100644 --- a/src/windows/voice/voicewindow.hpp +++ b/src/windows/voice/voicewindow.hpp @@ -1,4 +1,5 @@ #pragma once +#include "discord/stage.hpp" #include "discord/voicestate.hpp" #ifdef WITH_VOICE // clang-format off @@ -31,6 +32,9 @@ private: void OnUserDisconnect(Snowflake user_id, Snowflake from_channel_id); void OnSpeakerStateChanged(Snowflake channel_id, Snowflake user_id, bool is_speaker); void OnVoiceStateUpdate(Snowflake user_id, Snowflake channel_id, VoiceStateFlags flags); + void OnStageInstanceCreate(const StageInstance &instance); + void OnStageInstanceUpdate(const StageInstance &instance); + void OnStageInstanceDelete(const StageInstance &instance); void OnMuteChanged(); void OnDeafenChanged(); @@ -39,6 +43,7 @@ private: bool UpdateVoiceMeters(); void UpdateVADParamValue(); void UpdateStageCommand(); + void UpdateStageTopicLabel(const std::string &topic); Gtk::Box m_main; Gtk::Box m_controls; @@ -88,7 +93,7 @@ private: Gtk::Menu m_menu_view_sub; Gtk::MenuItem m_menu_view_settings; - Gtk::Label m_TMP_stagelabel; + Gtk::Label m_stage_topic_label; Gtk::Label m_speakers_label; Gtk::Label m_audience_label;