fixed update icon linux

This commit is contained in:
dranik
2026-06-05 12:12:12 +03:00
parent e61b1dfa11
commit a4edb7279d
2 changed files with 12 additions and 5 deletions
@@ -32,12 +32,15 @@ void LinuxTrayIconBackend::show()
void LinuxTrayIconBackend::applyVisual(const TrayIconVisual &visual) void LinuxTrayIconBackend::applyVisual(const TrayIconVisual &visual)
{ {
const QIcon icon = buildTrayIcon(visual.connectionState, visual.darkTheme); if (m_hasLastVisual && visual.connectionState == m_lastState && visual.darkTheme == m_lastDarkTheme) {
return;
// Some tray implementations cache the first icon; clear before applying an update.
if (m_trayIcon.isVisible()) {
m_trayIcon.setIcon(QIcon());
} }
m_lastState = visual.connectionState;
m_lastDarkTheme = visual.darkTheme;
m_hasLastVisual = true;
const QIcon icon = buildTrayIcon(visual.connectionState, visual.darkTheme);
m_trayIcon.setIcon(icon); m_trayIcon.setIcon(icon);
} }
@@ -5,6 +5,7 @@
#include <QColor> #include <QColor>
#include <QIcon> #include <QIcon>
#include <QString>
#include <QSystemTrayIcon> #include <QSystemTrayIcon>
class LinuxTrayIconBackend final : public TrayIconBackend class LinuxTrayIconBackend final : public TrayIconBackend
@@ -24,6 +25,9 @@ private:
QIcon buildTrayIcon(Vpn::ConnectionState state, bool darkTheme) const; QIcon buildTrayIcon(Vpn::ConnectionState state, bool darkTheme) const;
QSystemTrayIcon m_trayIcon; QSystemTrayIcon m_trayIcon;
Vpn::ConnectionState m_lastState = Vpn::ConnectionState::Unknown;
bool m_lastDarkTheme = false;
bool m_hasLastVisual = false;
}; };
#endif // LINUXTRAYICONBACKEND_H #endif // LINUXTRAYICONBACKEND_H