diff options
Diffstat (limited to 'src/components/channels.cpp')
-rw-r--r-- | src/components/channels.cpp | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/components/channels.cpp b/src/components/channels.cpp index 4a6b1bc..2b83eb0 100644 --- a/src/components/channels.cpp +++ b/src/components/channels.cpp @@ -17,6 +17,10 @@ ChannelList::ChannelList() , m_menu_category_copy_id("_Copy ID", true) , m_menu_channel_copy_id("_Copy ID", true) , m_menu_channel_mark_as_read("Mark as _Read", true) +#ifdef WITH_LIBHANDY + , m_menu_channel_open_tab("Open in New _Tab", true) + , m_menu_dm_open_tab("Open in New _Tab", true) +#endif , m_menu_dm_copy_id("_Copy ID", true) , m_menu_dm_close("") // changes depending on if group or not , m_menu_thread_copy_id("_Copy ID", true) @@ -143,6 +147,15 @@ ChannelList::ChannelList() else discord.MuteChannel(id, NOOP_CALLBACK); }); + +#ifdef WITH_LIBHANDY + m_menu_channel_open_tab.signal_activate().connect([this] { + const auto id = static_cast<Snowflake>((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]); + m_signal_action_open_new_tab.emit(id); + }); + m_menu_channel.append(m_menu_channel_open_tab); +#endif + m_menu_channel.append(m_menu_channel_mark_as_read); m_menu_channel.append(m_menu_channel_toggle_mute); m_menu_channel.append(m_menu_channel_copy_id); @@ -170,6 +183,13 @@ ChannelList::ChannelList() else discord.MuteChannel(id, NOOP_CALLBACK); }); +#ifdef WITH_LIBHANDY + m_menu_dm_open_tab.signal_activate().connect([this] { + const auto id = static_cast<Snowflake>((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]); + m_signal_action_open_new_tab.emit(id); + }); + m_menu_dm.append(m_menu_dm_open_tab); +#endif m_menu_dm.append(m_menu_dm_toggle_mute); m_menu_dm.append(m_menu_dm_close); m_menu_dm.append(m_menu_dm_copy_id); @@ -442,7 +462,7 @@ void ChannelList::OnGuildUnmute(Snowflake id) { // create a temporary channel row for non-joined threads // and delete them when the active channel switches off of them if still not joined -void ChannelList::SetActiveChannel(Snowflake id) { +void ChannelList::SetActiveChannel(Snowflake id, bool expand_to) { // mark channel as read when switching off if (m_active_channel.IsValid()) Abaddon::Get().GetDiscordClient().MarkChannelAsRead(m_active_channel, [](...) {}); @@ -459,11 +479,12 @@ void ChannelList::SetActiveChannel(Snowflake id) { const auto channel_iter = GetIteratorForChannelFromID(id); if (channel_iter) { - m_view.expand_to_path(m_model->get_path(channel_iter)); + if (expand_to) { + m_view.expand_to_path(m_model->get_path(channel_iter)); + } m_view.get_selection()->select(channel_iter); } else { m_view.get_selection()->unselect_all(); - // SetActiveChannel should probably just take the channel object const auto channel = Abaddon::Get().GetDiscordClient().GetChannel(id); if (!channel.has_value() || !channel->IsThread()) return; auto parent_iter = GetIteratorForChannelFromID(*channel->ParentID); @@ -960,6 +981,12 @@ ChannelList::type_signal_action_guild_settings ChannelList::signal_action_guild_ return m_signal_action_guild_settings; } +#ifdef WITH_LIBHANDY +ChannelList::type_signal_action_open_new_tab ChannelList::signal_action_open_new_tab() { + return m_signal_action_open_new_tab; +} +#endif + ChannelList::ModelColumns::ModelColumns() { add(m_type); add(m_id); |