diff --git a/components/channels.cpp b/components/channels.cpp index d4152ee..802b592 100644 --- a/components/channels.cpp +++ b/components/channels.cpp @@ -51,8 +51,35 @@ ChannelListRowDMChannel::ChannelListRowDMChannel(const ChannelData *data) { ID = data->ID; m_ev = Gtk::manage(new Gtk::EventBox); m_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); - m_lbl = Gtk::manage(new Gtk::TextView); - MakeReadOnly(m_lbl); + + std::optional top_recipient; // potentially nullopt in group dm + const auto recipients = data->GetDMRecipients(); + if (recipients.size() > 0) + top_recipient = recipients[0]; + + const static bool alt = Abaddon::Get().GetSettings().GetAltChannelWidget(); + if (alt) { + auto *tmp = Gtk::manage(new Gtk::Label); + m_lbl = tmp; + if (data->Type == ChannelType::DM) + tmp->set_text(top_recipient->Username); + else if (data->Type == ChannelType::GROUP_DM) + tmp->set_text(std::to_string(recipients.size()) + " users"); + } else { + auto *tmp = Gtk::manage(new Gtk::TextView); + m_lbl = tmp; + MakeReadOnly(tmp); + + auto buf = tmp->get_buffer(); + if (data->Type == ChannelType::DM) + buf->set_text(top_recipient->Username); + else if (data->Type == ChannelType::GROUP_DM) + buf->set_text(std::to_string(recipients.size()) + " users"); + + static bool show_emojis = Abaddon::Get().GetSettings().GetShowEmojis(); + if (show_emojis) + Abaddon::Get().GetEmojis().ReplaceEmojis(buf, ChannelEmojiSize); + } AddWidgetMenuHandler(m_ev, m_menu); AddWidgetMenuHandler(m_lbl, m_menu); @@ -77,11 +104,6 @@ ChannelListRowDMChannel::ChannelListRowDMChannel(const ChannelData *data) { get_style_context()->add_class("channel-row"); m_lbl->get_style_context()->add_class("channel-row-label"); - std::optional top_recipient; // potentially nullopt in group dm - const auto recipients = data->GetDMRecipients(); - if (recipients.size() > 0) - top_recipient = recipients[0]; - if (data->Type == ChannelType::DM) { m_status = Gtk::manage(new StatusIndicator(top_recipient->ID)); m_status->set_margin_start(5); @@ -93,16 +115,6 @@ ChannelListRowDMChannel::ChannelListRowDMChannel(const ChannelData *data) { Abaddon::Get().GetImageManager().LoadFromURL(top_recipient->GetAvatarURL("png", "16"), sigc::track_obj(cb, *this)); } - auto buf = m_lbl->get_buffer(); - if (data->Type == ChannelType::DM) - buf->set_text(top_recipient->Username); - else if (data->Type == ChannelType::GROUP_DM) - buf->set_text(std::to_string(recipients.size()) + " users"); - - static bool show_emojis = Abaddon::Get().GetSettings().GetShowEmojis(); - if (show_emojis) - Abaddon::Get().GetEmojis().ReplaceEmojis(buf, ChannelEmojiSize); - m_box->set_halign(Gtk::ALIGN_START); if (m_icon != nullptr) m_box->pack_start(*m_icon); @@ -118,8 +130,22 @@ ChannelListRowGuild::ChannelListRowGuild(const GuildData *data) { ID = data->ID; m_ev = Gtk::manage(new Gtk::EventBox); m_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); - m_lbl = Gtk::manage(new Gtk::TextView); - MakeReadOnly(m_lbl); + + const static bool alt = Abaddon::Get().GetSettings().GetAltChannelWidget(); + if (alt) { + m_lbl = Gtk::manage(new Gtk::Label(data->Name)); + } else { + auto *tmp = Gtk::manage(new Gtk::TextView); + m_lbl = tmp; + MakeReadOnly(tmp); + auto buf = tmp->get_buffer(); + Gtk::TextBuffer::iterator start, end; + buf->get_bounds(start, end); + buf->insert_markup(start, "" + Glib::Markup::escape_text(data->Name) + ""); + static bool show_emojis = Abaddon::Get().GetSettings().GetShowEmojis(); + if (show_emojis) + Abaddon::Get().GetEmojis().ReplaceEmojis(buf, ChannelEmojiSize); + } AddWidgetMenuHandler(m_ev, m_menu); AddWidgetMenuHandler(m_lbl, m_menu); @@ -168,13 +194,6 @@ ChannelListRowGuild::ChannelListRowGuild(const GuildData *data) { get_style_context()->add_class("channel-row-guild"); m_lbl->get_style_context()->add_class("channel-row-label"); - auto buf = m_lbl->get_buffer(); - Gtk::TextBuffer::iterator start, end; - buf->get_bounds(start, end); - buf->insert_markup(start, "" + Glib::Markup::escape_text(data->Name) + ""); - static bool show_emojis = Abaddon::Get().GetSettings().GetShowEmojis(); - if (show_emojis) - Abaddon::Get().GetEmojis().ReplaceEmojis(buf, ChannelEmojiSize); m_box->set_halign(Gtk::ALIGN_START); m_box->pack_start(*m_icon); m_box->pack_start(*m_lbl); @@ -199,8 +218,20 @@ ChannelListRowCategory::ChannelListRowCategory(const ChannelData *data) { ID = data->ID; m_ev = Gtk::manage(new Gtk::EventBox); m_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); - m_lbl = Gtk::manage(new Gtk::TextView); - MakeReadOnly(m_lbl); + + const static bool alt = Abaddon::Get().GetSettings().GetAltChannelWidget(); + if (alt) { + m_lbl = Gtk::manage(new Gtk::Label(*data->Name)); + } else { + auto *tmp = Gtk::manage(new Gtk::TextView); + m_lbl = tmp; + MakeReadOnly(tmp); + auto buf = tmp->get_buffer(); + buf->set_text(*data->Name); + static bool show_emojis = Abaddon::Get().GetSettings().GetShowEmojis(); + if (show_emojis) + Abaddon::Get().GetEmojis().ReplaceEmojis(buf, ChannelEmojiSize); + } m_arrow = Gtk::manage(new Gtk::Arrow(Gtk::ARROW_DOWN, Gtk::SHADOW_NONE)); m_menu_copyid = Gtk::manage(new Gtk::MenuItem("_Copy ID", true)); @@ -218,11 +249,6 @@ ChannelListRowCategory::ChannelListRowCategory(const ChannelData *data) { get_style_context()->add_class("channel-row-category"); m_lbl->get_style_context()->add_class("channel-row-label"); - auto buf = m_lbl->get_buffer(); - buf->set_text(*data->Name); - static bool show_emojis = Abaddon::Get().GetSettings().GetShowEmojis(); - if (show_emojis) - Abaddon::Get().GetEmojis().ReplaceEmojis(buf, ChannelEmojiSize); m_box->set_halign(Gtk::ALIGN_START); m_box->pack_start(*m_arrow); m_box->pack_start(*m_lbl); @@ -247,8 +273,20 @@ ChannelListRowChannel::ChannelListRowChannel(const ChannelData *data) { ID = data->ID; m_ev = Gtk::manage(new Gtk::EventBox); m_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); - m_lbl = Gtk::manage(new Gtk::TextView); - MakeReadOnly(m_lbl); + + const static bool alt = Abaddon::Get().GetSettings().GetAltChannelWidget(); + if (alt) { + m_lbl = Gtk::manage(new Gtk::Label("#" + *data->Name)); + } else { + auto *tmp = Gtk::manage(new Gtk::TextView); + m_lbl = tmp; + MakeReadOnly(tmp); + auto buf = tmp->get_buffer(); + buf->set_text("#" + *data->Name); + static bool show_emojis = Abaddon::Get().GetSettings().GetShowEmojis(); + if (show_emojis) + Abaddon::Get().GetEmojis().ReplaceEmojis(buf, ChannelEmojiSize); + } m_menu_copyid = Gtk::manage(new Gtk::MenuItem("_Copy ID", true)); m_menu_copyid->signal_activate().connect([this]() { @@ -265,15 +303,11 @@ ChannelListRowChannel::ChannelListRowChannel(const ChannelData *data) { get_style_context()->add_class("channel-row-channel"); m_lbl->get_style_context()->add_class("channel-row-label"); - auto buf = m_lbl->get_buffer(); if (data->IsNSFW.has_value() && *data->IsNSFW) { get_style_context()->add_class("nsfw"); m_lbl->get_style_context()->add_class("nsfw"); } - buf->set_text("#" + *data->Name); - static bool show_emojis = Abaddon::Get().GetSettings().GetShowEmojis(); - if (show_emojis) - Abaddon::Get().GetEmojis().ReplaceEmojis(buf, ChannelEmojiSize); + m_box->set_halign(Gtk::ALIGN_START); m_box->pack_start(*m_lbl); m_ev->add(*m_box); diff --git a/components/channels.hpp b/components/channels.hpp index 8515d02..38295d0 100644 --- a/components/channels.hpp +++ b/components/channels.hpp @@ -42,7 +42,7 @@ protected: Gtk::EventBox *m_ev; Gtk::Box *m_box; StatusIndicator *m_status = nullptr; - Gtk::TextView *m_lbl; + Gtk::Widget *m_lbl; Gtk::Image *m_icon = nullptr; Gtk::Menu m_menu; @@ -59,7 +59,7 @@ public: protected: Gtk::EventBox *m_ev; Gtk::Box *m_box; - Gtk::TextView *m_lbl; + Gtk::Widget *m_lbl; Gtk::Image *m_icon; Gtk::Menu m_menu; @@ -92,7 +92,7 @@ public: protected: Gtk::EventBox *m_ev; Gtk::Box *m_box; - Gtk::TextView *m_lbl; + Gtk::Widget *m_lbl; Gtk::Arrow *m_arrow; Gtk::Menu m_menu; @@ -114,7 +114,7 @@ public: protected: Gtk::EventBox *m_ev; Gtk::Box *m_box; - Gtk::TextView *m_lbl; + Gtk::Widget *m_lbl; Gtk::Menu m_menu; Gtk::MenuItem *m_menu_copyid; diff --git a/settings.cpp b/settings.cpp index 11894de..4563ee9 100644 --- a/settings.cpp +++ b/settings.cpp @@ -81,3 +81,7 @@ bool SettingsManager::GetShowAnimations() const { bool SettingsManager::GetShowOwnerCrown() const { return GetSettingBool("gui", "owner_crown", true); } + +bool SettingsManager::GetAltChannelWidget() const { + return GetSettingBool("gui", "alt_channel_widget", false); +} diff --git a/settings.hpp b/settings.hpp index 88365ba..9bf5636 100644 --- a/settings.hpp +++ b/settings.hpp @@ -20,6 +20,7 @@ public: std::string GetMainCSS() const; bool GetShowAnimations() const; bool GetShowOwnerCrown() const; + bool GetAltChannelWidget() const; bool IsValid() const;