[epiphany/wip/exalm/dark: 3/3] Follow the system dark preference for reader mode




commit 17670187783b7563d97aead9ff00699892fc0565
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Sun Nov 21 18:13:11 2021 +0500

    Follow the system dark preference for reader mode
    
    When it's available, hide the reader color scheme preference and follow the
    system.
    
    Change the setting description to reflect this.
    
    Fixes https://gitlab.gnome.org/GNOME/epiphany/-/issues/1546
    
    Part-of: <https://gitlab.gnome.org/GNOME/epiphany/-/merge_requests/1029>

 data/org.gnome.epiphany.gschema.xml     |  2 +-
 embed/ephy-reader-handler.c             | 13 ++++++++++---
 embed/ephy-web-view.c                   | 33 ++++++++++++++++++++++++---------
 src/preferences/prefs-appearance-page.c |  4 ++++
 4 files changed, 39 insertions(+), 13 deletions(-)
---
diff --git a/data/org.gnome.epiphany.gschema.xml b/data/org.gnome.epiphany.gschema.xml
index 3e6cd82c3..9f2c32dcf 100644
--- a/data/org.gnome.epiphany.gschema.xml
+++ b/data/org.gnome.epiphany.gschema.xml
@@ -103,7 +103,7 @@
                <key name="color-scheme" enum="org.gnome.Epiphany.EphyPrefsReaderColorScheme">
                        <default>'light'</default>
                        <summary>Reader mode color scheme.</summary>
-                       <description>Selects the style of colors for articles displayed in reader mode. 
Possible values are “light” (dark text on light background) and “dark” (light text on dark 
background).</description>
+                       <description>Selects the style of colors for articles displayed in reader mode. 
Possible values are “light” (dark text on light background) and “dark” (light text on dark background). This 
setting is ignored on systems that provide a system-wide dark style preference, such as GNOME 42 and 
newer.</description>
                </key>
        </schema>
        <schema id="org.gnome.Epiphany.web">
diff --git a/embed/ephy-reader-handler.c b/embed/ephy-reader-handler.c
index 707497bdb..fb53436e6 100644
--- a/embed/ephy-reader-handler.c
+++ b/embed/ephy-reader-handler.c
@@ -163,6 +163,7 @@ readability_js_finish_cb (GObject      *object,
   const gchar *title;
   const gchar *font_style;
   const gchar *color_scheme;
+  HdyStyleManager *style_manager;
 
   js_result = webkit_web_view_run_javascript_finish (web_view, result, &error);
   if (!js_result) {
@@ -181,9 +182,15 @@ readability_js_finish_cb (GObject      *object,
   font_style = enum_nick (EPHY_TYPE_PREFS_READER_FONT_STYLE,
                           g_settings_get_enum (EPHY_SETTINGS_READER,
                                                EPHY_PREFS_READER_FONT_STYLE));
-  color_scheme = enum_nick (EPHY_TYPE_PREFS_READER_COLOR_SCHEME,
-                            g_settings_get_enum (EPHY_SETTINGS_READER,
-                                                 EPHY_PREFS_READER_COLOR_SCHEME));
+
+  style_manager = hdy_style_manager_get_default ();
+
+  if (hdy_style_manager_get_system_supports_color_schemes (style_manager))
+    color_scheme = hdy_style_manager_get_dark (style_manager) ? "dark" : "light";
+  else
+    color_scheme = enum_nick (EPHY_TYPE_PREFS_READER_COLOR_SCHEME,
+                              g_settings_get_enum (EPHY_SETTINGS_READER,
+                                                   EPHY_PREFS_READER_COLOR_SCHEME));
 
   g_string_append_printf (html, "<style>%s</style>"
                           "<title>%s</title>"
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c
index 27bff9a12..b40c05157 100644
--- a/embed/ephy-web-view.c
+++ b/embed/ephy-web-view.c
@@ -2576,10 +2576,9 @@ enum_nick (GType enum_type,
 }
 
 static void
-reader_setting_changed_cb (GSettings   *settings,
-                           gchar       *key,
-                           EphyWebView *web_view)
+reader_setting_changed_cb (EphyWebView *web_view)
 {
+  HdyStyleManager *style_manager;
   const gchar *font_style;
   const gchar *color_scheme;
   gchar *js_snippet;
@@ -2588,11 +2587,17 @@ reader_setting_changed_cb (GSettings   *settings,
     return;
 
   font_style = enum_nick (EPHY_TYPE_PREFS_READER_FONT_STYLE,
-                          g_settings_get_enum (settings,
+                          g_settings_get_enum (EPHY_SETTINGS_READER,
                                                EPHY_PREFS_READER_FONT_STYLE));
-  color_scheme = enum_nick (EPHY_TYPE_PREFS_READER_COLOR_SCHEME,
-                            g_settings_get_enum (settings,
-                                                 EPHY_PREFS_READER_COLOR_SCHEME));
+
+  style_manager = hdy_style_manager_get_default ();
+
+  if (hdy_style_manager_get_system_supports_color_schemes (style_manager))
+    color_scheme = hdy_style_manager_get_dark (style_manager) ? "dark" : "light";
+  else
+    color_scheme = enum_nick (EPHY_TYPE_PREFS_READER_COLOR_SCHEME,
+                              g_settings_get_enum (EPHY_SETTINGS_READER,
+                                                   EPHY_PREFS_READER_COLOR_SCHEME));
 
   js_snippet = g_strdup_printf ("document.body.className = '%s %s'",
                                 font_style,
@@ -3979,11 +3984,21 @@ ephy_web_view_init (EphyWebView *web_view)
 
   g_signal_connect_object (EPHY_SETTINGS_READER, "changed::" EPHY_PREFS_READER_FONT_STYLE,
                            G_CALLBACK (reader_setting_changed_cb),
-                           web_view, 0);
+                           web_view, G_CONNECT_SWAPPED);
 
   g_signal_connect_object (EPHY_SETTINGS_READER, "changed::" EPHY_PREFS_READER_COLOR_SCHEME,
                            G_CALLBACK (reader_setting_changed_cb),
-                           web_view, 0);
+                           web_view, G_CONNECT_SWAPPED);
+
+  g_signal_connect_object (hdy_style_manager_get_default (),
+                           "notify::system-supports-color-schemes",
+                           G_CALLBACK (reader_setting_changed_cb),
+                           web_view, G_CONNECT_SWAPPED);
+
+  g_signal_connect_object (hdy_style_manager_get_default (),
+                           "notify::dark",
+                           G_CALLBACK (reader_setting_changed_cb),
+                           web_view, G_CONNECT_SWAPPED);
 
   g_signal_connect (web_view, "decide-policy",
                     G_CALLBACK (decide_policy_cb),
diff --git a/src/preferences/prefs-appearance-page.c b/src/preferences/prefs-appearance-page.c
index 7b65ee54f..42193af00 100644
--- a/src/preferences/prefs-appearance-page.c
+++ b/src/preferences/prefs-appearance-page.c
@@ -348,6 +348,10 @@ setup_appearance_page (PrefsAppearancePage *appearance_page)
                                 reader_font_style_set_mapping,
                                 NULL, NULL);
 
+  g_object_bind_property (hdy_style_manager_get_default (), "system-supports-color-schemes",
+                          appearance_page->reader_mode_color_scheme, "visible",
+                          G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN);
+
   hdy_combo_row_set_for_enum (HDY_COMBO_ROW (appearance_page->reader_mode_color_scheme),
                               EPHY_TYPE_PREFS_READER_COLOR_SCHEME,
                               reader_color_scheme_get_name, NULL, NULL);


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