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




commit cae1a262c4eb03860336485f044ab8f49a8f7dcf
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

 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]