summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/abaddon.cpp29
-rw-r--r--src/abaddon.hpp9
-rw-r--r--src/settings.cpp2
-rw-r--r--src/settings.hpp2
-rw-r--r--src/windows/mainwindow.cpp2
-rw-r--r--src/windows/mainwindow.hpp1
6 files changed, 43 insertions, 2 deletions
diff --git a/src/abaddon.cpp b/src/abaddon.cpp
index 343dff7..02dcd08 100644
--- a/src/abaddon.cpp
+++ b/src/abaddon.cpp
@@ -248,11 +248,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();
@@ -937,6 +951,21 @@ EmojiResource &Abaddon::GetEmojis() {
return m_emojis;
}
+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();
diff --git a/src/abaddon.hpp b/src/abaddon.hpp
index ab80c46..b067324 100644
--- a/src/abaddon.hpp
+++ b/src/abaddon.hpp
@@ -117,6 +117,8 @@ protected:
Gtk::MenuItem *m_user_menu_roles;
Gtk::MenuItem *m_user_menu_remove_recipient;
Gtk::Menu *m_user_menu_roles_submenu;
+ Gtk::Menu *m_tray_menu;
+ Gtk::MenuItem *m_tray_exit;
void on_user_menu_insert_mention();
void on_user_menu_ban();
@@ -124,6 +126,10 @@ protected:
void on_user_menu_copy_id();
void on_user_menu_open_dm();
void on_user_menu_remove_recipient();
+ void on_tray_click();
+ void on_tray_popup_menu(int button, int activate_time);
+ void on_tray_menu_click();
+ void on_window_hide();
private:
SettingsManager m_settings;
@@ -142,5 +148,6 @@ private:
Glib::RefPtr<Gtk::Application> m_gtk_app;
Glib::RefPtr<Gtk::CssProvider> m_css_provider;
Glib::RefPtr<Gtk::CssProvider> m_css_low_provider; // registered with a lower priority to allow better customization
- std::unique_ptr<MainWindow> m_main_window; // wah wah cant create a gtkstylecontext fuck you
+ Glib::RefPtr<Gtk::StatusIcon> m_tray;
+ std::unique_ptr<MainWindow> m_main_window; // wah wah cant create a gtkstylecontext fuck you
};
diff --git a/src/settings.cpp b/src/settings.cpp
index 242bd7c..dd1fe83 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -48,6 +48,7 @@ void SettingsManager::ReadSettings() {
SMBOOL("gui", "save_state", SaveState);
SMBOOL("gui", "stock_emojis", ShowStockEmojis);
SMBOOL("gui", "unreads", Unreads);
+ SMBOOL("gui", "hide_to_tray", HideToTray);
SMINT("http", "concurrent", CacheHTTPConcurrency);
SMSTR("http", "user_agent", UserAgent);
SMSTR("style", "expandercolor", ChannelsExpanderColor);
@@ -101,6 +102,7 @@ void SettingsManager::Close() {
SMBOOL("gui", "save_state", SaveState);
SMBOOL("gui", "stock_emojis", ShowStockEmojis);
SMBOOL("gui", "unreads", Unreads);
+ SMBOOL("gui", "hide_to_tray", HideToTray);
SMINT("http", "concurrent", CacheHTTPConcurrency);
SMSTR("http", "user_agent", UserAgent);
SMSTR("style", "expandercolor", ChannelsExpanderColor);
diff --git a/src/settings.hpp b/src/settings.hpp
index 3c9aebb..7f5e015 100644
--- a/src/settings.hpp
+++ b/src/settings.hpp
@@ -28,6 +28,8 @@ public:
#endif
bool Unreads { true };
+ bool HideToTray { false };
+
// [http]
int CacheHTTPConcurrency { 20 };
std::string UserAgent { "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" };
diff --git a/src/windows/mainwindow.cpp b/src/windows/mainwindow.cpp
index 17edfa3..7f4395c 100644
--- a/src/windows/mainwindow.cpp
+++ b/src/windows/mainwindow.cpp
@@ -401,4 +401,4 @@ MainWindow::type_signal_action_view_pins MainWindow::signal_action_view_pins() {
MainWindow::type_signal_action_view_threads MainWindow::signal_action_view_threads() {
return m_signal_action_view_threads;
-}
+} \ No newline at end of file
diff --git a/src/windows/mainwindow.hpp b/src/windows/mainwindow.hpp
index b5b6fc1..534df1b 100644
--- a/src/windows/mainwindow.hpp
+++ b/src/windows/mainwindow.hpp
@@ -83,6 +83,7 @@ private:
Gtk::MenuItem m_menu_view_go_back;
Gtk::MenuItem m_menu_view_go_forward;
#endif
+
void OnViewSubmenuPopup();
public: