From a4edb7279dbad9d4c6f9574210171a8446096a41 Mon Sep 17 00:00:00 2001 From: dranik Date: Fri, 5 Jun 2026 12:12:12 +0300 Subject: [PATCH] fixed update icon linux --- client/platforms/linux/linuxtrayiconbackend.cpp | 13 ++++++++----- client/platforms/linux/linuxtrayiconbackend.h | 4 ++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/client/platforms/linux/linuxtrayiconbackend.cpp b/client/platforms/linux/linuxtrayiconbackend.cpp index ec9e3b104..3e902dd6f 100644 --- a/client/platforms/linux/linuxtrayiconbackend.cpp +++ b/client/platforms/linux/linuxtrayiconbackend.cpp @@ -32,12 +32,15 @@ void LinuxTrayIconBackend::show() void LinuxTrayIconBackend::applyVisual(const TrayIconVisual &visual) { - const QIcon icon = buildTrayIcon(visual.connectionState, visual.darkTheme); - - // Some tray implementations cache the first icon; clear before applying an update. - if (m_trayIcon.isVisible()) { - m_trayIcon.setIcon(QIcon()); + if (m_hasLastVisual && visual.connectionState == m_lastState && visual.darkTheme == m_lastDarkTheme) { + return; } + + m_lastState = visual.connectionState; + m_lastDarkTheme = visual.darkTheme; + m_hasLastVisual = true; + + const QIcon icon = buildTrayIcon(visual.connectionState, visual.darkTheme); m_trayIcon.setIcon(icon); } diff --git a/client/platforms/linux/linuxtrayiconbackend.h b/client/platforms/linux/linuxtrayiconbackend.h index e6672ca7e..3907d38e5 100644 --- a/client/platforms/linux/linuxtrayiconbackend.h +++ b/client/platforms/linux/linuxtrayiconbackend.h @@ -5,6 +5,7 @@ #include #include +#include #include class LinuxTrayIconBackend final : public TrayIconBackend @@ -24,6 +25,9 @@ private: QIcon buildTrayIcon(Vpn::ConnectionState state, bool darkTheme) const; QSystemTrayIcon m_trayIcon; + Vpn::ConnectionState m_lastState = Vpn::ConnectionState::Unknown; + bool m_lastDarkTheme = false; + bool m_hasLastVisual = false; }; #endif // LINUXTRAYICONBACKEND_H