[devhelp] Settings: move font settings to the libdevhelp



commit ed2de6e20a8e757ec760a2b6b6ff6022d36784df
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sun May 20 15:57:37 2018 +0200

    Settings: move font settings to the libdevhelp
    
    It's the first step to be able to move DhWebView to the libdevhelp.
    
    Loads of boilerplate :-( Handling GSettings in a library is not that
    easy, I'm not entirely satisfied with DhSettings. A better solution
    would maybe to have a code generation tool that reads a *.gschema.xml
    file and creates GVariant properties, convenient getters/setters, bind
    functions etc.

 data/org.gnome.devhelp.gschema.xml      |   18 --
 data/org.gnome.libdevhelp-3.gschema.xml |   18 ++
 devhelp/dh-settings-builder.c           |   32 +++-
 devhelp/dh-settings-builder.h           |    3 +
 devhelp/dh-settings.c                   |  336 ++++++++++++++++++++++++++++++-
 devhelp/dh-settings.h                   |   25 +++-
 docs/reference/devhelp-sections.txt     |    9 +
 src/dh-preferences.c                    |   24 +--
 src/dh-settings-app.c                   |   86 --------
 src/dh-settings-app.h                   |    9 -
 src/dh-web-view.c                       |   65 +++---
 11 files changed, 462 insertions(+), 163 deletions(-)
---
diff --git a/data/org.gnome.devhelp.gschema.xml b/data/org.gnome.devhelp.gschema.xml
index e3d058a..97f55f1 100644
--- a/data/org.gnome.devhelp.gschema.xml
+++ b/data/org.gnome.devhelp.gschema.xml
@@ -1,7 +1,6 @@
 <schemalist gettext-domain="devhelp">
   <schema id="org.gnome.devhelp" path="/org/gnome/devhelp/">
     <child name="state" schema="org.gnome.devhelp.state"/>
-    <child name="fonts" schema="org.gnome.devhelp.fonts"/>
   </schema>
   <schema id="org.gnome.devhelp.state" path="/org/gnome/devhelp/state/">
     <child name="main" schema="org.gnome.devhelp.state.main"/>
@@ -50,21 +49,4 @@
       <description>The height of the assistant window.</description>
     </key>
   </schema>
-  <schema id="org.gnome.devhelp.fonts" path="/org/gnome/devhelp/fonts/">
-    <key name="use-system-fonts" type="b">
-      <default>true</default>
-      <summary>Use system fonts</summary>
-      <description>Use the system default fonts.</description>
-    </key>
-    <key name="variable-font" type="s">
-      <default>'Sans 12'</default>
-      <summary>Font for text</summary>
-      <description>Font for text with variable width.</description>
-    </key>
-    <key name="fixed-font" type="s">
-      <default>'Monospace 12'</default>
-      <summary>Font for fixed width text</summary>
-      <description>Font for text with fixed width, such as code examples.</description>
-    </key>
-  </schema>
 </schemalist>
diff --git a/data/org.gnome.libdevhelp-3.gschema.xml b/data/org.gnome.libdevhelp-3.gschema.xml
index 8580e96..22246f3 100644
--- a/data/org.gnome.libdevhelp-3.gschema.xml
+++ b/data/org.gnome.libdevhelp-3.gschema.xml
@@ -1,6 +1,7 @@
 <schemalist gettext-domain="devhelp">
   <schema id="org.gnome.libdevhelp-3">
     <child name="contents" schema="org.gnome.libdevhelp-3.contents"/>
+    <child name="fonts" schema="org.gnome.libdevhelp-3.fonts"/>
   </schema>
   <schema id="org.gnome.libdevhelp-3.contents">
     <key name="books-disabled" type="as">
@@ -14,4 +15,21 @@
       <description>Whether books should be grouped by programming language in the user 
interface.</description>
     </key>
   </schema>
+  <schema id="org.gnome.libdevhelp-3.fonts">
+    <key name="use-system-fonts" type="b">
+      <default>true</default>
+      <summary>Use system fonts</summary>
+      <description>Use the system default fonts.</description>
+    </key>
+    <key name="variable-font" type="s">
+      <default>'Sans 12'</default>
+      <summary>Font for text</summary>
+      <description>Font for text with variable width.</description>
+    </key>
+    <key name="fixed-font" type="s">
+      <default>'Monospace 12'</default>
+      <summary>Font for fixed width text</summary>
+      <description>Font for text with fixed width, such as code examples.</description>
+    </key>
+  </schema>
 </schemalist>
diff --git a/devhelp/dh-settings-builder.c b/devhelp/dh-settings-builder.c
index 3d6704c..fbf9aef 100644
--- a/devhelp/dh-settings-builder.c
+++ b/devhelp/dh-settings-builder.c
@@ -53,6 +53,7 @@
 
 struct _DhSettingsBuilderPrivate {
         gchar *contents_path;
+        gchar *fonts_path;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (DhSettingsBuilder, dh_settings_builder, G_TYPE_OBJECT)
@@ -63,6 +64,7 @@ dh_settings_builder_finalize (GObject *object)
         DhSettingsBuilder *builder = DH_SETTINGS_BUILDER (object);
 
         g_free (builder->priv->contents_path);
+        g_free (builder->priv->fonts_path);
 
         G_OBJECT_CLASS (dh_settings_builder_parent_class)->finalize (object);
 }
@@ -117,6 +119,29 @@ dh_settings_builder_set_contents_path (DhSettingsBuilder *builder,
 }
 
 /**
+ * dh_settings_builder_set_fonts_path:
+ * @builder: a #DhSettingsBuilder.
+ * @fonts_path: the path for the "fonts" schema.
+ *
+ * Sets the path for the "fonts" schema.
+ *
+ * If you don't call this function, the default path for this schema will be
+ * used.
+ *
+ * Since: 3.30
+ */
+void
+dh_settings_builder_set_fonts_path (DhSettingsBuilder *builder,
+                                    const gchar       *fonts_path)
+{
+        g_return_if_fail (DH_IS_SETTINGS_BUILDER (builder));
+        g_return_if_fail (fonts_path != NULL);
+
+        g_free (builder->priv->fonts_path);
+        builder->priv->fonts_path = g_strdup (fonts_path);
+}
+
+/**
  * dh_settings_builder_create_object:
  * @builder: a #DhSettingsBuilder.
  *
@@ -136,6 +161,11 @@ dh_settings_builder_create_object (DhSettingsBuilder *builder)
                 // Must be compatible with Devhelp app version 3.28:
                 dh_settings_builder_set_contents_path (builder, "/org/gnome/devhelp/state/main/contents/");
         }
+        if (builder->priv->fonts_path == NULL) {
+                // Must be compatible with Devhelp app version 3.28:
+                dh_settings_builder_set_fonts_path (builder, "/org/gnome/devhelp/fonts/");
+        }
 
-        return _dh_settings_new (builder->priv->contents_path);
+        return _dh_settings_new (builder->priv->contents_path,
+                                 builder->priv->fonts_path);
 }
diff --git a/devhelp/dh-settings-builder.h b/devhelp/dh-settings-builder.h
index e16aa02..bb1f31d 100644
--- a/devhelp/dh-settings-builder.h
+++ b/devhelp/dh-settings-builder.h
@@ -58,6 +58,9 @@ DhSettingsBuilder *
 void            dh_settings_builder_set_contents_path   (DhSettingsBuilder *builder,
                                                          const gchar       *contents_path);
 
+void            dh_settings_builder_set_fonts_path      (DhSettingsBuilder *builder,
+                                                         const gchar       *fonts_path);
+
 DhSettings *    dh_settings_builder_create_object       (DhSettingsBuilder *builder);
 
 G_END_DECLS
diff --git a/devhelp/dh-settings.c b/devhelp/dh-settings.c
index af8ba5d..981f4d7 100644
--- a/devhelp/dh-settings.c
+++ b/devhelp/dh-settings.c
@@ -73,24 +73,40 @@
 
 /* libdevhelp GSettings schema IDs */
 #define SETTINGS_SCHEMA_ID_CONTENTS             "org.gnome.libdevhelp-3.contents"
+#define SETTINGS_SCHEMA_ID_FONTS                "org.gnome.libdevhelp-3.fonts"
+
+/* Provided by the gsettings-desktop-schemas module. */
+#define SETTINGS_SCHEMA_ID_DESKTOP_INTERFACE    "org.gnome.desktop.interface"
+#define SYSTEM_FIXED_FONT_KEY                   "monospace-font-name"
+#define SYSTEM_VARIABLE_FONT_KEY                "font-name"
 
 struct _DhSettingsPrivate {
         GSettings *gsettings_contents;
+        GSettings *gsettings_fonts;
+        GSettings *gsettings_desktop_interface;
 
         /* List of book IDs (gchar*) currently disabled. */
         GList *books_disabled;
 
+        gchar *variable_font;
+        gchar *fixed_font;
+
         guint group_books_by_language : 1;
+        guint use_system_fonts : 1;
 };
 
 enum {
         PROP_0,
         PROP_GROUP_BOOKS_BY_LANGUAGE,
+        PROP_USE_SYSTEM_FONTS,
+        PROP_VARIABLE_FONT,
+        PROP_FIXED_FONT,
         N_PROPERTIES
 };
 
 enum {
         SIGNAL_BOOKS_DISABLED_CHANGED,
+        SIGNAL_FONTS_CHANGED,
         N_SIGNALS
 };
 
@@ -223,6 +239,18 @@ dh_settings_get_property (GObject    *object,
                         g_value_set_boolean (value, dh_settings_get_group_books_by_language (settings));
                         break;
 
+                case PROP_USE_SYSTEM_FONTS:
+                        g_value_set_boolean (value, dh_settings_get_use_system_fonts (settings));
+                        break;
+
+                case PROP_VARIABLE_FONT:
+                        g_value_set_string (value, dh_settings_get_variable_font (settings));
+                        break;
+
+                case PROP_FIXED_FONT:
+                        g_value_set_string (value, dh_settings_get_fixed_font (settings));
+                        break;
+
                 default:
                         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                         break;
@@ -242,6 +270,18 @@ dh_settings_set_property (GObject      *object,
                         dh_settings_set_group_books_by_language (settings, g_value_get_boolean (value));
                         break;
 
+                case PROP_USE_SYSTEM_FONTS:
+                        dh_settings_set_use_system_fonts (settings, g_value_get_boolean (value));
+                        break;
+
+                case PROP_VARIABLE_FONT:
+                        dh_settings_set_variable_font (settings, g_value_get_string (value));
+                        break;
+
+                case PROP_FIXED_FONT:
+                        dh_settings_set_fixed_font (settings, g_value_get_string (value));
+                        break;
+
                 default:
                         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                         break;
@@ -254,6 +294,8 @@ dh_settings_dispose (GObject *object)
         DhSettings *settings = DH_SETTINGS (object);
 
         g_clear_object (&settings->priv->gsettings_contents);
+        g_clear_object (&settings->priv->gsettings_fonts);
+        g_clear_object (&settings->priv->gsettings_desktop_interface);
 
         G_OBJECT_CLASS (dh_settings_parent_class)->dispose (object);
 }
@@ -264,6 +306,8 @@ dh_settings_finalize (GObject *object)
         DhSettings *settings = DH_SETTINGS (object);
 
         g_list_free_full (settings->priv->books_disabled, g_free);
+        g_free (settings->priv->variable_font);
+        g_free (settings->priv->fixed_font);
 
         if (default_instance == settings)
                 default_instance = NULL;
@@ -299,6 +343,58 @@ dh_settings_class_init (DhSettingsClass *klass)
                                       G_PARAM_CONSTRUCT |
                                       G_PARAM_STATIC_STRINGS);
 
+        /**
+         * DhSettings:use-system-fonts:
+         *
+         * Whether to use the system default fonts.
+         *
+         * Since: 3.30
+         */
+        properties[PROP_USE_SYSTEM_FONTS] =
+                g_param_spec_boolean ("use-system-fonts",
+                                      "use-system-fonts",
+                                      "",
+                                      TRUE,
+                                      G_PARAM_READWRITE |
+                                      G_PARAM_CONSTRUCT |
+                                      G_PARAM_STATIC_STRINGS);
+
+        /**
+         * DhSettings:variable-font:
+         *
+         * Font for text with variable width.
+         *
+         * This property is independent of #DhSettings:use-system-fonts.
+         *
+         * Since: 3.30
+         */
+        properties[PROP_VARIABLE_FONT] =
+                g_param_spec_string ("variable-font",
+                                     "variable-font",
+                                     "",
+                                     "Sans 12",
+                                     G_PARAM_READWRITE |
+                                     G_PARAM_CONSTRUCT |
+                                     G_PARAM_STATIC_STRINGS);
+
+        /**
+         * DhSettings:fixed-font:
+         *
+         * Font for text with fixed width, such as code examples.
+         *
+         * This property is independent of #DhSettings:use-system-fonts.
+         *
+         * Since: 3.30
+         */
+        properties[PROP_FIXED_FONT] =
+                g_param_spec_string ("fixed-font",
+                                     "fixed-font",
+                                     "",
+                                     "Monospace 12",
+                                     G_PARAM_READWRITE |
+                                     G_PARAM_CONSTRUCT |
+                                     G_PARAM_STATIC_STRINGS);
+
         g_object_class_install_properties (object_class, N_PROPERTIES, properties);
 
         /**
@@ -317,16 +413,57 @@ dh_settings_class_init (DhSettingsClass *klass)
                               G_STRUCT_OFFSET (DhSettingsClass, books_disabled_changed),
                               NULL, NULL, NULL,
                               G_TYPE_NONE, 0);
+
+        /**
+         * DhSettings::fonts-changed:
+         * @settings: the #DhSettings emitting the signal.
+         *
+         * The ::fonts-changed signal is emitted when the return values of
+         * dh_settings_get_selected_fonts() have potentially changed.
+         *
+         * Since: 3.30
+         */
+        signals[SIGNAL_FONTS_CHANGED] =
+                g_signal_new ("fonts-changed",
+                              G_TYPE_FROM_CLASS (klass),
+                              G_SIGNAL_RUN_FIRST,
+                              G_STRUCT_OFFSET (DhSettingsClass, fonts_changed),
+                              NULL, NULL, NULL,
+                              G_TYPE_NONE, 0);
+}
+
+static void
+system_font_changed_cb (GSettings  *gsettings,
+                        gchar      *key,
+                        DhSettings *settings)
+{
+        if (settings->priv->use_system_fonts)
+                g_signal_emit (settings, signals[SIGNAL_FONTS_CHANGED], 0);
 }
 
 static void
 dh_settings_init (DhSettings *settings)
 {
         settings->priv = dh_settings_get_instance_private (settings);
+
+        settings->priv->gsettings_desktop_interface = g_settings_new (SETTINGS_SCHEMA_ID_DESKTOP_INTERFACE);
+
+        g_signal_connect_object (settings->priv->gsettings_desktop_interface,
+                                 "changed::" SYSTEM_FIXED_FONT_KEY,
+                                 G_CALLBACK (system_font_changed_cb),
+                                 settings,
+                                 0);
+
+        g_signal_connect_object (settings->priv->gsettings_desktop_interface,
+                                 "changed::" SYSTEM_VARIABLE_FONT_KEY,
+                                 G_CALLBACK (system_font_changed_cb),
+                                 settings,
+                                 0);
 }
 
 DhSettings *
-_dh_settings_new (const gchar *contents_path)
+_dh_settings_new (const gchar *contents_path,
+                  const gchar *fonts_path)
 {
         DhSettings *settings;
 
@@ -336,6 +473,8 @@ _dh_settings_new (const gchar *contents_path)
 
         settings->priv->gsettings_contents = g_settings_new_with_path (SETTINGS_SCHEMA_ID_CONTENTS,
                                                                        contents_path);
+        settings->priv->gsettings_fonts = g_settings_new_with_path (SETTINGS_SCHEMA_ID_FONTS,
+                                                                    fonts_path);
 
         g_signal_connect_object (settings->priv->gsettings_contents,
                                  "changed::books-disabled",
@@ -398,6 +537,7 @@ dh_settings_bind_all (DhSettings *settings)
         g_return_if_fail (DH_IS_SETTINGS (settings));
 
         dh_settings_bind_group_books_by_language (settings);
+        dh_settings_bind_fonts (settings);
 }
 
 /**
@@ -562,3 +702,197 @@ dh_settings_thaw_books_disabled_changed (DhSettings *settings)
          */
         g_signal_emit (settings, signals[SIGNAL_BOOKS_DISABLED_CHANGED], 0);
 }
+
+/**
+ * dh_settings_get_selected_fonts:
+ * @settings: a #DhSettings.
+ * @variable_font: (out): location to store the font name for text with variable
+ *   width. Free with g_free().
+ * @fixed_font: (out): location to store the font name for text with fixed
+ *   width. Free with g_free().
+ *
+ * If #DhSettings:use-system-fonts is %TRUE, returns the system fonts. Otherwise
+ * returns the values of the #DhSettings:variable-font and
+ * #DhSettings:fixed-font properties.
+ *
+ * Since: 3.30
+ */
+void
+dh_settings_get_selected_fonts (DhSettings  *settings,
+                                gchar      **variable_font,
+                                gchar      **fixed_font)
+{
+        g_return_if_fail (DH_IS_SETTINGS (settings));
+        g_return_if_fail (variable_font != NULL && *variable_font == NULL);
+        g_return_if_fail (fixed_font != NULL && *fixed_font == NULL);
+
+        if (settings->priv->use_system_fonts) {
+                *variable_font = g_settings_get_string (settings->priv->gsettings_desktop_interface,
+                                                        SYSTEM_VARIABLE_FONT_KEY);
+                *fixed_font = g_settings_get_string (settings->priv->gsettings_desktop_interface,
+                                                     SYSTEM_FIXED_FONT_KEY);
+        } else {
+                *variable_font = g_strdup (settings->priv->variable_font);
+                *fixed_font = g_strdup (settings->priv->fixed_font);
+        }
+}
+
+/**
+ * dh_settings_get_use_system_fonts:
+ * @settings: a #DhSettings.
+ *
+ * Returns: the value of the #DhSettings:use-system-fonts property.
+ * Since: 3.30
+ */
+gboolean
+dh_settings_get_use_system_fonts (DhSettings *settings)
+{
+        g_return_val_if_fail (DH_IS_SETTINGS (settings), FALSE);
+
+        return settings->priv->use_system_fonts;
+}
+
+/**
+ * dh_settings_set_use_system_fonts:
+ * @settings: a #DhSettings.
+ * @use_system_fonts: the new value.
+ *
+ * Sets the #DhSettings:use-system-fonts property.
+ *
+ * Since: 3.30
+ */
+void
+dh_settings_set_use_system_fonts (DhSettings *settings,
+                                  gboolean    use_system_fonts)
+{
+        g_return_if_fail (DH_IS_SETTINGS (settings));
+
+        use_system_fonts = use_system_fonts != FALSE;
+
+        if (settings->priv->use_system_fonts != use_system_fonts) {
+                settings->priv->use_system_fonts = use_system_fonts;
+                g_object_notify_by_pspec (G_OBJECT (settings), properties[PROP_USE_SYSTEM_FONTS]);
+
+                g_signal_emit (settings, signals[SIGNAL_FONTS_CHANGED], 0);
+        }
+}
+
+/**
+ * dh_settings_get_variable_font:
+ * @settings: a #DhSettings.
+ *
+ * Warning: you probably want to use the dh_settings_get_selected_fonts()
+ * function instead, to take into account the #DhSettings:use-system-fonts
+ * property.
+ *
+ * Returns: the value of the #DhSettings:variable-font property.
+ * Since: 3.30
+ */
+const gchar *
+dh_settings_get_variable_font (DhSettings *settings)
+{
+        g_return_val_if_fail (DH_IS_SETTINGS (settings), NULL);
+
+        return settings->priv->variable_font;
+}
+
+/**
+ * dh_settings_set_variable_font:
+ * @settings: a #DhSettings.
+ * @variable_font: the new value.
+ *
+ * Sets the #DhSettings:variable-font property.
+ *
+ * Since: 3.30
+ */
+void
+dh_settings_set_variable_font (DhSettings  *settings,
+                               const gchar *variable_font)
+{
+        g_return_if_fail (DH_IS_SETTINGS (settings));
+        g_return_if_fail (variable_font != NULL);
+
+        if (g_strcmp0 (settings->priv->variable_font, variable_font) != 0) {
+                g_free (settings->priv->variable_font);
+                settings->priv->variable_font = g_strdup (variable_font);
+                g_object_notify_by_pspec (G_OBJECT (settings), properties[PROP_VARIABLE_FONT]);
+
+                if (!settings->priv->use_system_fonts)
+                        g_signal_emit (settings, signals[SIGNAL_FONTS_CHANGED], 0);
+        }
+}
+
+/**
+ * dh_settings_get_fixed_font:
+ * @settings: a #DhSettings.
+ *
+ * Warning: you probably want to use the dh_settings_get_selected_fonts()
+ * function instead, to take into account the #DhSettings:use-system-fonts
+ * property.
+ *
+ * Returns: the value of the #DhSettings:fixed-font property.
+ * Since: 3.30
+ */
+const gchar *
+dh_settings_get_fixed_font (DhSettings *settings)
+{
+        g_return_val_if_fail (DH_IS_SETTINGS (settings), NULL);
+
+        return settings->priv->fixed_font;
+}
+
+/**
+ * dh_settings_set_fixed_font:
+ * @settings: a #DhSettings.
+ * @fixed_font: the new value.
+ *
+ * Sets the #DhSettings:fixed-font property.
+ *
+ * Since: 3.30
+ */
+void
+dh_settings_set_fixed_font (DhSettings  *settings,
+                            const gchar *fixed_font)
+{
+        g_return_if_fail (DH_IS_SETTINGS (settings));
+        g_return_if_fail (fixed_font != NULL);
+
+        if (g_strcmp0 (settings->priv->fixed_font, fixed_font) != 0) {
+                g_free (settings->priv->fixed_font);
+                settings->priv->fixed_font = g_strdup (fixed_font);
+                g_object_notify_by_pspec (G_OBJECT (settings), properties[PROP_FIXED_FONT]);
+
+                if (!settings->priv->use_system_fonts)
+                        g_signal_emit (settings, signals[SIGNAL_FONTS_CHANGED], 0);
+        }
+}
+
+/**
+ * dh_settings_bind_fonts:
+ * @settings: a #DhSettings.
+ *
+ * Binds the #DhSettings:use-system-fonts, #DhSettings:variable-font and
+ * #DhSettings:fixed-font properties to their corresponding #GSettings keys.
+ *
+ * Since: 3.30
+ */
+void
+dh_settings_bind_fonts (DhSettings *settings)
+{
+        g_return_if_fail (DH_IS_SETTINGS (settings));
+
+        g_settings_bind (settings->priv->gsettings_fonts, "use-system-fonts",
+                         settings, "use-system-fonts",
+                         G_SETTINGS_BIND_DEFAULT |
+                         G_SETTINGS_BIND_NO_SENSITIVITY);
+
+        g_settings_bind (settings->priv->gsettings_fonts, "variable-font",
+                         settings, "variable-font",
+                         G_SETTINGS_BIND_DEFAULT |
+                         G_SETTINGS_BIND_NO_SENSITIVITY);
+
+        g_settings_bind (settings->priv->gsettings_fonts, "fixed-font",
+                         settings, "fixed-font",
+                         G_SETTINGS_BIND_DEFAULT |
+                         G_SETTINGS_BIND_NO_SENSITIVITY);
+}
diff --git a/devhelp/dh-settings.h b/devhelp/dh-settings.h
index ad2b8e9..7d45dd8 100644
--- a/devhelp/dh-settings.h
+++ b/devhelp/dh-settings.h
@@ -48,6 +48,7 @@ struct _DhSettingsClass {
 
         /* Signals */
         void (* books_disabled_changed) (DhSettings *settings);
+        void (* fonts_changed)          (DhSettings *settings);
 
         /* Padding for future expansion */
         gpointer padding[12];
@@ -56,7 +57,8 @@ struct _DhSettingsClass {
 GType           dh_settings_get_type                            (void) G_GNUC_CONST;
 
 G_GNUC_INTERNAL
-DhSettings *    _dh_settings_new                                (const gchar *contents_path);
+DhSettings *    _dh_settings_new                                (const gchar *contents_path,
+                                                                 const gchar *fonts_path);
 
 DhSettings *    dh_settings_get_default                         (void);
 
@@ -83,6 +85,27 @@ void            dh_settings_freeze_books_disabled_changed       (DhSettings *set
 
 void            dh_settings_thaw_books_disabled_changed         (DhSettings *settings);
 
+void            dh_settings_get_selected_fonts                  (DhSettings  *settings,
+                                                                 gchar      **variable_font,
+                                                                 gchar      **fixed_font);
+
+gboolean        dh_settings_get_use_system_fonts                (DhSettings *settings);
+
+void            dh_settings_set_use_system_fonts                (DhSettings *settings,
+                                                                 gboolean    use_system_fonts);
+
+const gchar *   dh_settings_get_variable_font                   (DhSettings *settings);
+
+void            dh_settings_set_variable_font                   (DhSettings  *settings,
+                                                                 const gchar *variable_font);
+
+const gchar *   dh_settings_get_fixed_font                      (DhSettings *settings);
+
+void            dh_settings_set_fixed_font                      (DhSettings  *settings,
+                                                                 const gchar *fixed_font);
+
+void            dh_settings_bind_fonts                          (DhSettings *settings);
+
 G_END_DECLS
 
 #endif /* DH_SETTINGS_H */
diff --git a/docs/reference/devhelp-sections.txt b/docs/reference/devhelp-sections.txt
index 4ac007f..1bff781 100644
--- a/docs/reference/devhelp-sections.txt
+++ b/docs/reference/devhelp-sections.txt
@@ -252,6 +252,14 @@ dh_settings_is_book_enabled
 dh_settings_set_book_enabled
 dh_settings_freeze_books_disabled_changed
 dh_settings_thaw_books_disabled_changed
+dh_settings_get_selected_fonts
+dh_settings_get_use_system_fonts
+dh_settings_set_use_system_fonts
+dh_settings_get_variable_font
+dh_settings_set_variable_font
+dh_settings_get_fixed_font
+dh_settings_set_fixed_font
+dh_settings_bind_fonts
 <SUBSECTION Standard>
 DH_IS_SETTINGS
 DH_IS_SETTINGS_CLASS
@@ -269,6 +277,7 @@ dh_settings_get_type
 DhSettingsBuilder
 dh_settings_builder_new
 dh_settings_builder_set_contents_path
+dh_settings_builder_set_fonts_path
 dh_settings_builder_create_object
 <SUBSECTION Standard>
 DH_IS_SETTINGS_BUILDER
diff --git a/src/dh-preferences.c b/src/dh-preferences.c
index 648fc94..9478604 100644
--- a/src/dh-preferences.c
+++ b/src/dh-preferences.c
@@ -627,15 +627,13 @@ static void
 init_fonts_tab (DhPreferences *prefs)
 {
         DhPreferencesPrivate *priv = dh_preferences_get_instance_private (prefs);
-        DhSettingsApp *settings_app;
-        GSettings *fonts_settings;
+        DhSettings *settings;
 
-        settings_app = dh_settings_app_get_singleton ();
-        fonts_settings = dh_settings_app_peek_fonts_settings (settings_app);
+        settings = dh_settings_get_default ();
 
-        g_settings_bind (fonts_settings, "use-system-fonts",
-                         priv->use_system_fonts_checkbutton, "active",
-                         G_SETTINGS_BIND_DEFAULT);
+        g_object_bind_property (settings, "use-system-fonts",
+                                priv->use_system_fonts_checkbutton, "active",
+                                G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
 
         g_object_bind_property (priv->use_system_fonts_checkbutton, "active",
                                 priv->custom_fonts_grid, "sensitive",
@@ -643,13 +641,13 @@ init_fonts_tab (DhPreferences *prefs)
                                 G_BINDING_SYNC_CREATE |
                                 G_BINDING_INVERT_BOOLEAN);
 
-        g_settings_bind (fonts_settings, "variable-font",
-                         priv->variable_font_button, "font",
-                         G_SETTINGS_BIND_DEFAULT);
+        g_object_bind_property (settings, "variable-font",
+                                priv->variable_font_button, "font",
+                                G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
 
-        g_settings_bind (fonts_settings, "fixed-font",
-                         priv->fixed_font_button, "font",
-                         G_SETTINGS_BIND_DEFAULT);
+        g_object_bind_property (settings, "fixed-font",
+                                priv->fixed_font_button, "font",
+                                G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
 }
 
 static void
diff --git a/src/dh-settings-app.c b/src/dh-settings-app.c
index bf946f6..382569a 100644
--- a/src/dh-settings-app.c
+++ b/src/dh-settings-app.c
@@ -25,28 +25,13 @@
 #define SETTINGS_SCHEMA_ID_WINDOW               "org.gnome.devhelp.state.main.window"
 #define SETTINGS_SCHEMA_ID_PANED                "org.gnome.devhelp.state.main.paned"
 #define SETTINGS_SCHEMA_ID_ASSISTANT            "org.gnome.devhelp.state.assistant.window"
-#define SETTINGS_SCHEMA_ID_FONTS                "org.gnome.devhelp.fonts"
-
-/* Provided by the gsettings-desktop-schemas module. */
-#define SETTINGS_SCHEMA_ID_DESKTOP_INTERFACE    "org.gnome.desktop.interface"
-#define SYSTEM_FIXED_FONT_KEY                   "monospace-font-name"
-#define SYSTEM_VARIABLE_FONT_KEY                "font-name"
 
 struct _DhSettingsAppPrivate {
         GSettings *settings_window;
         GSettings *settings_paned;
         GSettings *settings_assistant;
-        GSettings *settings_fonts;
-        GSettings *settings_desktop_interface;
-};
-
-enum {
-        FONTS_CHANGED,
-        N_SIGNALS
 };
 
-static guint signals[N_SIGNALS] = { 0 };
-
 /* DhSettingsApp is a singleton. */
 static DhSettingsApp *singleton = NULL;
 
@@ -60,8 +45,6 @@ dh_settings_app_dispose (GObject *object)
         g_clear_object (&self->priv->settings_window);
         g_clear_object (&self->priv->settings_paned);
         g_clear_object (&self->priv->settings_assistant);
-        g_clear_object (&self->priv->settings_fonts);
-        g_clear_object (&self->priv->settings_desktop_interface);
 
         G_OBJECT_CLASS (dh_settings_app_parent_class)->dispose (object);
 }
@@ -82,22 +65,6 @@ dh_settings_app_class_init (DhSettingsAppClass *klass)
 
         object_class->dispose = dh_settings_app_dispose;
         object_class->finalize = dh_settings_app_finalize;
-
-        signals[FONTS_CHANGED] =
-                g_signal_new ("fonts-changed",
-                              G_TYPE_FROM_CLASS (klass),
-                              G_SIGNAL_RUN_LAST,
-                              G_STRUCT_OFFSET (DhSettingsAppClass, fonts_changed),
-                              NULL, NULL, NULL,
-                              G_TYPE_NONE, 0);
-}
-
-static void
-fonts_changed_cb (GSettings     *gsettings,
-                  gchar         *key,
-                  DhSettingsApp *self)
-{
-        g_signal_emit (self, signals[FONTS_CHANGED], 0);
 }
 
 static void
@@ -108,26 +75,6 @@ dh_settings_app_init (DhSettingsApp *self)
         self->priv->settings_window = g_settings_new (SETTINGS_SCHEMA_ID_WINDOW);
         self->priv->settings_paned = g_settings_new (SETTINGS_SCHEMA_ID_PANED);
         self->priv->settings_assistant = g_settings_new (SETTINGS_SCHEMA_ID_ASSISTANT);
-        self->priv->settings_fonts = g_settings_new (SETTINGS_SCHEMA_ID_FONTS);
-        self->priv->settings_desktop_interface = g_settings_new (SETTINGS_SCHEMA_ID_DESKTOP_INTERFACE);
-
-        g_signal_connect_object (self->priv->settings_fonts,
-                                 "changed",
-                                 G_CALLBACK (fonts_changed_cb),
-                                 self,
-                                 0);
-
-        g_signal_connect_object (self->priv->settings_desktop_interface,
-                                 "changed::" SYSTEM_FIXED_FONT_KEY,
-                                 G_CALLBACK (fonts_changed_cb),
-                                 self,
-                                 0);
-
-        g_signal_connect_object (self->priv->settings_desktop_interface,
-                                 "changed::" SYSTEM_VARIABLE_FONT_KEY,
-                                 G_CALLBACK (fonts_changed_cb),
-                                 self,
-                                 0);
 }
 
 DhSettingsApp *
@@ -171,36 +118,3 @@ dh_settings_app_peek_assistant_settings (DhSettingsApp *self)
         g_return_val_if_fail (DH_IS_SETTINGS_APP (self), NULL);
         return self->priv->settings_assistant;
 }
-
-GSettings *
-dh_settings_app_peek_fonts_settings (DhSettingsApp *self)
-{
-        g_return_val_if_fail (DH_IS_SETTINGS_APP (self), NULL);
-        return self->priv->settings_fonts;
-}
-
-void
-dh_settings_app_get_selected_fonts (DhSettingsApp  *self,
-                                    gchar         **font_name_fixed,
-                                    gchar         **font_name_variable)
-{
-        gboolean use_system_font;
-
-        g_return_if_fail (DH_IS_SETTINGS_APP (self));
-        g_return_if_fail (font_name_fixed != NULL && *font_name_fixed == NULL);
-        g_return_if_fail (font_name_variable != NULL && *font_name_variable == NULL);
-
-        use_system_font = g_settings_get_boolean (self->priv->settings_fonts, "use-system-fonts");
-
-        if (use_system_font) {
-                *font_name_fixed = g_settings_get_string (self->priv->settings_desktop_interface,
-                                                          SYSTEM_FIXED_FONT_KEY);
-                *font_name_variable = g_settings_get_string (self->priv->settings_desktop_interface,
-                                                             SYSTEM_VARIABLE_FONT_KEY);
-        } else {
-                *font_name_fixed = g_settings_get_string (self->priv->settings_fonts,
-                                                          "fixed-font");
-                *font_name_variable = g_settings_get_string (self->priv->settings_fonts,
-                                                             "variable-font");
-        }
-}
diff --git a/src/dh-settings-app.h b/src/dh-settings-app.h
index 6f086ee..b9e0cc5 100644
--- a/src/dh-settings-app.h
+++ b/src/dh-settings-app.h
@@ -44,9 +44,6 @@ struct _DhSettingsApp {
 
 struct _DhSettingsAppClass {
         GObjectClass parent;
-
-        /* Signals */
-        void (*fonts_changed) (DhSettingsApp *settings);
 };
 
 GType           dh_settings_app_get_type                    (void);
@@ -61,12 +58,6 @@ GSettings *     dh_settings_app_peek_paned_settings         (DhSettingsApp *self
 
 GSettings *     dh_settings_app_peek_assistant_settings     (DhSettingsApp *self);
 
-GSettings *     dh_settings_app_peek_fonts_settings         (DhSettingsApp *self);
-
-void            dh_settings_app_get_selected_fonts          (DhSettingsApp  *self,
-                                                             gchar         **font_name_fixed,
-                                                             gchar         **font_name_variable);
-
 G_END_DECLS
 
 #endif /* DH_SETTINGS_APP_H */
diff --git a/src/dh-web-view.c b/src/dh-web-view.c
index b6319a3..ec8e093 100644
--- a/src/dh-web-view.c
+++ b/src/dh-web-view.c
@@ -21,7 +21,7 @@
 #include "dh-web-view.h"
 #include <math.h>
 #include <glib/gi18n.h>
-#include "dh-settings-app.h"
+#include <devhelp/devhelp.h>
 
 struct _DhWebViewPrivate {
         gchar *search_text;
@@ -166,62 +166,59 @@ dh_web_view_button_press_event (GtkWidget      *widget,
 
 static void
 set_fonts (WebKitWebView *view,
-           const gchar   *font_name_fixed,
-           const gchar   *font_name_variable)
+           const gchar   *font_name_variable,
+           const gchar   *font_name_fixed)
 {
-        PangoFontDescription *font_desc_fixed;
         PangoFontDescription *font_desc_variable;
-        guint font_size_fixed;
+        PangoFontDescription *font_desc_fixed;
         guint font_size_variable;
-        guint font_size_fixed_px;
+        guint font_size_fixed;
         guint font_size_variable_px;
+        guint font_size_fixed_px;
         WebKitSettings *settings;
 
-        g_return_if_fail (font_name_fixed != NULL);
         g_return_if_fail (font_name_variable != NULL);
+        g_return_if_fail (font_name_fixed != NULL);
 
         /* Get the font size. */
-        font_desc_fixed = pango_font_description_from_string (font_name_fixed);
         font_desc_variable = pango_font_description_from_string (font_name_variable);
-        font_size_fixed = pango_font_description_get_size (font_desc_fixed) / PANGO_SCALE;
+        font_desc_fixed = pango_font_description_from_string (font_name_fixed);
         font_size_variable = pango_font_description_get_size (font_desc_variable) / PANGO_SCALE;
-        font_size_fixed_px = webkit_settings_font_size_to_pixels (font_size_fixed);
+        font_size_fixed = pango_font_description_get_size (font_desc_fixed) / PANGO_SCALE;
         font_size_variable_px = webkit_settings_font_size_to_pixels (font_size_variable);
+        font_size_fixed_px = webkit_settings_font_size_to_pixels (font_size_fixed);
 
         /* Set the fonts. */
         settings = webkit_web_view_get_settings (view);
         webkit_settings_set_zoom_text_only (settings, TRUE);
-        webkit_settings_set_monospace_font_family (settings, font_name_fixed);
-        webkit_settings_set_default_monospace_font_size (settings, font_size_fixed_px);
         webkit_settings_set_serif_font_family (settings, font_name_variable);
         webkit_settings_set_default_font_size (settings, font_size_variable_px);
+        webkit_settings_set_monospace_font_family (settings, font_name_fixed);
+        webkit_settings_set_default_monospace_font_size (settings, font_size_fixed_px);
 
-        g_debug ("Set font-fixed to '%s' (%i) and font-variable to '%s' (%i).",
-                 font_name_fixed, font_size_fixed_px, font_name_variable, font_size_variable_px);
-
-        pango_font_description_free (font_desc_fixed);
         pango_font_description_free (font_desc_variable);
+        pango_font_description_free (font_desc_fixed);
 }
 
 static void
 update_fonts (DhWebView *view)
 {
-        DhSettingsApp *settings;
-        gchar *font_fixed = NULL;
-        gchar *font_variable = NULL;
+        DhSettings *settings;
+        gchar *variable_font = NULL;
+        gchar *fixed_font = NULL;
 
-        settings = dh_settings_app_get_singleton ();
-        dh_settings_app_get_selected_fonts (settings, &font_fixed, &font_variable);
+        settings = dh_settings_get_default ();
+        dh_settings_get_selected_fonts (settings, &variable_font, &fixed_font);
 
-        set_fonts (WEBKIT_WEB_VIEW (view), font_fixed, font_variable);
+        set_fonts (WEBKIT_WEB_VIEW (view), variable_font, fixed_font);
 
-        g_free (font_fixed);
-        g_free (font_variable);
+        g_free (variable_font);
+        g_free (fixed_font);
 }
 
 static void
-settings_fonts_changed_cb (DhSettingsApp *settings,
-                           DhWebView     *view)
+settings_fonts_changed_cb (DhSettings *settings,
+                           DhWebView  *view)
 {
         update_fonts (view);
 }
@@ -230,20 +227,20 @@ static void
 dh_web_view_constructed (GObject *object)
 {
         DhWebView *view = DH_WEB_VIEW (object);
-        WebKitSettings *settings;
-        DhSettingsApp *settings_app;
+        WebKitSettings *webkit_settings;
+        DhSettings *dh_settings;
 
         if (G_OBJECT_CLASS (dh_web_view_parent_class)->constructed != NULL)
                 G_OBJECT_CLASS (dh_web_view_parent_class)->constructed (object);
 
         /* Disable some things we have no need for. */
-        settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (view));
-        webkit_settings_set_enable_html5_database (settings, FALSE);
-        webkit_settings_set_enable_html5_local_storage (settings, FALSE);
-        webkit_settings_set_enable_plugins (settings, FALSE);
+        webkit_settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (view));
+        webkit_settings_set_enable_html5_database (webkit_settings, FALSE);
+        webkit_settings_set_enable_html5_local_storage (webkit_settings, FALSE);
+        webkit_settings_set_enable_plugins (webkit_settings, FALSE);
 
-        settings_app = dh_settings_app_get_singleton ();
-        g_signal_connect_object (settings_app,
+        dh_settings = dh_settings_get_default ();
+        g_signal_connect_object (dh_settings,
                                  "fonts-changed",
                                  G_CALLBACK (settings_fonts_changed_cb),
                                  view,



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