From bfb2490938099982a2571bd07f4aab54128ce34a Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sat, 23 Apr 2022 15:33:54 -0400 Subject: [PATCH] dont expand channel list when changing tabs --- src/abaddon.cpp | 6 +++--- src/abaddon.hpp | 2 +- src/components/channels.cpp | 7 ++++--- src/components/channels.hpp | 2 +- src/components/chatwindow.cpp | 4 ++-- src/components/chatwindow.hpp | 2 +- src/windows/mainwindow.cpp | 6 +++--- src/windows/mainwindow.hpp | 2 +- 8 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/abaddon.cpp b/src/abaddon.cpp index 1433d32..f7000c1 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -148,7 +148,7 @@ int Abaddon::StartGTK() { m_main_window->signal_action_view_pins().connect(sigc::mem_fun(*this, &Abaddon::ActionViewPins)); m_main_window->signal_action_view_threads().connect(sigc::mem_fun(*this, &Abaddon::ActionViewThreads)); - m_main_window->GetChannelList()->signal_action_channel_item_select().connect(sigc::mem_fun(*this, &Abaddon::ActionChannelOpened)); + m_main_window->GetChannelList()->signal_action_channel_item_select().connect(sigc::bind(sigc::mem_fun(*this, &Abaddon::ActionChannelOpened), true)); m_main_window->GetChannelList()->signal_action_guild_leave().connect(sigc::mem_fun(*this, &Abaddon::ActionLeaveGuild)); m_main_window->GetChannelList()->signal_action_guild_settings().connect(sigc::mem_fun(*this, &Abaddon::ActionGuildSettings)); @@ -567,7 +567,7 @@ void Abaddon::ActionJoinGuildDialog() { } } -void Abaddon::ActionChannelOpened(Snowflake id) { +void Abaddon::ActionChannelOpened(Snowflake id, bool expand_to) { if (!id.IsValid() || id == m_main_window->GetChatActiveChannel()) return; m_main_window->GetChatWindow()->SetTopic(""); @@ -590,7 +590,7 @@ void Abaddon::ActionChannelOpened(Snowflake id) { display = "Empty group"; m_main_window->set_title(std::string(APP_TITLE) + " - " + display); } - m_main_window->UpdateChatActiveChannel(id); + m_main_window->UpdateChatActiveChannel(id, expand_to); if (m_channels_requested.find(id) == m_channels_requested.end()) { // dont fire requests we know will fail if (can_access) { diff --git a/src/abaddon.hpp b/src/abaddon.hpp index 3404633..3296c45 100644 --- a/src/abaddon.hpp +++ b/src/abaddon.hpp @@ -35,7 +35,7 @@ public: void ActionDisconnect(); void ActionSetToken(); void ActionJoinGuildDialog(); - void ActionChannelOpened(Snowflake id); + void ActionChannelOpened(Snowflake id, bool expand_to = true); void ActionChatInputSubmit(std::string msg, Snowflake channel, Snowflake referenced_message); void ActionChatLoadHistory(Snowflake id); void ActionChatEditMessage(Snowflake channel_id, Snowflake id); diff --git a/src/components/channels.cpp b/src/components/channels.cpp index 6e72725..2b83eb0 100644 --- a/src/components/channels.cpp +++ b/src/components/channels.cpp @@ -462,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, [](...) {}); @@ -479,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); diff --git a/src/components/channels.hpp b/src/components/channels.hpp index 63d5a6d..53a68c9 100644 --- a/src/components/channels.hpp +++ b/src/components/channels.hpp @@ -19,7 +19,7 @@ public: ChannelList(); void UpdateListing(); - void SetActiveChannel(Snowflake id); + void SetActiveChannel(Snowflake id, bool expand_to); // channel list should be populated when this is called void UseExpansionState(const ExpansionStateRoot &state); diff --git a/src/components/chatwindow.cpp b/src/components/chatwindow.cpp index f51b58f..2a6a67e 100644 --- a/src/components/chatwindow.cpp +++ b/src/components/chatwindow.cpp @@ -21,7 +21,7 @@ ChatWindow::ChatWindow() { #ifdef WITH_LIBHANDY m_tab_switcher = Gtk::make_managed(); m_tab_switcher->signal_channel_switched_to().connect([this](Snowflake id) { - m_signal_action_channel_click.emit(id); + m_signal_action_channel_click.emit(id, false); }); #endif @@ -65,7 +65,7 @@ ChatWindow::ChatWindow() { m_completer.show(); m_chat->signal_action_channel_click().connect([this](Snowflake id) { - m_signal_action_channel_click.emit(id); + m_signal_action_channel_click.emit(id, true); }); m_chat->signal_action_chat_load_history().connect([this](Snowflake id) { m_signal_action_chat_load_history.emit(id); diff --git a/src/components/chatwindow.hpp b/src/components/chatwindow.hpp index d09a87b..74c053f 100644 --- a/src/components/chatwindow.hpp +++ b/src/components/chatwindow.hpp @@ -81,7 +81,7 @@ public: using type_signal_action_message_edit = sigc::signal; using type_signal_action_chat_submit = sigc::signal; using type_signal_action_chat_load_history = sigc::signal; - using type_signal_action_channel_click = sigc::signal; + using type_signal_action_channel_click = sigc::signal; using type_signal_action_insert_mention = sigc::signal; using type_signal_action_reaction_add = sigc::signal; using type_signal_action_reaction_remove = sigc::signal; diff --git a/src/windows/mainwindow.cpp b/src/windows/mainwindow.cpp index 04fc72a..d6ca7d5 100644 --- a/src/windows/mainwindow.cpp +++ b/src/windows/mainwindow.cpp @@ -101,10 +101,10 @@ void MainWindow::UpdateChatWindowContents() { m_members.UpdateMemberList(); } -void MainWindow::UpdateChatActiveChannel(Snowflake id) { +void MainWindow::UpdateChatActiveChannel(Snowflake id, bool expand_to) { m_chat.SetActiveChannel(id); m_members.SetActiveChannel(id); - m_channel_list.SetActiveChannel(id); + m_channel_list.SetActiveChannel(id, expand_to); m_content_stack.set_visible_child("chat"); } @@ -281,7 +281,7 @@ void MainWindow::SetupMenu() { }); m_menu_view_friends.signal_activate().connect([this] { - UpdateChatActiveChannel(Snowflake::Invalid); + UpdateChatActiveChannel(Snowflake::Invalid, true); m_members.UpdateMemberList(); m_content_stack.set_visible_child("friends"); }); diff --git a/src/windows/mainwindow.hpp b/src/windows/mainwindow.hpp index 0932af5..215442c 100644 --- a/src/windows/mainwindow.hpp +++ b/src/windows/mainwindow.hpp @@ -13,7 +13,7 @@ public: void UpdateMembers(); void UpdateChannelListing(); void UpdateChatWindowContents(); - void UpdateChatActiveChannel(Snowflake id); + void UpdateChatActiveChannel(Snowflake id, bool expand_to); Snowflake GetChatActiveChannel() const; void UpdateChatNewMessage(const Message &data); void UpdateChatMessageDeleted(Snowflake id, Snowflake channel_id);