From b489262f512e0ccebd26e867b963c7fcae742b53 Mon Sep 17 00:00:00 2001 From: Vladimir Golovnev Date: Thu, 21 Mar 2024 11:14:41 +0300 Subject: [PATCH] Add workaround to refresh styled controls once color scheme is changed PR #20569. --- src/gui/uithememanager.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/gui/uithememanager.cpp b/src/gui/uithememanager.cpp index aa49badd5..c98f57ca6 100644 --- a/src/gui/uithememanager.cpp +++ b/src/gui/uithememanager.cpp @@ -1,6 +1,6 @@ /* * Bittorrent Client using Qt and libtorrent. - * Copyright (C) 2023 Vladimir Golovnev + * Copyright (C) 2023-2024 Vladimir Golovnev * Copyright (C) 2019, 2021 Prince Gupta * * This program is free software; you can redistribute it and/or @@ -33,6 +33,8 @@ #include #include #include +#include +#include #include "base/global.h" #include "base/logger.h" @@ -44,9 +46,16 @@ namespace { bool isDarkTheme() { - const QPalette palette = qApp->palette(); - const QColor &color = palette.color(QPalette::Active, QPalette::Base); - return (color.lightness() < 127); + switch (qApp->styleHints()->colorScheme()) + { + case Qt::ColorScheme::Dark: + return true; + case Qt::ColorScheme::Light: + return false; + default: + // fallback to custom method + return (qApp->palette().color(QPalette::Active, QPalette::Base).lightness() < 127); + } } } @@ -70,6 +79,12 @@ UIThemeManager::UIThemeManager() , m_useSystemIcons {Preferences::instance()->useSystemIcons()} #endif { + connect(QApplication::styleHints(), &QStyleHints::colorSchemeChanged, this, [] + { + // workaround to refresh styled controls once color scheme is changed + QApplication::setStyle(QApplication::style()->name()); + }); + if (m_useCustomTheme) { const Path themePath = Preferences::instance()->customUIThemePath();