diff --git a/examples/widget/widget.cpp b/examples/widget/widget.cpp index a6d80d8..52d2d43 100644 --- a/examples/widget/widget.cpp +++ b/examples/widget/widget.cpp @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -144,7 +143,7 @@ void Widget::initialize() void Widget::updateStyleSheet() { - const bool dark = Utils::shouldAppsUseDarkMode(); + const bool dark = (FramelessManager::instance()->systemTheme() == SystemTheme::Dark); const QColor clockLabelTextColor = (dark ? kDefaultWhiteColor : kDefaultBlackColor); m_clockLabel->setStyleSheet(FRAMELESSHELPER_STRING_LITERAL("background-color: transparent; color: %1;") .arg(clockLabelTextColor.name())); diff --git a/src/core/chromepalette.cpp b/src/core/chromepalette.cpp index a7cc219..ef66180 100644 --- a/src/core/chromepalette.cpp +++ b/src/core/chromepalette.cpp @@ -81,7 +81,7 @@ const ChromePalettePrivate *ChromePalettePrivate::get(const ChromePalette *q) void ChromePalettePrivate::refresh() { const bool colorized = Utils::isTitleBarColorized(); - const bool dark = Utils::shouldAppsUseDarkMode(); + const bool dark = (FramelessManager::instance()->systemTheme() == SystemTheme::Dark); titleBarActiveBackgroundColor_sys = [colorized, dark]() -> QColor { if (colorized) { #ifdef Q_OS_WINDOWS diff --git a/src/core/framelesshelper_win.cpp b/src/core/framelesshelper_win.cpp index e837227..d6abc4b 100644 --- a/src/core/framelesshelper_win.cpp +++ b/src/core/framelesshelper_win.cpp @@ -558,7 +558,7 @@ void FramelessHelperWin::addWindow(FramelessParamsConst params) // Tell DWM we may need dark theme non-client area (title bar & frame border). FramelessHelper::Core::setApplicationOSThemeAware(); if (WindowsVersionHelper::isWin10RS5OrGreater()) { - const bool dark = Utils::shouldAppsUseDarkMode(); + const bool dark = (FramelessManager::instance()->systemTheme() == SystemTheme::Dark); const auto isWidget = [params]() -> bool { const auto widget = params->getWidgetHandle(); return (widget && widget->isWidgetType()); @@ -1336,7 +1336,7 @@ bool FramelessHelperWin::nativeEventFilter(const QByteArray &eventType, void *me && (std::wcscmp(reinterpret_cast(lParam), kThemeSettingChangeEventName) == 0)) { systemThemeChanged = true; if (WindowsVersionHelper::isWin10RS5OrGreater()) { - const bool dark = Utils::shouldAppsUseDarkMode(); + const bool dark = (FramelessManager::instance()->systemTheme() == SystemTheme::Dark); const auto isWidget = [&data]() -> bool { const auto widget = data.params.getWidgetHandle(); return (widget && widget->isWidgetType()); diff --git a/src/core/framelessmanager.cpp b/src/core/framelessmanager.cpp index 3852329..438a559 100644 --- a/src/core/framelessmanager.cpp +++ b/src/core/framelessmanager.cpp @@ -32,7 +32,6 @@ # include "framelesshelper_win.h" # include "winverhelper_p.h" #endif -#include #include #include #include @@ -62,7 +61,6 @@ using namespace Global; struct FramelessManagerHelper { - QMutex mutex; QList windowIds = {}; }; @@ -170,28 +168,23 @@ SystemTheme FramelessManagerPrivate::systemTheme() const { // The user's choice has top priority. if (isThemeOverrided()) { - const QMutexLocker locker(&g_helper()->mutex); return m_overrideTheme.value(); } - const QMutexLocker locker(&g_helper()->mutex); return m_systemTheme; } QColor FramelessManagerPrivate::systemAccentColor() const { - const QMutexLocker locker(&g_helper()->mutex); return m_accentColor; } QString FramelessManagerPrivate::wallpaper() const { - const QMutexLocker locker(&g_helper()->mutex); return m_wallpaper; } WallpaperAspectStyle FramelessManagerPrivate::wallpaperAspectStyle() const { - const QMutexLocker locker(&g_helper()->mutex); return m_wallpaperAspectStyle; } @@ -202,13 +195,10 @@ void FramelessManagerPrivate::addWindow(FramelessParamsConst params) return; } const WId windowId = params->getWindowId(); - g_helper()->mutex.lock(); if (g_helper()->windowIds.contains(windowId)) { - g_helper()->mutex.unlock(); return; } g_helper()->windowIds.append(windowId); - g_helper()->mutex.unlock(); static const bool pureQt = usePureQtImplementation(); if (pureQt) { FramelessHelperQt::addWindow(params); @@ -227,13 +217,10 @@ void FramelessManagerPrivate::removeWindow(const WId windowId) if (!windowId) { return; } - g_helper()->mutex.lock(); if (!g_helper()->windowIds.contains(windowId)) { - g_helper()->mutex.unlock(); return; } g_helper()->windowIds.removeAll(windowId); - g_helper()->mutex.unlock(); static const bool pureQt = usePureQtImplementation(); if (pureQt) { FramelessHelperQt::removeWindow(windowId); @@ -248,7 +235,6 @@ void FramelessManagerPrivate::removeWindow(const WId windowId) void FramelessManagerPrivate::notifySystemThemeHasChangedOrNot() { - const QMutexLocker locker(&g_helper()->mutex); const SystemTheme currentSystemTheme = Utils::getSystemTheme(); #ifdef Q_OS_WINDOWS const DwmColorizationArea currentColorizationArea = Utils::getDwmColorizationArea(); @@ -276,7 +262,7 @@ void FramelessManagerPrivate::notifySystemThemeHasChangedOrNot() } #endif // Don't emit the signal if the user has overrided the global theme. - if (notify && (m_overrideTheme.value_or(SystemTheme::Unknown) == SystemTheme::Unknown)) { + if (notify && !isThemeOverrided()) { Q_Q(FramelessManager); Q_EMIT q->systemThemeChanged(); DEBUG.nospace() << "System theme changed. Current theme: " << m_systemTheme @@ -290,7 +276,6 @@ void FramelessManagerPrivate::notifySystemThemeHasChangedOrNot() void FramelessManagerPrivate::notifyWallpaperHasChangedOrNot() { - const QMutexLocker locker(&g_helper()->mutex); const QString currentWallpaper = Utils::getWallpaperFilePath(); const WallpaperAspectStyle currentWallpaperAspectStyle = Utils::getWallpaperAspectStyle(); bool notify = false; @@ -324,7 +309,6 @@ bool FramelessManagerPrivate::usePureQtImplementation() void FramelessManagerPrivate::setOverrideTheme(const SystemTheme theme) { - const QMutexLocker locker(&g_helper()->mutex); if (theme == SystemTheme::Unknown) { m_overrideTheme = std::nullopt; } else { @@ -336,13 +320,11 @@ void FramelessManagerPrivate::setOverrideTheme(const SystemTheme theme) bool FramelessManagerPrivate::isThemeOverrided() const { - const QMutexLocker locker(&g_helper()->mutex); return (m_overrideTheme.value_or(SystemTheme::Unknown) != SystemTheme::Unknown); } void FramelessManagerPrivate::initialize() { - const QMutexLocker locker(&g_helper()->mutex); m_systemTheme = Utils::getSystemTheme(); #ifdef Q_OS_WINDOWS m_colorizationArea = Utils::getDwmColorizationArea(); diff --git a/src/core/micamaterial.cpp b/src/core/micamaterial.cpp index 5494eb0..a6e49ea 100644 --- a/src/core/micamaterial.cpp +++ b/src/core/micamaterial.cpp @@ -585,7 +585,7 @@ void MicaMaterialPrivate::updateMaterialBrush() static const QImage noiseTexture = QImage(kNoiseImageFilePath); #endif // FRAMELESSHELPER_CORE_NO_BUNDLE_RESOURCE QImage micaTexture = QImage(QSize(64, 64), QImage::Format_ARGB32_Premultiplied); - QColor fillColor = (Utils::shouldAppsUseDarkMode() ? kDefaultSystemDarkColor : kDefaultSystemLightColor2); + QColor fillColor = ((FramelessManager::instance()->systemTheme() == SystemTheme::Dark) ? kDefaultSystemDarkColor : kDefaultSystemLightColor2); fillColor.setAlphaF(0.9f); micaTexture.fill(fillColor); QPainter painter(&micaTexture); @@ -673,7 +673,7 @@ void MicaMaterialPrivate::prepareGraphicsResources() QColor MicaMaterialPrivate::systemFallbackColor() { - return (Utils::shouldAppsUseDarkMode() ? kDefaultFallbackColorDark : kDefaultFallbackColorLight); + return ((FramelessManager::instance()->systemTheme() == SystemTheme::Dark) ? kDefaultFallbackColorDark : kDefaultFallbackColorLight); } MicaMaterial::MicaMaterial(QObject *parent)