summaryrefslogtreecommitdiff
path: root/src/abaddon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/abaddon.cpp')
-rw-r--r--src/abaddon.cpp34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/abaddon.cpp b/src/abaddon.cpp
index 82741be..bdedc7c 100644
--- a/src/abaddon.cpp
+++ b/src/abaddon.cpp
@@ -264,11 +264,25 @@ int Abaddon::StartGTK() {
m_main_window->GetChatWindow()->signal_action_reaction_remove().connect(sigc::mem_fun(*this, &Abaddon::ActionReactionRemove));
ActionReloadCSS();
+ if (m_settings.GetSettings().HideToTray) {
+ m_tray = Gtk::StatusIcon::create("discord");
+ m_tray->signal_activate().connect(sigc::mem_fun(*this, &Abaddon::on_tray_click));
+ m_tray->signal_popup_menu().connect(sigc::mem_fun(*this, &Abaddon::on_tray_popup_menu));
+ }
+ m_tray_menu = Gtk::make_managed<Gtk::Menu>();
+ m_tray_exit = Gtk::make_managed<Gtk::MenuItem>("Quit", false);
+
+ m_tray_exit->signal_activate().connect(sigc::mem_fun(*this, &Abaddon::on_tray_menu_click));
+
+ m_tray_menu->append(*m_tray_exit);
+ m_tray_menu->show_all();
+ m_main_window->signal_hide().connect(sigc::mem_fun(*this, &Abaddon::on_window_hide));
m_gtk_app->signal_shutdown().connect(sigc::mem_fun(*this, &Abaddon::OnShutdown), false);
m_main_window->UpdateMenus();
+ m_gtk_app->hold();
m_main_window->show();
RunFirstTimeDiscordStartup();
@@ -965,10 +979,28 @@ EmojiResource &Abaddon::GetEmojis() {
#ifdef WITH_VOICE
AudioManager &Abaddon::GetAudio() {
- return *m_audio.get();
+ return *m_audio;
}
#endif
+void Abaddon::on_tray_click() {
+ m_main_window->set_visible(!m_main_window->is_visible());
+}
+
+void Abaddon::on_tray_menu_click() {
+ m_gtk_app->quit();
+}
+
+void Abaddon::on_tray_popup_menu(int button, int activate_time) {
+ m_tray->popup_menu_at_position(*m_tray_menu, button, activate_time);
+}
+
+void Abaddon::on_window_hide() {
+ if (!m_settings.GetSettings().HideToTray) {
+ m_gtk_app->quit();
+ }
+}
+
int main(int argc, char **argv) {
if (std::getenv("ABADDON_NO_FC") == nullptr)
Platform::SetupFonts();