From 685989fa250904fabe1da3d391911c77f5e09e42 Mon Sep 17 00:00:00 2001 From: deepend Date: Wed, 25 Feb 2026 22:42:43 -0700 Subject: [PATCH] =?UTF-8?q?Updated=20fe=5Fsystem=5Fprefers=5Fdark()=20to?= =?UTF-8?q?=20remove=20the=20old=20!has=5Ftheme=5Fname=20gate=20and=20alwa?= =?UTF-8?q?ys=20read=20gtk-application-prefer-dark-theme=20whenever=20that?= =?UTF-8?q?=20property=20exists.=20Theme-name=20matching=20is=20still=20ke?= =?UTF-8?q?pt=20as=20an=20additional=20signal.=20Added=20deterministic=20d?= =?UTF-8?q?ark-mode=20precedence=20by=20combining=20explicit=20signals=20(?= =?UTF-8?q?theme=5Fname=5Fprefers=5Fdark=20||=20property=5Fprefers=5Fdark)?= =?UTF-8?q?,=20while=20preserving=20Windows=20system=20preference=20as=20a?= =?UTF-8?q?nother=20dark-enabling=20signal=20when=20available.=20This=20en?= =?UTF-8?q?sures=20=E2=80=9Cdark=20if=20any=20explicit=20dark=20signal=20i?= =?UTF-8?q?s=20true.=E2=80=9D=20Re-checked=20the=20relevant=20callers=20(f?= =?UTF-8?q?e=5Fauto=5Fdark=5Fmode=5Fchanged()=20and=20fe=5Fapply=5Ftheme?= =?UTF-8?q?=5Ffor=5Fmode()):=20they=20consume=20fe=5Fsystem=5Fprefers=5Fda?= =?UTF-8?q?rk()=20output=20and=20do=20not=20depend=20on=20the=20removed=20?= =?UTF-8?q?!has=5Ftheme=5Fname=20conditional=20behavior.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/fe-gtk/fe-gtk.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/fe-gtk/fe-gtk.c b/src/fe-gtk/fe-gtk.c index 2430c683..ee5285f8 100644 --- a/src/fe-gtk/fe-gtk.c +++ b/src/fe-gtk/fe-gtk.c @@ -541,11 +541,13 @@ static gboolean fe_system_prefers_dark (void) { GtkSettings *settings = gtk_settings_get_default (); + gboolean theme_name_prefers_dark = FALSE; + gboolean property_prefers_dark = FALSE; gboolean prefer_dark = FALSE; - gboolean has_theme_name = FALSE; char *theme_name = NULL; #ifdef G_OS_WIN32 gboolean have_win_pref = FALSE; + gboolean win_prefers_dark = FALSE; if (fe_win32_high_contrast_is_enabled ()) return FALSE; @@ -558,30 +560,29 @@ fe_system_prefers_dark (void) if (theme_name) { char *lower = g_ascii_strdown (theme_name, -1); - has_theme_name = TRUE; if (g_str_has_suffix (lower, "-dark") || g_strrstr (lower, "dark")) - prefer_dark = TRUE; + theme_name_prefers_dark = TRUE; g_free (lower); g_free (theme_name); + } - if (prefer_dark) - return TRUE; + if (g_object_class_find_property (G_OBJECT_GET_CLASS (settings), + "gtk-application-prefer-dark-theme")) + { + /* Even if we last wrote this property, the toolkit or desktop can update + * it later, so AUTO mode should keep reading it as a signal. */ + g_object_get (settings, "gtk-application-prefer-dark-theme", &property_prefers_dark, NULL); } #ifdef G_OS_WIN32 - have_win_pref = fe_win32_try_get_system_dark (&prefer_dark); - if (have_win_pref) - return prefer_dark; + have_win_pref = fe_win32_try_get_system_dark (&win_prefers_dark); #endif - if (!has_theme_name - && g_object_class_find_property (G_OBJECT_GET_CLASS (settings), - "gtk-application-prefer-dark-theme")) - { - /* Even if we last wrote this property, the toolkit or desktop can update - * it later, so AUTO mode should keep reading it as a fallback signal. */ - g_object_get (settings, "gtk-application-prefer-dark-theme", &prefer_dark, NULL); - } + /* Deterministic precedence: any explicit dark signal wins. */ + prefer_dark = theme_name_prefers_dark || property_prefers_dark; +#ifdef G_OS_WIN32 + prefer_dark = prefer_dark || (have_win_pref && win_prefers_dark); +#endif return prefer_dark; }