SineStriker
2023-12-27 4f9f75cb4b70f3b76cee57d0f98b59f8475bba3b
src/core/style/styleagent_win.cpp
@@ -12,6 +12,23 @@
    using StyleAgentSet = QSet<StyleAgentPrivate *>;
    Q_GLOBAL_STATIC(StyleAgentSet, g_styleAgentSet)
    static StyleAgent::SystemTheme getSystemTheme() {
        if (isHighContrastModeEnabled()) {
            return StyleAgent::HighContrast;
        } else if (isDarkThemeActive()) {
            return StyleAgent::Dark;
        } else {
            return StyleAgent::Light;
        }
    }
    static void notifyAllStyleAgents() {
        auto theme = getSystemTheme();
        for (auto &&ap : std::as_const(*g_styleAgentSet())) {
            ap->notifyThemeChanged(theme);
        }
    }
    class SystemSettingEventFilter : public AppNativeEventFilter {
    public:
        bool nativeEventFilter(const QByteArray &eventType, void *message,
@@ -26,15 +43,13 @@
                case WM_THEMECHANGED:
                case WM_SYSCOLORCHANGE:
                case WM_DWMCOLORIZATIONCOLORCHANGED: {
                    // TODO: walk through `g_styleAgentSet`
                    notifyAllStyleAgents();
                    break;
                }
                case WM_SETTINGCHANGE: {
                    if (!msg->wParam && msg->lParam &&
                        std::wcscmp(reinterpret_cast<LPCWSTR>(msg->lParam), L"ImmersiveColorSet") ==
                            0) {
                        // TODO: walk through `g_styleAgentSet`
                    if (isImmersiveColorSetChange(msg->wParam, msg->lParam)) {
                        notifyAllStyleAgents();
                    }
                    break;
                }
@@ -66,10 +81,10 @@
    SystemSettingEventFilter *SystemSettingEventFilter::instance = nullptr;
    void StyleAgentPrivate::setupSystemThemeHook() {
        systemTheme = getSystemTheme();
        g_styleAgentSet->insert(this);
        SystemSettingEventFilter::install();
        // Initialize `systemTheme` variable
    }
    void StyleAgentPrivate::removeSystemThemeHook() {