[epiphany/wip/mcatanzaro/fedora-needs-upstreamed: 32/32] Use GtkSettings 'gtk-xft-dpi' property to keep track of DPI changes



commit bef8191cabf3048c0ac488b96bd1c09606b9b27d
Author: Mario Sanchez Prada <mario endlessm com>
Date:   Thu Feb 19 15:47:28 2015 +0000

    Use GtkSettings 'gtk-xft-dpi' property to keep track of DPI changes
    
    Use that property to find the screen's resolution for font handling
    instead of gdk_screen_get_resolution(), and also connect a callback
    to notify::gtk-xft-dpi so that we can update the font size when the
    DPI value changes for the screen, and not just on startup.
    
    Upstream status: Should probably be upstreamed as-is
    
    https://bugzilla.gnome.org/show_bug.cgi?id=744796

 embed/ephy-embed-prefs.c |   38 ++++++++++++++++++++++++++++++++++----
 1 files changed, 34 insertions(+), 4 deletions(-)
---
diff --git a/embed/ephy-embed-prefs.c b/embed/ephy-embed-prefs.c
index dfec800..3e7b505 100644
--- a/embed/ephy-embed-prefs.c
+++ b/embed/ephy-embed-prefs.c
@@ -206,12 +206,15 @@ webkit_pref_callback_user_agent (GSettings *settings,
 static gdouble
 get_screen_dpi (GdkScreen *screen)
 {
-  gdouble dpi;
   gdouble dp, di;
+  gint gtk_xft_dpi = -1;
+  GtkSettings *settings = gtk_settings_get_for_screen (screen);
 
-  dpi = gdk_screen_get_resolution (screen);
-  if (dpi != -1)
-    return dpi;
+  g_object_get (settings, "gtk-xft-dpi", &gtk_xft_dpi, NULL);
+  if (gtk_xft_dpi != -1) {
+    /* Returned value for gtk-xft-dpi is (dots/inch * 1024) */
+    return gtk_xft_dpi / 1024.0;
+  }
 
   dp = hypot (gdk_screen_get_width (screen), gdk_screen_get_height (screen));
   di = hypot (gdk_screen_get_width_mm (screen), gdk_screen_get_height_mm (screen)) / 25.4;
@@ -475,6 +478,21 @@ webkit_pref_callback_enable_spell_checking (GSettings *settings,
   }
 }
 
+static void
+gtk_settings_xft_dpi_changed_cb (GtkSettings *gtk_settings,
+                                 GParamSpec *pspec,
+                                 gpointer data)
+{
+  GSettings *gsettings = ephy_settings_get (EPHY_PREFS_WEB_SCHEMA);
+  if (!gsettings)
+    return;
+
+  /* Calling webkit_pref_callback_gnome_fonts() from here will do the
+   * right thing and call webkit_pref_callback_font_size() if needed.
+   */
+  webkit_pref_callback_gnome_fonts (gsettings, EPHY_PREFS_WEB_USE_GNOME_FONTS, NULL);
+}
+
 static const PrefData webkit_pref_entries[] =
   {
     /* Epiphany font settings */
@@ -534,6 +552,7 @@ static const PrefData webkit_pref_entries[] =
 static gpointer
 ephy_embed_prefs_init (gpointer user_data)
 {
+  GdkScreen *screen = NULL;
   int i;
 
   webkit_settings = webkit_settings_new_with_settings ("enable-developer-extras", TRUE,
@@ -560,6 +579,17 @@ ephy_embed_prefs_init (gpointer user_data)
     g_free (key);
   }
 
+  /* Connect to the "notify::gtk-xft-dpi" signal for GtkSettings, so that
+   * we can update the font size in real time if the screen's resolution
+   * for font handling changes (e.g. enabled "Large Text" a11y mode).
+   */
+  screen = gdk_screen_get_default ();
+  if (screen) {
+    GtkSettings *gtk_settings = gtk_settings_get_for_screen (screen);
+    g_signal_connect (gtk_settings, "notify::gtk-xft-dpi",
+                      G_CALLBACK (gtk_settings_xft_dpi_changed_cb), NULL);
+  }
+
   g_settings_bind (EPHY_SETTINGS_WEB,
                    EPHY_PREFS_WEB_ENABLE_JAVASCRIPT,
                    webkit_settings, ENABLE_SCRIPTS_SETTING,


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