[epiphany/wip/mcatanzaro/fedora-needs-upstreamed: 19/20] Use GtkSettings 'gtk-xft-dpi' property to keep track of DPI changes
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/wip/mcatanzaro/fedora-needs-upstreamed: 19/20] Use GtkSettings 'gtk-xft-dpi' property to keep track of DPI changes
- Date: Thu, 26 Feb 2015 21:05:59 +0000 (UTC)
commit 30886acfab4b2e70686dfeab20f9c100ff4418bf
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.
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", >k_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]