From e2d5da815165b32a655a17a5e2baf87feb96b888 Mon Sep 17 00:00:00 2001
From: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
Date: Wed, 16 Nov 2022 16:02:59 -0300
Subject: [PATCH] windows: watch for system theme change

Requires Windows SDK version 10.0.18362.0 and Windows Runtime
10.0.10240.0.

GitLab: #723
Change-Id: I166c236bf24419b4abfe323f88e470dd07afbd4f
---
 src/app/utilsadapter.cpp |  6 ++++++
 src/app/utilsadapter.h   | 13 +++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/src/app/utilsadapter.cpp b/src/app/utilsadapter.cpp
index 1e34bd33d..cb1fdd83c 100644
--- a/src/app/utilsadapter.cpp
+++ b/src/app/utilsadapter.cpp
@@ -697,6 +697,12 @@ UtilsAdapter::isSystemThemeDark()
     return false;
 #else
 #if defined(WIN32) && __has_include(<winrt/Windows.Foundation.h>)
+#if WATCHSYSTEMTHEME
+    if (!settings) {
+        settings = UISettings();
+        settings.ColorValuesChanged([this](auto&&...) { Q_EMIT appThemeChanged(); });
+    }
+#endif
     return readAppsUseLightThemeRegistry(true);
 #else
     qWarning("System theme detection is not implemented or is not supported");
diff --git a/src/app/utilsadapter.h b/src/app/utilsadapter.h
index 89fad2513..c0a520e5c 100644
--- a/src/app/utilsadapter.h
+++ b/src/app/utilsadapter.h
@@ -35,6 +35,15 @@
 
 #if defined(WIN32) && __has_include(<winrt/Windows.Foundation.h>)
 #include <winrt/Windows.Foundation.h>
+
+#define WATCHSYSTEMTHEME \
+    __has_include(<winrt/Windows.UI.ViewManagement.h>)
+
+#if WATCHSYSTEMTHEME
+#include <winrt/Windows.UI.ViewManagement.h>
+#endif
+
+using winrt::Windows::UI::ViewManagement::UISettings;
 #endif
 
 class QClipboard;
@@ -151,5 +160,9 @@ private:
     GSettings* settings {nullptr};
     GSettingsSchema* schema {nullptr};
 #endif
+
+#if WATCHSYSTEMTHEME
+    UISettings settings = NULL;
+#endif
 };
 Q_DECLARE_METATYPE(UtilsAdapter*)
-- 
GitLab