diff options
Diffstat (limited to 'components/channels.cpp')
-rw-r--r-- | components/channels.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/components/channels.cpp b/components/channels.cpp index 56534ba..cc23bb5 100644 --- a/components/channels.cpp +++ b/components/channels.cpp @@ -94,6 +94,9 @@ void ChannelList::UpdateRemoveGuild(Snowflake id) { } void ChannelList::UpdateRemoveChannel(Snowflake id) { + auto iter = GetIteratorForChannelFromID(id); + if (!iter) return; + m_model->erase(iter); } void ChannelList::UpdateChannel(Snowflake id) { @@ -184,6 +187,23 @@ Gtk::TreeModel::iterator ChannelList::GetIteratorForGuildFromID(Snowflake id) { return {}; } +Gtk::TreeModel::iterator ChannelList::GetIteratorForChannelFromID(Snowflake id) { + std::queue<Gtk::TreeModel::iterator> queue; + for (const auto child : m_model->children()) + for (const auto child2 : child.children()) + queue.push(child2); + + while (!queue.empty()) { + auto item = queue.front(); + if ((*item)[m_columns.m_id] == id) return item; + for (const auto child : item->children()) + queue.push(child); + queue.pop(); + } + + return {}; +} + ChannelList::type_signal_action_channel_item_select ChannelList::signal_action_channel_item_select() { return m_signal_action_channel_item_select; } |