Add option for monochrome tray icon
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -76,7 +76,7 @@ public:
|
||||
GUI_HidePreviewPanel,
|
||||
GUI_ToolButtonStyle,
|
||||
GUI_ShowTrayIcon,
|
||||
GUI_DarkTrayIcon,
|
||||
GUI_TrayIconAppearance,
|
||||
GUI_MinimizeToTray,
|
||||
GUI_MinimizeOnStartup,
|
||||
GUI_MinimizeOnClose,
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -40,9 +40,9 @@ public:
|
||||
static Resources* instance();
|
||||
|
||||
private:
|
||||
QString getTrayIconAppearance() const;
|
||||
Resources();
|
||||
bool testResourceDir(const QString& dir);
|
||||
bool useDarkIcon();
|
||||
|
||||
static Resources* m_instance;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <QMainWindow>
|
||||
#include <QMenu>
|
||||
#include <QPainter>
|
||||
#include <QPainterPath>
|
||||
#include <QPoint>
|
||||
#include <QPolygon>
|
||||
#include <QPushButton>
|
||||
|
||||
Reference in New Issue
Block a user