hide dm header unless selected in classic channel list

This commit is contained in:
ouwou 2024-01-08 20:53:59 -05:00
parent 9131158cbb
commit 1e6d16f44a
5 changed files with 55 additions and 2 deletions

View File

@ -11,6 +11,10 @@ ChannelList::ChannelList() {
m_tree.SetSelectedGuild(guild_id);
});
m_guilds.signal_dms_selected().connect([this]() {
m_tree.SetSelectedDMs();
});
m_guilds.show();
m_tree.show();
m_guilds_scroll.add(m_guilds);

View File

@ -86,10 +86,17 @@ ChannelListTree::ChannelListTree()
m_filter_model->set_visible_func([this](const Gtk::TreeModel::const_iterator &iter) -> bool {
if (!m_classic) return true;
if ((*iter)[m_columns.m_type] == RenderType::Guild) {
const RenderType type = (*iter)[m_columns.m_type];
if (m_classic_selected_dms) {
if (iter->parent()) return true;
return type == RenderType::DMHeader;
}
if (type == RenderType::Guild) {
return (*iter)[m_columns.m_id] == m_classic_selected_guild;
}
return true;
return type != RenderType::DMHeader;
});
m_view.show();
@ -309,6 +316,7 @@ void ChannelListTree::SetClassic(bool value) {
void ChannelListTree::SetSelectedGuild(Snowflake guild_id) {
m_classic_selected_guild = guild_id;
m_classic_selected_dms = false;
m_filter_model->refilter();
auto guild_iter = GetIteratorForGuildFromID(guild_id);
if (guild_iter) {
@ -318,6 +326,16 @@ void ChannelListTree::SetSelectedGuild(Snowflake guild_id) {
}
}
void ChannelListTree::SetSelectedDMs() {
m_classic_selected_dms = true;
m_filter_model->refilter();
if (m_dm_header) {
if (auto filter_path = m_filter_model->convert_child_path_to_path(m_dm_header)) {
m_view.expand_row(filter_path, false);
}
}
}
void ChannelListTree::OnPanedPositionChanged() {
m_view.queue_draw();
}

View File

@ -35,6 +35,7 @@ public:
void SetClassic(bool value);
void SetSelectedGuild(Snowflake guild_id);
void SetSelectedDMs();
protected:
void OnPanedPositionChanged();
@ -193,6 +194,7 @@ protected:
bool m_classic = false;
Snowflake m_classic_selected_guild;
bool m_classic_selected_dms = false;
Snowflake m_active_channel;

View File

@ -1,6 +1,18 @@
#include "guildlist.hpp"
#include "guildlistfolderitem.hpp"
class GuildListDMsButton : public Gtk::EventBox {
public:
GuildListDMsButton() {
m_img.property_pixbuf() = Abaddon::Get().GetImageManager().GetPlaceholder(48);
add(m_img);
show_all_children();
}
private:
Gtk::Image m_img;
};
GuildList::GuildList() {
set_selection_mode(Gtk::SELECTION_NONE);
show_all_children();
@ -11,6 +23,16 @@ void GuildList::UpdateListing() {
Clear();
auto *dms = Gtk::make_managed<GuildListDMsButton>();
dms->show();
dms->signal_button_press_event().connect([this](GdkEventButton *ev) -> bool {
if (ev->type == GDK_BUTTON_PRESS && ev->button == GDK_BUTTON_PRIMARY) {
m_signal_dms_selected.emit();
}
return false;
});
add(*dms);
// does this function still even work ??lol
const auto folders = discord.GetUserSettings().GuildFolders;
const auto guild_ids = discord.GetUserSortedGuilds();
@ -86,3 +108,7 @@ void GuildList::Clear() {
GuildList::type_signal_guild_selected GuildList::signal_guild_selected() {
return m_signal_guild_selected;
}
GuildList::type_signal_dms_selected GuildList::signal_dms_selected() {
return m_signal_dms_selected;
}

View File

@ -20,9 +20,12 @@ private:
public:
using type_signal_guild_selected = sigc::signal<void, Snowflake>;
using type_signal_dms_selected = sigc::signal<void>;
type_signal_guild_selected signal_guild_selected();
type_signal_dms_selected signal_dms_selected();
private:
type_signal_guild_selected m_signal_guild_selected;
type_signal_dms_selected m_signal_dms_selected;
};