diff options
author | Janek Bevendorff <janek@jbev.net> | 2020-05-30 23:46:06 +0300 |
---|---|---|
committer | Janek Bevendorff <janek@jbev.net> | 2020-05-31 01:26:14 +0300 |
commit | 4f75432fc6f5a10323641891dd64e9413634a5b4 (patch) | |
tree | 3fbf6436b6b1cce1c70038e3b7e6034af91b6031 /src | |
parent | 9d2e066acae0cd7bd3447bf3c5fa8ff0c0c4f073 (diff) |
Add option for monochrome tray icon
Diffstat (limited to 'src')
-rw-r--r-- | src/core/Config.cpp | 5 | ||||
-rw-r--r-- | src/core/Config.h | 2 | ||||
-rw-r--r-- | src/core/Resources.cpp | 39 | ||||
-rw-r--r-- | src/core/Resources.h | 2 | ||||
-rw-r--r-- | src/gui/ApplicationSettingsWidget.cpp | 15 | ||||
-rw-r--r-- | src/gui/ApplicationSettingsWidgetGeneral.ui | 83 | ||||
-rw-r--r-- | src/gui/MainWindow.cpp | 9 | ||||
-rw-r--r-- | src/gui/MainWindow.h | 4 | ||||
-rw-r--r-- | src/gui/styles/base/BaseStyle.cpp | 1 |
9 files changed, 133 insertions, 27 deletions
diff --git a/src/core/Config.cpp b/src/core/Config.cpp index b413d460e..bd4d0a7dd 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -93,7 +93,7 @@ static const QHash<Config::ConfigKey, ConfigDirective> configStrings = { {Config::GUI_HidePreviewPanel, {QS("GUI/HidePreviewPanel"), Roaming, false}}, {Config::GUI_ToolButtonStyle, {QS("GUI/ToolButtonStyle"), Roaming, Qt::ToolButtonIconOnly}}, {Config::GUI_ShowTrayIcon, {QS("GUI/ShowTrayIcon"), Roaming, false}}, - {Config::GUI_DarkTrayIcon, {QS("GUI/DarkTrayIcon"), Roaming, false}}, + {Config::GUI_TrayIconAppearance, {QS("GUI/TrayIconAppearance"), Roaming, {}}}, {Config::GUI_MinimizeToTray, {QS("GUI/MinimizeToTray"), Roaming, false}}, {Config::GUI_MinimizeOnStartup, {QS("GUI/MinimizeOnStartup"), Roaming, false}}, {Config::GUI_MinimizeOnClose, {QS("GUI/MinimizeOnClose"), Roaming, false}}, @@ -345,7 +345,8 @@ static const QHash<QString, Config::ConfigKey> deprecationMap = { {QS("generator/WordCase"), Config::PasswordGenerator_WordCase}, {QS("generator/Type"), Config::PasswordGenerator_Type}, {QS("QtErrorMessageShown"), Config::Messages_Qt55CompatibilityWarning}, - {QS("GUI/HidePasswords"), Config::Deleted}}; + {QS("GUI/HidePasswords"), Config::Deleted}, + {QS("GUI/DarkTrayIcon"), Config::Deleted}}; /** * Migrate settings from previous versions. diff --git a/src/core/Config.h b/src/core/Config.h index 8d4609a21..b3dc0fb85 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -76,7 +76,7 @@ public: GUI_HidePreviewPanel, GUI_ToolButtonStyle, GUI_ShowTrayIcon, - GUI_DarkTrayIcon, + GUI_TrayIconAppearance, GUI_MinimizeToTray, GUI_MinimizeOnStartup, GUI_MinimizeOnClose, diff --git a/src/core/Resources.cpp b/src/core/Resources.cpp index c4f747232..608e02dcf 100644 --- a/src/core/Resources.cpp +++ b/src/core/Resources.cpp @@ -28,6 +28,7 @@ #include "core/Config.h" #include "core/Global.h" #include "gui/MainWindow.h" +#include "gui/osutils/OSUtils.h" Resources* Resources::m_instance(nullptr); @@ -100,19 +101,48 @@ QIcon Resources::applicationIcon() return icon("keepassxc", false); } +QString Resources::getTrayIconAppearance() const +{ + auto iconAppearance = config()->get(Config::GUI_TrayIconAppearance).toString(); + if (iconAppearance.isNull()) { +#ifdef Q_OS_MACOS + iconAppearance = osUtils->isDarkMode() ? "monochrome-light" : "monochrome-dark"; +#else + iconAppearance = "monochrome-light"; +#endif + } + return iconAppearance; +} + QIcon Resources::trayIcon() { - return useDarkIcon() ? icon("keepassxc-dark", false) : icon("keepassxc", false); + return trayIconUnlocked(); } QIcon Resources::trayIconLocked() { + auto iconApperance = getTrayIconAppearance(); + + if (iconApperance == "monochrome-light") { + return icon("keepassxc-monochrome-light-locked", false); + } + if (iconApperance == "monochrome-dark") { + return icon("keepassxc-monochrome-dark-locked", false); + } return icon("keepassxc-locked", false); } QIcon Resources::trayIconUnlocked() { - return useDarkIcon() ? icon("keepassxc-dark", false) : icon("keepassxc-unlocked", false); + auto iconApperance = getTrayIconAppearance(); + + if (iconApperance == "monochrome-light") { + return icon("keepassxc-monochrome-light", false); + } + if (iconApperance == "monochrome-dark") { + return icon("keepassxc-monochrome-dark", false); + } + return icon("keepassxc", false); } QIcon Resources::icon(const QString& name, bool recolor, const QColor& overrideColor) @@ -223,11 +253,6 @@ bool Resources::testResourceDir(const QString& dir) return false; } -bool Resources::useDarkIcon() -{ - return config()->get(Config::GUI_DarkTrayIcon).toBool(); -} - Resources* Resources::instance() { if (!m_instance) { diff --git a/src/core/Resources.h b/src/core/Resources.h index 97a994aa1..11302a5b6 100644 --- a/src/core/Resources.h +++ b/src/core/Resources.h @@ -40,9 +40,9 @@ public: static Resources* instance(); private: + QString getTrayIconAppearance() const; Resources(); bool testResourceDir(const QString& dir); - bool useDarkIcon(); static Resources* m_instance; diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp index 896fd8898..e44ded9f3 100644 --- a/src/gui/ApplicationSettingsWidget.cpp +++ b/src/gui/ApplicationSettingsWidget.cpp @@ -238,7 +238,6 @@ void ApplicationSettingsWidget::loadSettings() m_generalUi->systrayShowCheckBox->setChecked(config()->get(Config::GUI_ShowTrayIcon).toBool()); systrayToggled(m_generalUi->systrayShowCheckBox->isChecked()); - m_generalUi->systrayDarkIconCheckBox->setChecked(config()->get(Config::GUI_DarkTrayIcon).toBool()); m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get(Config::GUI_MinimizeToTray).toBool()); m_generalUi->minimizeOnCloseCheckBox->setChecked(config()->get(Config::GUI_MinimizeOnClose).toBool()); m_generalUi->systrayMinimizeOnStartup->setChecked(config()->get(Config::GUI_MinimizeOnStartup).toBool()); @@ -261,6 +260,15 @@ void ApplicationSettingsWidget::loadSettings() m_generalUi->autoTypeStartDelaySpinBox->setValue(config()->get(Config::AutoTypeStartDelay).toInt()); } + m_generalUi->trayIconAppearance->clear(); + m_generalUi->trayIconAppearance->addItem(tr("Monochrome (light)"), QStringLiteral("monochrome-light")); + m_generalUi->trayIconAppearance->addItem(tr("Monochrome (dark)"), QStringLiteral("monochrome-dark")); + m_generalUi->trayIconAppearance->addItem(tr("Colored"), QStringLiteral("colored")); + int trayIconIndex = m_generalUi->trayIconAppearance->findData(config()->get(Config::GUI_TrayIconAppearance)); + if (trayIconIndex > 0) { + m_generalUi->trayIconAppearance->setCurrentIndex(trayIconIndex); + } + m_secUi->clearClipboardCheckBox->setChecked(config()->get(Config::Security_ClearClipboard).toBool()); m_secUi->clearClipboardSpinBox->setValue(config()->get(Config::Security_ClearClipboardTimeout).toInt()); @@ -341,7 +349,7 @@ void ApplicationSettingsWidget::saveSettings() config()->set(Config::GUI_ToolButtonStyle, m_generalUi->toolButtonStyleComboBox->currentData().toString()); config()->set(Config::GUI_ShowTrayIcon, m_generalUi->systrayShowCheckBox->isChecked()); - config()->set(Config::GUI_DarkTrayIcon, m_generalUi->systrayDarkIconCheckBox->isChecked()); + config()->set(Config::GUI_TrayIconAppearance, m_generalUi->trayIconAppearance->currentData().toString()); config()->set(Config::GUI_MinimizeToTray, m_generalUi->systrayMinimizeToTrayCheckBox->isChecked()); config()->set(Config::GUI_MinimizeOnClose, m_generalUi->minimizeOnCloseCheckBox->isChecked()); config()->set(Config::GUI_MinimizeOnStartup, m_generalUi->systrayMinimizeOnStartup->isChecked()); @@ -468,7 +476,8 @@ void ApplicationSettingsWidget::hideWindowOnCopyCheckBoxToggled(bool checked) void ApplicationSettingsWidget::systrayToggled(bool checked) { - m_generalUi->systrayDarkIconCheckBox->setEnabled(checked); + m_generalUi->trayIconAppearance->setEnabled(checked); + m_generalUi->trayIconAppearanceLabel->setEnabled(checked); m_generalUi->systrayMinimizeToTrayCheckBox->setEnabled(checked); } diff --git a/src/gui/ApplicationSettingsWidgetGeneral.ui b/src/gui/ApplicationSettingsWidgetGeneral.ui index 12a5cc57d..fea7481aa 100644 --- a/src/gui/ApplicationSettingsWidgetGeneral.ui +++ b/src/gui/ApplicationSettingsWidgetGeneral.ui @@ -401,6 +401,9 @@ <property name="text"> <string>Favicon download timeout:</string> </property> + <property name="buddy"> + <cstring>faviconTimeoutSpinBox</cstring> + </property> </widget> </item> <item> @@ -508,6 +511,9 @@ <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> + <property name="buddy"> + <cstring>appThemeSelection</cstring> + </property> </widget> </item> <item row="1" column="1"> @@ -540,6 +546,9 @@ <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> + <property name="buddy"> + <cstring>languageComboBox</cstring> + </property> </widget> </item> <item row="2" column="0"> @@ -562,6 +571,9 @@ <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> + <property name="buddy"> + <cstring>toolButtonStyleComboBox</cstring> + </property> </widget> </item> <item row="2" column="1"> @@ -646,14 +658,14 @@ </widget> </item> <item> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <property name="spacing"> - <number>0</number> - </property> + <layout class="QGridLayout" name="gridLayout_2"> <property name="sizeConstraint"> <enum>QLayout::SetMaximumSize</enum> </property> - <item> + <property name="spacing"> + <number>0</number> + </property> + <item row="0" column="0"> <spacer name="horizontalSpacer_3"> <property name="orientation"> <enum>Qt::Horizontal</enum> @@ -669,16 +681,61 @@ </property> </spacer> </item> - <item> - <widget class="QCheckBox" name="systrayDarkIconCheckBox"> + <item row="0" column="3"> + <widget class="QComboBox" name="trayIconAppearance"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="trayIconAppearanceLabel"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> - <string>Dark system tray icon</string> + <string>Tray icon type:</string> + </property> + <property name="buddy"> + <cstring>trayIconAppearance</cstring> </property> </widget> </item> + <item row="0" column="4"> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="2"> + <spacer name="verticalSpacer_6"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>6</width> + <height>0</height> + </size> + </property> + </spacer> + </item> </layout> </item> <item> @@ -885,6 +942,9 @@ <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> + <property name="buddy"> + <cstring>autoTypeDelaySpinBox</cstring> + </property> </widget> </item> <item row="0" column="1"> @@ -964,6 +1024,9 @@ <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> + <property name="buddy"> + <cstring>autoTypeShortcutWidget</cstring> + </property> </widget> </item> <item row="1" column="0"> @@ -974,6 +1037,9 @@ <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> + <property name="buddy"> + <cstring>autoTypeStartDelaySpinBox</cstring> + </property> </widget> </item> <item row="0" column="2"> @@ -1050,7 +1116,6 @@ <tabstop>monospaceNotesCheckBox</tabstop> <tabstop>minimizeOnCloseCheckBox</tabstop> <tabstop>systrayShowCheckBox</tabstop> - <tabstop>systrayDarkIconCheckBox</tabstop> <tabstop>systrayMinimizeToTrayCheckBox</tabstop> <tabstop>resetSettingsButton</tabstop> <tabstop>autoTypeEntryTitleMatchCheckBox</tabstop> diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 1cf4d46f0..18e8ac0dc 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -392,6 +392,7 @@ MainWindow::MainWindow() connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(databaseTabChanged(int))); connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); + connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateTrayIcon())); connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*))); connect(m_ui->tabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*))); connect(m_ui->tabWidget, SIGNAL(tabVisibilityChanged(bool)), SLOT(updateToolbarSeparatorVisibility())); @@ -1227,7 +1228,7 @@ void MainWindow::updateTrayIcon() auto* actionToggle = new QAction(tr("Toggle window"), menu); menu->addAction(actionToggle); - actionToggle->setIcon(resources()->icon("keepassxc-dark", false)); + actionToggle->setIcon(resources()->icon("keepassxc-monochrome-dark")); menu->addAction(m_ui->actionLockDatabases); @@ -1250,7 +1251,10 @@ void MainWindow::updateTrayIcon() m_trayIcon->setIcon(resources()->trayIcon()); m_trayIcon->show(); } - if (m_ui->tabWidget->hasLockableDatabases()) { + + if (m_ui->tabWidget->count() == 0) { + m_trayIcon->setIcon(resources()->trayIcon()); + } else if (m_ui->tabWidget->hasLockableDatabases()) { m_trayIcon->setIcon(resources()->trayIconUnlocked()); } else { m_trayIcon->setIcon(resources()->trayIconLocked()); @@ -1259,7 +1263,6 @@ void MainWindow::updateTrayIcon() if (m_trayIcon) { m_trayIcon->hide(); delete m_trayIcon; - m_trayIcon = nullptr; } } } diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index b901ef54c..f5d58d75e 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -136,6 +136,9 @@ private slots: void releaseContextFocusLock(); void agentEnabled(bool enabled); +private slots: + void updateTrayIcon(); + private: static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0); @@ -143,7 +146,6 @@ private: void saveWindowInformation(); bool saveLastDatabases(); - void updateTrayIcon(); bool isTrayIconEnabled() const; void customOpenUrl(QString url); diff --git a/src/gui/styles/base/BaseStyle.cpp b/src/gui/styles/base/BaseStyle.cpp index 3997cadff..3b3c60411 100644 --- a/src/gui/styles/base/BaseStyle.cpp +++ b/src/gui/styles/base/BaseStyle.cpp @@ -32,6 +32,7 @@ #include <QMainWindow> #include <QMenu> #include <QPainter> +#include <QPainterPath> #include <QPoint> #include <QPolygon> #include <QPushButton> |