diff options
Diffstat (limited to 'src/abaddon.cpp')
-rw-r--r-- | src/abaddon.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/abaddon.cpp b/src/abaddon.cpp index bb5ecb9..e30281f 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -20,6 +20,7 @@ #include "windows/threadswindow.hpp" #include "windows/voicewindow.hpp" #include "startup.hpp" +#include "notifications/notifications.hpp" #ifdef WITH_LIBHANDY #include <handy.h> @@ -303,6 +304,14 @@ int Abaddon::StartGTK() { m_main_window->UpdateMenus(); + auto action_go_to_channel = Gio::SimpleAction::create("go-to-channel", Glib::VariantType("s")); + action_go_to_channel->signal_activate().connect([this](const Glib::VariantBase ¶m) { + const auto id_str = Glib::VariantBase::cast_dynamic<Glib::Variant<Glib::ustring>>(param); + const Snowflake id = id_str.get(); + ActionChannelOpened(id, false); + }); + m_gtk_app->add_action(action_go_to_channel); + m_gtk_app->hold(); m_main_window->show(); @@ -360,6 +369,7 @@ void Abaddon::DiscordOnReady() { void Abaddon::DiscordOnMessageCreate(const Message &message) { m_main_window->UpdateChatNewMessage(message); + m_notifications.CheckMessage(message); } void Abaddon::DiscordOnMessageDelete(Snowflake id, Snowflake channel_id) { @@ -774,6 +784,18 @@ std::string Abaddon::GetStateCachePath(const std::string &path) { return GetStateCachePath() + path; } +Glib::RefPtr<Gtk::Application> Abaddon::GetApp() { + return m_gtk_app; +} + +bool Abaddon::IsMainWindowActive() { + return m_main_window->has_toplevel_focus(); +} + +Snowflake Abaddon::GetActiveChannelID() const noexcept { + return m_main_window->GetChatActiveChannel(); +} + void Abaddon::ActionConnect() { if (!m_discord.IsStarted()) StartDiscord(); @@ -803,6 +825,8 @@ void Abaddon::ActionChannelOpened(Snowflake id, bool expand_to) { } if (id == m_main_window->GetChatActiveChannel()) return; + m_notifications.WithdrawChannel(id); + m_main_window->GetChatWindow()->SetTopic(""); const auto channel = m_discord.GetChannel(id); |