mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-12-04 15:39:34 +01:00
Fix on/off icons not being redrawn on theme change (backport)
This commit is contained in:
committed by
Jonathan White
parent
874e9e1075
commit
2889341acd
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user