Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJanek Bevendorff <janek@jbev.net>2020-05-30 23:46:06 +0300
committerJanek Bevendorff <janek@jbev.net>2020-05-31 01:26:14 +0300
commit4f75432fc6f5a10323641891dd64e9413634a5b4 (patch)
tree3fbf6436b6b1cce1c70038e3b7e6034af91b6031 /src
parent9d2e066acae0cd7bd3447bf3c5fa8ff0c0c4f073 (diff)
Add option for monochrome tray icon
Diffstat (limited to 'src')
-rw-r--r--src/core/Config.cpp5
-rw-r--r--src/core/Config.h2
-rw-r--r--src/core/Resources.cpp39
-rw-r--r--src/core/Resources.h2
-rw-r--r--src/gui/ApplicationSettingsWidget.cpp15
-rw-r--r--src/gui/ApplicationSettingsWidgetGeneral.ui83
-rw-r--r--src/gui/MainWindow.cpp9
-rw-r--r--src/gui/MainWindow.h4
-rw-r--r--src/gui/styles/base/BaseStyle.cpp1
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>