[gnome-text-editor] app: add .dark css class to windows in dark mode



commit ba7d16db211bbfcc9bd183840dca550217c4b749
Author: Christian Hergert <chergert redhat com>
Date:   Fri Nov 19 15:10:18 2021 -0800

    app: add .dark css class to windows in dark mode
    
    If the system style scheme is dark, then add the .dark css class to the
    window so that we can use it in CSS to adjust styling.

 src/editor-application.c | 46 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)
---
diff --git a/src/editor-application.c b/src/editor-application.c
index 25ae819..5b66aa4 100644
--- a/src/editor-application.c
+++ b/src/editor-application.c
@@ -141,6 +141,40 @@ style_variant_to_color_scheme (GValue   *value,
   return TRUE;
 }
 
+static void
+update_dark (GtkWindow *window)
+{
+  AdwStyleManager *style_manager;
+
+  g_assert (GTK_IS_WINDOW (window));
+
+  style_manager = adw_style_manager_get_default ();
+
+  if (adw_style_manager_get_dark (style_manager))
+    gtk_widget_add_css_class (GTK_WIDGET (window), "dark");
+  else
+    gtk_widget_remove_css_class (GTK_WIDGET (window), "dark");
+}
+
+static void
+on_style_manager_notify_dark (EditorApplication *self,
+                              GParamSpec        *pspec,
+                              AdwStyleManager   *style_manager)
+{
+  g_assert (EDITOR_IS_APPLICATION (self));
+  g_assert (ADW_IS_STYLE_MANAGER (style_manager));
+
+  for (const GList *iter = gtk_application_get_windows (GTK_APPLICATION (self));
+       iter != NULL;
+       iter = iter->next)
+    {
+      GtkWindow *window = iter->data;
+
+      if (EDITOR_IS_WINDOW (window))
+        update_dark (window);
+    }
+}
+
 static void
 editor_application_startup (GApplication *application)
 {
@@ -163,6 +197,12 @@ editor_application_startup (GApplication *application)
 
   style_manager = adw_style_manager_get_default ();
 
+  g_signal_connect_object (style_manager,
+                           "notify::dark",
+                           G_CALLBACK (on_style_manager_notify_dark),
+                           self,
+                           G_CONNECT_SWAPPED);
+
   g_settings_bind (self->settings, "auto-save-delay",
                    self->session, "auto-save-delay",
                    G_SETTINGS_BIND_GET);
@@ -229,9 +269,13 @@ editor_application_window_added (GtkApplication *application,
   g_assert (EDITOR_IS_APPLICATION (application));
   g_assert (GTK_IS_WINDOW (window));
 
+  if (EDITOR_IS_WINDOW (window))
+    {
+      update_dark (window);
 #if DEVELOPMENT_BUILD
-  gtk_widget_add_css_class (GTK_WIDGET (window), "devel");
+      gtk_widget_add_css_class (GTK_WIDGET (window), "devel");
 #endif
+    }
 
   GTK_APPLICATION_CLASS (editor_application_parent_class)->window_added (application, window);
 }


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