diff --git a/share/keepassxc.ini b/share/keepassxc.ini index c6f0654fe..54920224a 100644 --- a/share/keepassxc.ini +++ b/share/keepassxc.ini @@ -16,6 +16,7 @@ LastOpenedDatabases=@Invalid() [GUI] Language=system ShowTrayIcon=false +DarkTrayIcon=false MinimizeToTray=false MinimizeOnClose=false MinimizeOnStartup=false diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 2047919b1..96fd385ff 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -135,6 +135,7 @@ void Config::init(const QString& fileName) m_defaults.insert("security/IconDownloadFallbackToGoogle", false); m_defaults.insert("GUI/Language", "system"); m_defaults.insert("GUI/ShowTrayIcon", false); + m_defaults.insert("GUI/DarkTrayIcon", false); m_defaults.insert("GUI/MinimizeToTray", false); m_defaults.insert("GUI/MinimizeOnClose", false); } diff --git a/src/core/FilePath.cpp b/src/core/FilePath.cpp index b5c9d1020..f694f548b 100644 --- a/src/core/FilePath.cpp +++ b/src/core/FilePath.cpp @@ -1,4 +1,5 @@ /* + * Copyright (C) 2017 KeePassXC Team * Copyright (C) 2011 Felix Geyer * * This program is free software: you can redistribute it and/or modify @@ -23,6 +24,7 @@ #include "config-keepassx.h" #include "core/Global.h" +#include "core/Config.h" FilePath* FilePath::m_instance(nullptr); @@ -91,13 +93,16 @@ QString FilePath::pluginPath(const QString& name) QIcon FilePath::applicationIcon() { + bool darkIcon = useDarkIcon(); + #ifdef KEEPASSXC_DIST_SNAP - return icon("apps", "keepassxc", false); + return (darkIcon) ? icon("apps", "keepassxc-dark", false) : icon("apps", "keepassxc", false); #else - return icon("apps", "keepassxc"); + return (darkIcon) ? icon("apps", "keepassxc-dark") : icon("apps", "keepassxc"); #endif } + QIcon FilePath::trayIconLocked() { #ifdef KEEPASSXC_DIST_SNAP @@ -109,10 +114,12 @@ QIcon FilePath::trayIconLocked() QIcon FilePath::trayIconUnlocked() { + bool darkIcon = useDarkIcon(); + #ifdef KEEPASSXC_DIST_SNAP - return icon("apps", "keepassxc-unlocked", false); + return darkIcon ? icon("apps", "keepassxc-dark", false) : icon("apps", "keepassxc-unlocked", false); #else - return icon("apps", "keepassxc-unlocked"); + return darkIcon ? icon("apps", "keepassxc-dark") : icon("apps", "keepassxc-unlocked"); #endif } @@ -246,6 +253,11 @@ bool FilePath::testSetDir(const QString& dir) } } +bool FilePath::useDarkIcon() +{ + return config()->get("GUI/DarkTrayIcon").toBool(); +} + FilePath* FilePath::instance() { if (!m_instance) { diff --git a/src/core/FilePath.h b/src/core/FilePath.h index 34edcbc93..2db496937 100644 --- a/src/core/FilePath.h +++ b/src/core/FilePath.h @@ -38,6 +38,7 @@ public: private: FilePath(); bool testSetDir(const QString& dir); + bool useDarkIcon(); static FilePath* m_instance; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index fa16adb80..d63545bf1 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -775,7 +775,6 @@ void MainWindow::updateTrayIcon() if (isTrayIconEnabled()) { if (!m_trayIcon) { m_trayIcon = new QSystemTrayIcon(this); - QMenu* menu = new QMenu(this); QAction* actionToggle = new QAction(tr("Toggle window"), menu); @@ -795,6 +794,7 @@ void MainWindow::updateTrayIcon() connect(actionToggle, SIGNAL(triggered()), SLOT(toggleWindow())); m_trayIcon->setContextMenu(menu); + m_trayIcon->setIcon(filePath()->applicationIcon()); m_trayIcon->show(); } diff --git a/src/gui/SettingsWidget.cpp b/src/gui/SettingsWidget.cpp index 4ba81c6f7..ce3df3338 100644 --- a/src/gui/SettingsWidget.cpp +++ b/src/gui/SettingsWidget.cpp @@ -136,6 +136,7 @@ void SettingsWidget::loadSettings() m_generalUi->detailsHideCheckBox->setChecked(config()->get("GUI/HideDetailsView").toBool()); m_generalUi->systrayShowCheckBox->setChecked(config()->get("GUI/ShowTrayIcon").toBool()); + m_generalUi->systrayDarkIconCheckBox->setChecked(config()->get("GUI/DarkTrayIcon").toBool()); m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get("GUI/MinimizeToTray").toBool()); m_generalUi->systrayMinimizeOnCloseCheckBox->setChecked(config()->get("GUI/MinimizeOnClose").toBool()); m_generalUi->systrayMinimizeOnStartup->setChecked(config()->get("GUI/MinimizeOnStartup").toBool()); @@ -208,6 +209,7 @@ void SettingsWidget::saveSettings() config()->set("GUI/HideDetailsView", m_generalUi->detailsHideCheckBox->isChecked()); config()->set("GUI/ShowTrayIcon", m_generalUi->systrayShowCheckBox->isChecked()); + config()->set("GUI/DarkTrayIcon", m_generalUi->systrayDarkIconCheckBox->isChecked()); config()->set("GUI/MinimizeToTray", m_generalUi->systrayMinimizeToTrayCheckBox->isChecked()); config()->set("GUI/MinimizeOnClose", m_generalUi->systrayMinimizeOnCloseCheckBox->isChecked()); config()->set("GUI/MinimizeOnStartup", m_generalUi->systrayMinimizeOnStartup->isChecked()); @@ -265,6 +267,7 @@ void SettingsWidget::enableAutoSaveOnExit(bool checked) void SettingsWidget::enableSystray(bool checked) { + m_generalUi->systrayDarkIconCheckBox->setEnabled(checked); m_generalUi->systrayMinimizeToTrayCheckBox->setEnabled(checked); m_generalUi->systrayMinimizeOnCloseCheckBox->setEnabled(checked); } diff --git a/src/gui/SettingsWidgetGeneral.ui b/src/gui/SettingsWidgetGeneral.ui index 7dc4487cf..684cb4353 100644 --- a/src/gui/SettingsWidgetGeneral.ui +++ b/src/gui/SettingsWidgetGeneral.ui @@ -245,6 +245,42 @@ + + + + 0 + + + QLayout::SetMaximumSize + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + false + + + Dark system tray icon + + + + +