[libadwaita/wip/exalm/dark] style-manager: Set gtk-application-prefer-dark-theme for dark




commit 94d9254f41c1b965ddbb8c39ed2bf9178f4df524
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Tue Nov 23 21:42:47 2021 +0500

    style-manager: Set gtk-application-prefer-dark-theme for dark
    
    There are a few places where completely decoupling this fails, e.g. legacy
    X11 decorations. More importantly, libraries like WebKit need a nice
    non-libadwaita-specific way to see if te app is currently dark.

 src/adw-style-manager.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/src/adw-style-manager.c b/src/adw-style-manager.c
index ff9e7a76..e66d7d81 100644
--- a/src/adw-style-manager.c
+++ b/src/adw-style-manager.c
@@ -59,6 +59,7 @@ struct _AdwStyleManager
 
   AdwColorScheme color_scheme;
   gboolean dark;
+  gboolean setting_dark;
 
   guint animation_timeout_id;
 };
@@ -81,8 +82,11 @@ static GHashTable *display_style_managers = NULL;
 static AdwStyleManager *default_instance = NULL;
 
 static void
-warn_prefer_dark_theme (void)
+warn_prefer_dark_theme (AdwStyleManager *self)
 {
+  if (self->setting_dark)
+    return;
+
   g_warning ("Using GtkSettings:gtk-application-prefer-dark-theme with "
              "libadwaita is unsupported. Please use "
              "AdwStyleManager:color-scheme instead.");
@@ -148,10 +152,15 @@ update_stylesheet (AdwStyleManager *self)
                   NULL);
   }
 
+  self->setting_dark = TRUE;
+
   g_object_set (gtk_settings,
                 "gtk-enable-animations", FALSE,
+                "gtk-application-prefer-dark-theme", self->dark,
                 NULL);
 
+  self->setting_dark = FALSE;
+
   if (self->provider) {
     if (adw_settings_get_high_contrast (self->settings))
       gtk_css_provider_load_from_resource (self->provider,
@@ -246,13 +255,13 @@ adw_style_manager_constructed (GObject *object)
                   NULL);
 
     if (prefer_dark_theme)
-      warn_prefer_dark_theme ();
+      warn_prefer_dark_theme (self);
 
     g_signal_connect_object (settings,
                              "notify::gtk-application-prefer-dark-theme",
                              G_CALLBACK (warn_prefer_dark_theme),
                              self,
-                             0);
+                             G_CONNECT_SWAPPED);
 
     if (!g_getenv ("GTK_THEME")) {
       g_object_set (gtk_settings_get_for_display (self->display),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]