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
diff options
context:
space:
mode:
authorJanek Bevendorff <janek@jbev.net>2021-01-31 22:19:01 +0300
committerJonathan White <support@dmapps.us>2021-01-31 22:29:49 +0300
commit2889341acdafbe919d56bca76e8b256690feed94 (patch)
treeeda1c65245bdc526c4df4f96c87ce4db3cbaca46
parent874e9e10751d5d6cdf6d957f4d4eb60b70c86f2a (diff)
Fix on/off icons not being redrawn on theme change (backport)
-rw-r--r--src/core/Resources.cpp32
-rw-r--r--src/core/Resources.h2
-rw-r--r--src/gui/EntryPreviewWidget.cpp9
-rw-r--r--src/gui/PasswordEdit.cpp4
-rw-r--r--src/gui/osutils/winutils/WinUtils.cpp15
5 files changed, 23 insertions, 39 deletions
diff --git a/src/core/Resources.cpp b/src/core/Resources.cpp
index d602698d7..df89a4f98 100644
--- a/src/core/Resources.cpp
+++ b/src/core/Resources.cpp
@@ -180,7 +180,12 @@ AdaptiveIconEngine::AdaptiveIconEngine(QIcon baseIcon)
void AdaptiveIconEngine::paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state)
{
// Temporary image canvas to ensure that the background is transparent and alpha blending works.
- QImage img(rect.size(), QImage::Format_ARGB32_Premultiplied);
+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
+ auto scale = painter->device()->devicePixelRatioF();
+#else
+ auto scale = painter->device()->devicePixelRatio();
+#endif
+ QImage img(rect.size() * scale, QImage::Format_ARGB32_Premultiplied);
img.fill(0);
QPainter p(&img);
@@ -251,30 +256,9 @@ QIcon Resources::icon(const QString& name, bool recolor, const QColor& overrideC
return icon;
}
-QIcon Resources::onOffIcon(const QString& name, bool recolor)
+QIcon Resources::onOffIcon(const QString& name, bool on, bool recolor)
{
- QString cacheName = "onoff/" + name;
-
- QIcon icon = m_iconCache.value(cacheName);
-
- if (!icon.isNull()) {
- return icon;
- }
-
- const QSize size(48, 48);
- QIcon on = Resources::icon(name + "-on", recolor);
- icon.addPixmap(on.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::On);
- icon.addPixmap(on.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::On);
- icon.addPixmap(on.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::On);
-
- QIcon off = Resources::icon(name + "-off", recolor);
- icon.addPixmap(off.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::Off);
- icon.addPixmap(off.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::Off);
- icon.addPixmap(off.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::Off);
-
- m_iconCache.insert(cacheName, icon);
-
- return icon;
+ return icon(name + (on ? "-on" : "-off"), recolor);
}
Resources::Resources()
diff --git a/src/core/Resources.h b/src/core/Resources.h
index 6cadb5996..1b9c9b91c 100644
--- a/src/core/Resources.h
+++ b/src/core/Resources.h
@@ -36,7 +36,7 @@ public:
QIcon trayIconUnlocked();
QString trayIconAppearance() const;
QIcon icon(const QString& name, bool recolor = true, const QColor& overrideColor = QColor::Invalid);
- QIcon onOffIcon(const QString& name, bool recolor = true);
+ QIcon onOffIcon(const QString& name, bool on, bool recolor = true);
static Resources* instance();
diff --git a/src/gui/EntryPreviewWidget.cpp b/src/gui/EntryPreviewWidget.cpp
index 45a71a348..e240f7ae4 100644
--- a/src/gui/EntryPreviewWidget.cpp
+++ b/src/gui/EntryPreviewWidget.cpp
@@ -50,9 +50,9 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent)
// Entry
m_ui->entryTotpButton->setIcon(resources()->icon("chronometer"));
m_ui->entryCloseButton->setIcon(resources()->icon("dialog-close"));
- m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show"));
- m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show"));
- m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show"));
+ m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show", true));
+ m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show", true));
+ m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show", true));
m_ui->entryAttachmentsWidget->setReadOnly(true);
m_ui->entryAttachmentsWidget->setButtonsVisible(false);
@@ -199,16 +199,19 @@ void EntryPreviewWidget::setPasswordVisible(bool state)
} else {
m_ui->entryPasswordLabel->setText(QString("\u25cf").repeated(6));
}
+ m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show", state));
}
void EntryPreviewWidget::setEntryNotesVisible(bool state)
{
setNotesVisible(m_ui->entryNotesTextEdit, m_currentEntry->notes(), state);
+ m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show", state));
}
void EntryPreviewWidget::setGroupNotesVisible(bool state)
{
setNotesVisible(m_ui->groupNotesTextEdit, m_currentGroup->notes(), state);
+ m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show", state));
}
void EntryPreviewWidget::setNotesVisible(QTextEdit* notesWidget, const QString& notes, bool state)
diff --git a/src/gui/PasswordEdit.cpp b/src/gui/PasswordEdit.cpp
index b43f5c623..73f8dd0f9 100644
--- a/src/gui/PasswordEdit.cpp
+++ b/src/gui/PasswordEdit.cpp
@@ -58,7 +58,7 @@ PasswordEdit::PasswordEdit(QWidget* parent)
#endif
m_toggleVisibleAction = new QAction(
- resources()->icon("password-show-off"),
+ resources()->onOffIcon("password-show", false),
tr("Toggle Password (%1)").arg(QKeySequence(modifier + Qt::Key_H).toString(QKeySequence::NativeText)),
nullptr);
m_toggleVisibleAction->setCheckable(true);
@@ -113,7 +113,7 @@ void PasswordEdit::enablePasswordGenerator()
void PasswordEdit::setShowPassword(bool show)
{
setEchoMode(show ? QLineEdit::Normal : QLineEdit::Password);
- m_toggleVisibleAction->setIcon(resources()->icon(show ? "password-show-on" : "password-show-off"));
+ m_toggleVisibleAction->setIcon(resources()->onOffIcon("password-show", show));
m_toggleVisibleAction->setChecked(show);
if (m_repeatPasswordEdit) {
diff --git a/src/gui/osutils/winutils/WinUtils.cpp b/src/gui/osutils/winutils/WinUtils.cpp
index 9a08ef01f..04216c54f 100644
--- a/src/gui/osutils/winutils/WinUtils.cpp
+++ b/src/gui/osutils/winutils/WinUtils.cpp
@@ -69,19 +69,16 @@ bool WinUtils::DWMEventFilter::nativeEventFilter(const QByteArray& eventType, vo
}
switch (msg->message) {
case WM_SETTINGCHANGE:
- if (m_darkAppThemeActive != isDarkMode()) {
- m_darkAppThemeActive = !m_darkAppThemeActive;
- emit interfaceThemeChanged();
+ if (m_instance->m_darkAppThemeActive != m_instance->isDarkMode()) {
+ m_instance->m_darkAppThemeActive = !m_instance->m_darkAppThemeActive;
+ emit m_instance->interfaceThemeChanged();
}
- if (m_darkSystemThemeActive != isStatusBarDark()) {
- m_darkSystemThemeActive = !m_darkSystemThemeActive;
- emit statusbarThemeChanged();
+ if (m_instance->m_darkSystemThemeActive != m_instance->isStatusBarDark()) {
+ m_instance->m_darkSystemThemeActive = !m_instance->m_darkSystemThemeActive;
+ emit m_instance->statusbarThemeChanged();
}
break;
- case WM_HOTKEY:
- triggerGlobalShortcut(msg->wParam);
- break;
}
return false;