]> git.sur5r.net Git - glabels/blobdiff - src/prefs-model.c
Imported Upstream version 3.0.0
[glabels] / src / prefs-model.c
index 1d5c2199bfbea68aa59eaf42ed711c507e01dc45..b9232a797228b08de33b2568146c0a4275cd225a 100644 (file)
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
-
 /*
- *  (GLABELS) Label and Business Card Creation program for GNOME
- *
- *  prefs-model.c:  Application preferences model module
+ *  prefs-model.h
+ *  Copyright (C) 2001-2009  Jim Evins <evins@snaught.com>.
  *
- *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *  This file is part of gLabels.
  *
- *  This program is free software; you can redistribute it and/or modify
+ *  gLabels is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
+ *  the Free Software Foundation, either version 3 of the License, or
  *  (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
+ *  gLabels is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *  along with gLabels.  If not, see <http://www.gnu.org/licenses/>.
  */
+
 #include <config.h>
 
 #include "prefs-model.h"
 
-#include <libglabels/db.h>
-#include <libglabels/xml.h>
-#include <gtk/gtkpapersize.h>
+#include <gio/gio.h>
+#include <gtk/gtk.h>
+#include <string.h>
 
+#include <libglabels.h>
 #include "marshal.h"
-#include "util.h"
+#include "str-util.h"
 #include "color.h"
 
 #include "debug.h"
 
+
 /*========================================================*/
 /* Private macros and constants.                          */
 /*========================================================*/
 
-/* GConf keys */
-#define BASE_KEY                            "/apps/glabels"
-
-#define PREF_UNITS                          "/units"
-#define PREF_DEFAULT_PAGE_SIZE              "/default-page-size"
-
-#define PREF_DEFAULT_FONT_FAMILY            "/default-font-family"
-#define PREF_DEFAULT_FONT_SIZE              "/default-font-size"
-#define PREF_DEFAULT_FONT_WEIGHT            "/default-font-weight"
-#define PREF_DEFAULT_FONT_ITALIC_FLAG       "/default-font-italic-flag"
-#define PREF_DEFAULT_TEXT_COLOR             "/default-text-color"
-#define PREF_DEFAULT_TEXT_ALIGNMENT         "/default-text-alignment"
-#define PREF_DEFAULT_TEXT_LINE_SPACING      "/default-text-line-spacing"
-
-#define PREF_DEFAULT_LINE_WIDTH             "/default-line-width"
-#define PREF_DEFAULT_LINE_COLOR             "/default-line-color"
-
-#define PREF_DEFAULT_FILL_COLOR             "/default-fill-color"
-
-#define PREF_MAIN_TOOLBAR_VISIBLE           "/main-toolbar-visible"
-#define PREF_MAIN_TOOLBAR_BUTTONS_STYLE     "/main-toolbar-buttons-style"
-#define PREF_MAIN_TOOLBAR_VIEW_TOOLTIPS     "/main-toolbar-view-tooltips"
-
-#define PREF_DRAWING_TOOLBAR_VISIBLE        "/drawing-toolbar-visible"
-#define PREF_DRAWING_TOOLBAR_VIEW_TOOLTIPS  "/drawing-toolbar-view-tooltips"
-
-#define PREF_PROPERTY_TOOLBAR_VISIBLE        "/property-toolbar-visible"
-#define PREF_PROPERTY_TOOLBAR_VIEW_TOOLTIPS  "/property-toolbar-view-tooltips"
-
-#define PREF_GRID_VISIBLE                   "/grid-visible"
-#define PREF_MARKUP_VISIBLE                 "/markup-visible"
-
-#define PREF_MAX_RECENTS                    "/max-recents"
-
-#define PREF_RECENT_TEMPLATES               "/recent-templates"
-#define PREF_MAX_RECENT_TEMPLATES           "/max-recent-templates"
-
 /* Default values */
-#define DEFAULT_UNITS_STRING_US    units_to_string (LGL_UNITS_INCH)
-#define DEFAULT_PAGE_SIZE_US       "US-Letter"
-
-#define DEFAULT_UNITS_STRING_METRIC units_to_string (LGL_UNITS_MM)
-#define DEFAULT_PAGE_SIZE_METRIC   "A4"
-
-#define DEFAULT_FONT_FAMILY        "Sans"
-#define DEFAULT_FONT_SIZE          14.0
-#define DEFAULT_FONT_WEIGHT_STRING gl_util_weight_to_string (PANGO_WEIGHT_NORMAL)
-#define DEFAULT_FONT_ITALIC_FLAG   FALSE
-#define DEFAULT_TEXT_ALIGN_STRING  gl_util_align_to_string (PANGO_ALIGN_LEFT)
-#define DEFAULT_TEXT_COLOR         GL_COLOR (0,0,0)
-#define DEFAULT_TEXT_LINE_SPACING  1.0
+#define DEFAULT_UNITS_STRING_US     lgl_units_get_id (LGL_UNITS_INCH)
+#define DEFAULT_PAGE_SIZE_US        "US-Letter"
 
-#define DEFAULT_LINE_WIDTH         1.0
-#define DEFAULT_LINE_COLOR         GL_COLOR_A (0, 0, 0, 255)
+#define DEFAULT_UNITS_STRING_METRIC lgl_units_get_id (LGL_UNITS_MM)
+#define DEFAULT_PAGE_SIZE_METRIC    "A4"
 
-#define DEFAULT_FILL_COLOR         GL_COLOR_A (0, 255, 0, 255)
 
 /*========================================================*/
 /* Private types.                                         */
 /*========================================================*/
 
-enum {
-       CHANGED,
-       LAST_SIGNAL
+struct _glPrefsModelPrivate {
+
+        GSettings *locale;
+        GSettings *objects;
+        GSettings *ui;
+
 };
 
+enum {
+        CHANGED,
+        LAST_SIGNAL
+};
 
 
 /*========================================================*/
@@ -113,642 +70,701 @@ enum {
 
 static guint signals[LAST_SIGNAL] = {0};
 
+
 /*========================================================*/
 /* Private function prototypes.                           */
 /*========================================================*/
 
 static void           gl_prefs_model_finalize      (GObject             *object);
 
-static void           notify_cb                    (GConfClient         *client,
-                                                   guint                cnxn_id,
-                                                   GConfEntry          *entry,
-                                                   glPrefsModel        *prefs_model);
-
-static gchar         *get_string                   (GConfClient         *client,
-                                                   const gchar         *key,
-                                                   const gchar         *def);
-
-static gboolean       get_bool                     (GConfClient         *client,
-                                                   const gchar         *key,
-                                                   gboolean             def);
-
-static gint           get_int                      (GConfClient         *client,
-                                                   const gchar         *key,
-                                                   gint                 def);
+static void           gsettings_changed_cb         (glPrefsModel        *prefs_model);
 
-static gdouble        get_float                    (GConfClient         *client,
-                                                   const gchar         *key,
-                                                   gdouble              def);
 
-static lglUnitsType   string_to_units              (const gchar         *string);
-static const gchar   *units_to_string              (lglUnitsType         units);
-
-
-\f
 /*****************************************************************************/
 /* Boilerplate object stuff.                                                 */
 /*****************************************************************************/
-G_DEFINE_TYPE (glPrefsModel, gl_prefs_model, G_TYPE_OBJECT);
+G_DEFINE_TYPE (glPrefsModel, gl_prefs_model, G_TYPE_OBJECT)
+
 
 static void
 gl_prefs_model_class_init (glPrefsModelClass *class)
 {
-       GObjectClass *object_class = G_OBJECT_CLASS (class);
+        GObjectClass *object_class = G_OBJECT_CLASS (class);
 
-       gl_debug (DEBUG_PREFS, "START");
+        gl_debug (DEBUG_PREFS, "START");
 
-       gl_prefs_model_parent_class = g_type_class_peek_parent (class);
+        gl_prefs_model_parent_class = g_type_class_peek_parent (class);
 
-       object_class->finalize = gl_prefs_model_finalize;
+        object_class->finalize = gl_prefs_model_finalize;
 
-       signals[CHANGED] =
-               g_signal_new ("changed",
-                             G_OBJECT_CLASS_TYPE (object_class),
-                             G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (glPrefsModelClass, changed),
-                             NULL, NULL,
-                             gl_marshal_VOID__VOID,
-                             G_TYPE_NONE,
-                             0);
+        signals[CHANGED] =
+                g_signal_new ("changed",
+                              G_OBJECT_CLASS_TYPE (object_class),
+                              G_SIGNAL_RUN_LAST,
+                              G_STRUCT_OFFSET (glPrefsModelClass, changed),
+                              NULL, NULL,
+                              gl_marshal_VOID__VOID,
+                              G_TYPE_NONE,
+                              0);
 
-       gl_debug (DEBUG_PREFS, "END");
+        gl_debug (DEBUG_PREFS, "END");
 }
 
+
 static void
-gl_prefs_model_init (glPrefsModel *prefs_model)
+gl_prefs_model_init (glPrefsModel *this)
 {
-       gl_debug (DEBUG_PREFS, "START");
+        gl_debug (DEBUG_PREFS, "START");
 
-        prefs_model->gconf_client = gconf_client_get_default ();
+        this->priv = g_new0 (glPrefsModelPrivate, 1);
 
-        g_return_if_fail (prefs_model->gconf_client != NULL);
-        gconf_client_add_dir (prefs_model->gconf_client,
-                              BASE_KEY,
-                              GCONF_CLIENT_PRELOAD_ONELEVEL,
-                              NULL);
-         
-        gconf_client_notify_add (prefs_model->gconf_client,
-                                 BASE_KEY,
-                                 (GConfClientNotifyFunc)notify_cb, prefs_model,
-                                 NULL, NULL);
+        this->priv->locale  = g_settings_new ("org.gnome.glabels-3.locale");
+        this->priv->objects = g_settings_new ("org.gnome.glabels-3.objects");
+        this->priv->ui      = g_settings_new ("org.gnome.glabels-3.ui");
 
-       gl_debug (DEBUG_PREFS, "END");
+        g_return_if_fail (this->priv->locale != NULL);
+        g_return_if_fail (this->priv->objects != NULL);
+        g_return_if_fail (this->priv->ui != NULL);
+        g_signal_connect_swapped (G_OBJECT (this->priv->locale), "changed",
+                                  G_CALLBACK (gsettings_changed_cb), this);
+        g_signal_connect_swapped (G_OBJECT (this->priv->objects), "changed",
+                                  G_CALLBACK (gsettings_changed_cb), this);
+        g_signal_connect_swapped (G_OBJECT (this->priv->ui), "changed",
+                                  G_CALLBACK (gsettings_changed_cb), this);
+
+        gl_debug (DEBUG_PREFS, "END");
 }
 
+
 static void
 gl_prefs_model_finalize (GObject *object)
 {
-       glPrefsModel *prefs_model = GL_PREFS_MODEL (object);
+        glPrefsModel *this = GL_PREFS_MODEL (object);
 
-       gl_debug (DEBUG_PREFS, "START");
+        gl_debug (DEBUG_PREFS, "START");
 
-       g_return_if_fail (object && GL_IS_PREFS_MODEL (object));
+        g_return_if_fail (object && GL_IS_PREFS_MODEL (object));
 
-       g_object_unref (G_OBJECT(prefs_model->gconf_client));
-       g_free (prefs_model->default_page_size);
-       g_free (prefs_model->default_font_family);
+        g_object_unref (G_OBJECT(this->priv->locale));
+        g_object_unref (G_OBJECT(this->priv->objects));
+        g_object_unref (G_OBJECT(this->priv->ui));
+        g_free (this->priv);
 
-       G_OBJECT_CLASS (gl_prefs_model_parent_class)->finalize (object);
+        G_OBJECT_CLASS (gl_prefs_model_parent_class)->finalize (object);
 
-       gl_debug (DEBUG_PREFS, "END");
+        gl_debug (DEBUG_PREFS, "END");
 }
 
+
 /*****************************************************************************/
 /* New prefs_model object.                                                   */
 /*****************************************************************************/
 glPrefsModel *
 gl_prefs_model_new (void)
 {
-       glPrefsModel *prefs_model;
+        glPrefsModel *this;
 
-       gl_debug (DEBUG_PREFS, "START");
+        gl_debug (DEBUG_PREFS, "START");
 
-       prefs_model = GL_PREFS_MODEL (g_object_new (gl_prefs_model_get_type(), NULL));
+        this = GL_PREFS_MODEL (g_object_new (gl_prefs_model_get_type(), NULL));
 
-       gl_debug (DEBUG_PREFS, "END");
+        gl_debug (DEBUG_PREFS, "END");
 
-       return prefs_model;
+        return this;
 }
 
 
+/*****************************************************************************/
+/* Set units.                                                                */
+/*****************************************************************************/
+void
+gl_prefs_model_set_units (glPrefsModel     *this,
+                          lglUnits          units)
+{
+        g_settings_set_string (this->priv->locale,
+                               "units",
+                               lgl_units_get_id (units));
+}
+
 
 /*****************************************************************************/
-/* Save all settings.                                                        */
+/* Get units.                                                                */
 /*****************************************************************************/
-void 
-gl_prefs_model_save_settings (glPrefsModel *prefs_model)
+lglUnits
+gl_prefs_model_get_units (glPrefsModel     *this)
 {
-       gl_debug (DEBUG_PREFS, "START");
-       
-       g_return_if_fail (prefs_model && GL_IS_PREFS_MODEL(prefs_model));
-       g_return_if_fail (prefs_model->gconf_client != NULL);
+        const gchar  *pgsize;
+        gchar        *string;
+        lglUnits      units;
+
+        string = g_settings_get_string (this->priv->locale, "units");
+        
+        /* If not set, make educated guess about locale default. */
+        if ( !string || (*string == '\0') )
+        {
+                pgsize = gtk_paper_size_get_default ();
+                if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
+                {
+                        string = g_strdup (DEFAULT_UNITS_STRING_US);
+                }
+                else
+                {
+                        string = g_strdup (DEFAULT_UNITS_STRING_METRIC);
+                }
+        }
 
-       /* We are saving settings because presumably some of them have been changed. */
-       g_signal_emit (G_OBJECT(prefs_model), signals[CHANGED], 0);
+        units = lgl_units_from_id (string);
+        g_free (string);
 
-       /* Units */
-       gconf_client_set_string (prefs_model->gconf_client,
-                                BASE_KEY PREF_UNITS,
-                                units_to_string(prefs_model->units),
-                                NULL);
-        lgl_xml_set_default_units (prefs_model->units);
+        /* If invalid, make an educated guess from locale. */
+        if (units == LGL_UNITS_INVALID)
+        {
+                pgsize = gtk_paper_size_get_default ();
+                if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
+                {
+                        units = LGL_UNITS_INCH;
+                }
+                else
+                {
+                        units = LGL_UNITS_MM;
+                }
+        }
 
-       /* Default page size */
-       gconf_client_set_string (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_PAGE_SIZE,
-                                prefs_model->default_page_size,
-                                NULL);
+        return units;
+}
 
 
-       /* Text properties */
-       gconf_client_set_string (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_FONT_FAMILY,
-                                prefs_model->default_font_family,
-                                NULL);
+/*****************************************************************************/
+/* Set default page size.                                                    */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_page_size (glPrefsModel     *this,
+                                      const gchar      *page_size)
+{
+        g_settings_set_string (this->priv->locale,
+                               "default-page-size",
+                               page_size);
+}
 
-       gconf_client_set_float  (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_FONT_SIZE,
-                                prefs_model->default_font_size,
-                                NULL);
 
-       gconf_client_set_string (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_FONT_WEIGHT,
-                                gl_util_weight_to_string(prefs_model->default_font_weight),
-                                NULL);
+/*****************************************************************************/
+/* Get default page size.                                                    */
+/*****************************************************************************/
+gchar *
+gl_prefs_model_get_default_page_size (glPrefsModel     *this)
+{
+        const gchar *pgsize;
+        gchar       *page_size;
+        lglPaper    *paper;
 
-       gconf_client_set_int    (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_TEXT_COLOR,
-                                prefs_model->default_text_color,
-                                NULL);
+        page_size = g_settings_get_string (this->priv->locale, "default-page-size");
 
-       gconf_client_set_string (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_TEXT_ALIGNMENT,
-                                gl_util_align_to_string(prefs_model->default_text_alignment),
-                                NULL);
+        /* If not set, make educated guess about locale default. */
+        if ( !page_size || (*page_size == '\0') )
+        {
+                pgsize = gtk_paper_size_get_default ();
+                if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
+                {
+                        page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
+                }
+                else
+                {
+                        page_size = g_strdup (DEFAULT_PAGE_SIZE_METRIC);
+                }
+        }
 
-       gconf_client_set_float  (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_TEXT_LINE_SPACING,
-                                prefs_model->default_text_line_spacing,
-                                NULL);
+        /* Proof read the default page size -- it must be a valid id. */
+        /* (For compatability with older versions.) */
+        paper = lgl_db_lookup_paper_from_id (page_size);
+        if ( paper == NULL ) {
+                g_free (page_size);
+                page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
+        } else {
+                lgl_paper_free (paper);
+        }
 
-       /* Line properties */
-       gconf_client_set_float  (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_LINE_WIDTH,
-                                prefs_model->default_line_width,
-                                NULL);
+        return page_size;
+}
 
-       gconf_client_set_int    (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_LINE_COLOR,
-                                prefs_model->default_line_color,
-                                NULL);
 
+/*****************************************************************************/
+/* Set default font family.                                                  */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_font_family (glPrefsModel     *this,
+                                        const gchar      *family)
+{
+        g_settings_set_string (this->priv->objects,
+                               "default-font-family",
+                               family);
+}
 
-       /* Fill properties */
-       gconf_client_set_int    (prefs_model->gconf_client,
-                                BASE_KEY PREF_DEFAULT_FILL_COLOR,
-                                prefs_model->default_fill_color,
-                                NULL);
 
+/*****************************************************************************/
+/* Get default font family.                                                  */
+/*****************************************************************************/
+gchar *
+gl_prefs_model_get_default_font_family (glPrefsModel     *this)
+{
+        gchar *family;
 
-       /* Main Toolbar */
-       gconf_client_set_bool (prefs_model->gconf_client,
-                              BASE_KEY PREF_MAIN_TOOLBAR_VISIBLE,
-                              prefs_model->main_toolbar_visible,
-                              NULL);
+        family = g_settings_get_string (this->priv->objects,
+                                        "default-font-family");
 
-       gconf_client_set_int (prefs_model->gconf_client,
-                             BASE_KEY PREF_MAIN_TOOLBAR_BUTTONS_STYLE,
-                             prefs_model->main_toolbar_buttons_style,
-                             NULL);
+        return family;
+}
 
-       gconf_client_set_bool (prefs_model->gconf_client,
-                              BASE_KEY PREF_MAIN_TOOLBAR_VIEW_TOOLTIPS,
-                              prefs_model->main_toolbar_view_tooltips,
-                              NULL);
 
-       /* Drawing Toolbar */
-       gconf_client_set_bool (prefs_model->gconf_client,
-                              BASE_KEY PREF_DRAWING_TOOLBAR_VISIBLE,
-                              prefs_model->drawing_toolbar_visible,
-                              NULL);
-
-       gconf_client_set_bool (prefs_model->gconf_client,
-                              BASE_KEY PREF_DRAWING_TOOLBAR_VIEW_TOOLTIPS,
-                              prefs_model->drawing_toolbar_view_tooltips,
-                              NULL);
-
-       /* Property Toolbar */
-       gconf_client_set_bool (prefs_model->gconf_client,
-                              BASE_KEY PREF_PROPERTY_TOOLBAR_VISIBLE,
-                              prefs_model->property_toolbar_visible,
-                              NULL);
-
-       gconf_client_set_bool (prefs_model->gconf_client,
-                              BASE_KEY PREF_PROPERTY_TOOLBAR_VIEW_TOOLTIPS,
-                              prefs_model->property_toolbar_view_tooltips,
-                              NULL);
-
-       /* View properties */
-       gconf_client_set_bool (prefs_model->gconf_client,
-                              BASE_KEY PREF_GRID_VISIBLE,
-                              prefs_model->grid_visible,
-                              NULL);
-
-       gconf_client_set_bool (prefs_model->gconf_client,
-                              BASE_KEY PREF_MARKUP_VISIBLE,
-                              prefs_model->markup_visible,
-                              NULL);
-
-       /* Recent files */
-       gconf_client_set_int (prefs_model->gconf_client,
-                             BASE_KEY PREF_MAX_RECENTS,
-                             prefs_model->max_recents,
-                             NULL);
-
-       /* Recent templates */
-       gconf_client_set_list (prefs_model->gconf_client,
-                              BASE_KEY PREF_RECENT_TEMPLATES,
-                               GCONF_VALUE_STRING,
-                               prefs_model->recent_templates,
-                               NULL);
-       gconf_client_set_int (prefs_model->gconf_client,
-                             BASE_KEY PREF_MAX_RECENT_TEMPLATES,
-                             prefs_model->max_recent_templates,
-                             NULL);
-
-
-       gconf_client_suggest_sync (prefs_model->gconf_client, NULL);
-       
-       gl_debug (DEBUG_PREFS, "END");
-}
-
-/*****************************************************************************/
-/* Load all settings.                                                        */
+/*****************************************************************************/
+/* Set default font size.                                                    */
 /*****************************************************************************/
 void
-gl_prefs_model_load_settings (glPrefsModel *prefs_model)
+gl_prefs_model_set_default_font_size (glPrefsModel     *this,
+                                      gdouble           size)
 {
-        const gchar *pgsize, *default_units_string, *default_page_size;
-       gchar    *string;
-       lglPaper *paper;
-        GSList   *p, *p_next;
+        g_settings_set_double (this->priv->objects,
+                               "default-font-size",
+                               size);
+}
 
-       gl_debug (DEBUG_PREFS, "START");
-       
-       g_return_if_fail (prefs_model && GL_IS_PREFS_MODEL(prefs_model));
-       g_return_if_fail (prefs_model->gconf_client != NULL);
 
-        /* Make educated guess about locale defaults. */
-        pgsize = gtk_paper_size_get_default ();
-        if ( strcmp (pgsize,GTK_PAPER_NAME_LETTER) == 0 )
-        {
-                default_units_string = DEFAULT_UNITS_STRING_US;
-                default_page_size    = DEFAULT_PAGE_SIZE_US;
-        }
-        else
-        {
-                default_units_string = DEFAULT_UNITS_STRING_METRIC;
-                default_page_size    = DEFAULT_PAGE_SIZE_METRIC;
-        }
+/*****************************************************************************/
+/* Get default font size.                                                    */
+/*****************************************************************************/
+gdouble
+gl_prefs_model_get_default_font_size (glPrefsModel     *this)
+{
+        gdouble size;
 
-       /* Units */
-       string =
-               get_string (prefs_model->gconf_client,
-                           BASE_KEY PREF_UNITS,
-                           default_units_string);
-       prefs_model->units = string_to_units( string );
-       g_free( string );
-        lgl_xml_set_default_units (prefs_model->units);
-
-
-       /* Page size */
-        g_free (prefs_model->default_page_size);
-       prefs_model->default_page_size =
-               get_string (prefs_model->gconf_client,
-                           BASE_KEY PREF_DEFAULT_PAGE_SIZE,
-                           default_page_size);
-
-       /* Text properties */
-        g_free (prefs_model->default_font_family);
-       prefs_model->default_font_family =
-               get_string (prefs_model->gconf_client,
-                           BASE_KEY PREF_DEFAULT_FONT_FAMILY,
-                           DEFAULT_FONT_FAMILY);
-
-       prefs_model->default_font_size =
-               get_float (prefs_model->gconf_client,
-                          BASE_KEY PREF_DEFAULT_FONT_SIZE,
-                          DEFAULT_FONT_SIZE);
-
-       string =
-               get_string (prefs_model->gconf_client,
-                           BASE_KEY PREF_DEFAULT_FONT_WEIGHT,
-                           DEFAULT_FONT_WEIGHT_STRING);
-       prefs_model->default_font_weight = gl_util_string_to_weight( string );
-       g_free( string );
-
-       prefs_model->default_text_color =
-               get_int (prefs_model->gconf_client,
-                        BASE_KEY PREF_DEFAULT_TEXT_COLOR,
-                        DEFAULT_TEXT_COLOR);
-
-       string =
-               get_string (prefs_model->gconf_client,
-                           BASE_KEY PREF_DEFAULT_TEXT_ALIGNMENT,
-                           DEFAULT_TEXT_ALIGN_STRING);
-       prefs_model->default_text_alignment = gl_util_string_to_align( string );
-       g_free( string );
-
-       prefs_model->default_text_line_spacing =
-               get_float (prefs_model->gconf_client,
-                          BASE_KEY PREF_DEFAULT_TEXT_LINE_SPACING,
-                          DEFAULT_TEXT_LINE_SPACING);
-
-       gl_debug (DEBUG_PREFS, "text_line_spacing = %f", prefs_model->default_text_line_spacing);
-
-       /* Line properties */
-       prefs_model->default_line_width =
-               get_float (prefs_model->gconf_client,
-                          BASE_KEY PREF_DEFAULT_LINE_WIDTH,
-                          DEFAULT_LINE_WIDTH);
-       prefs_model->default_line_color =
-               get_int (prefs_model->gconf_client,
-                        BASE_KEY PREF_DEFAULT_LINE_COLOR,
-                        DEFAULT_LINE_COLOR);
-
-       /* Fill properties */
-       prefs_model->default_fill_color =
-               get_int (prefs_model->gconf_client,
-                        BASE_KEY PREF_DEFAULT_FILL_COLOR,
-                        DEFAULT_FILL_COLOR);
-
-
-       /* User Inferface/Main Toolbar */
-       prefs_model->main_toolbar_visible =
-               get_bool (prefs_model->gconf_client,
-                         BASE_KEY PREF_MAIN_TOOLBAR_VISIBLE,
-                         TRUE);
-
-       prefs_model->main_toolbar_buttons_style =
-               get_int (prefs_model->gconf_client,
-                        BASE_KEY PREF_MAIN_TOOLBAR_BUTTONS_STYLE,
-                        GL_TOOLBAR_SYSTEM);
-
-       prefs_model->main_toolbar_view_tooltips =
-               get_bool (prefs_model->gconf_client,
-                         BASE_KEY PREF_MAIN_TOOLBAR_VIEW_TOOLTIPS,
-                         TRUE);
-
-       /* User Inferface/Drawing Toolbar */
-       prefs_model->drawing_toolbar_visible =
-               get_bool (prefs_model->gconf_client,
-                         BASE_KEY PREF_DRAWING_TOOLBAR_VISIBLE,
-                         TRUE);
-
-       prefs_model->drawing_toolbar_view_tooltips =
-               get_bool (prefs_model->gconf_client,
-                         BASE_KEY PREF_DRAWING_TOOLBAR_VIEW_TOOLTIPS,
-                         TRUE);
-
-       /* User Inferface/Property Toolbar */
-       prefs_model->property_toolbar_visible =
-               get_bool (prefs_model->gconf_client,
-                         BASE_KEY PREF_PROPERTY_TOOLBAR_VISIBLE,
-                         TRUE);
-
-       prefs_model->property_toolbar_view_tooltips =
-               get_bool (prefs_model->gconf_client,
-                         BASE_KEY PREF_PROPERTY_TOOLBAR_VIEW_TOOLTIPS,
-                         TRUE);
-
-
-       /* View properties */
-       prefs_model->grid_visible =
-               get_bool (prefs_model->gconf_client,
-                         BASE_KEY PREF_GRID_VISIBLE,
-                         TRUE);
-
-       prefs_model->markup_visible =
-               get_bool (prefs_model->gconf_client,
-                         BASE_KEY PREF_MARKUP_VISIBLE,
-                         TRUE);
-
-       /* Recent files */
-       prefs_model->max_recents =
-               get_int (prefs_model->gconf_client,
-                        BASE_KEY PREF_MAX_RECENTS,
-                        -1);
-
-       /* Recent templates */
-        for (p=prefs_model->recent_templates; p != NULL; p=p->next)
-        {
-                g_free (p->data);
-        }
-        g_slist_free (prefs_model->recent_templates);
-       prefs_model->recent_templates =
-               gconf_client_get_list (prefs_model->gconf_client,
-                                       BASE_KEY PREF_RECENT_TEMPLATES,
-                                       GCONF_VALUE_STRING,
-                                       NULL);
-       prefs_model->max_recent_templates =
-               get_int (prefs_model->gconf_client,
-                        BASE_KEY PREF_MAX_RECENT_TEMPLATES,
-                        5);
-
-
-       /* Proof read the default page size -- it must be a valid id. */
-       /* (For compatability with older versions.) */
-       paper = lgl_db_lookup_paper_from_id (prefs_model->default_page_size);
-       if ( paper == NULL ) {
-               prefs_model->default_page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
-       } else {
-               lgl_paper_free (paper);
-               paper = NULL;
-       }
-
-        /* Proof read the recent templates list.  Make sure the template names */
-        /* are valid.  Remove from list if not. */
-        for (p=prefs_model->recent_templates; p != NULL; p=p_next)
-        {
-                p_next = p->next;
+        size = g_settings_get_double (this->priv->objects,
+                                      "default-font-size");
 
-                if ( !lgl_db_does_template_name_exist (p->data) )
-                {
-                        g_free (p->data);
-                        prefs_model->recent_templates = g_slist_delete_link (prefs_model->recent_templates, p);
-                }
-        }
+        return size;
+}
+
+
+/*****************************************************************************/
+/* Set default font weight.                                                  */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_font_weight (glPrefsModel     *this,
+                                        PangoWeight       weight)
+{
+        g_settings_set_string (this->priv->objects,
+                               "default-font-weight",
+                               gl_str_util_weight_to_string(weight));
+}
 
-       gl_debug (DEBUG_PREFS, "max_recents = %d", prefs_model->max_recents);
 
+/*****************************************************************************/
+/* Get default font weight.                                                  */
+/*****************************************************************************/
+PangoWeight
+gl_prefs_model_get_default_font_weight (glPrefsModel     *this)
+{
+        gchar       *string;
+        PangoWeight  weight;
 
-       g_signal_emit (G_OBJECT(prefs_model), signals[CHANGED], 0);
+        string = g_settings_get_string (this->priv->objects,
+                                        "default-font-weight");
+        weight = gl_str_util_string_to_weight (string);
+        g_free (string);
 
-       gl_debug (DEBUG_PREFS, "END");
+        return weight;
 }
 
-/*---------------------------------------------------------------------------*/
-/* PRIVATE.  Key changed callback.                                           */
-/*---------------------------------------------------------------------------*/
-static void 
-notify_cb (GConfClient  *client,
-          guint         cnxn_id,
-          GConfEntry   *entry,
-          glPrefsModel *prefs_model)
+
+/*****************************************************************************/
+/* Set default font italic flag.                                             */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_font_italic_flag (glPrefsModel     *this,
+                                             gboolean          italic_flag)
 {
-       gl_debug (DEBUG_PREFS, "Key was changed: %s", entry->key);
+        g_settings_set_boolean (this->priv->objects,
+                                "default-font-italic-flag",
+                                italic_flag);
+}
 
-       gl_prefs_model_load_settings (prefs_model);
+
+/*****************************************************************************/
+/* Get default font italic flag.                                             */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_default_font_italic_flag (glPrefsModel     *this)
+{
+        gboolean italic_flag;
+
+        italic_flag = g_settings_get_boolean (this->priv->objects,
+                                              "default-font-italic-flag");
+
+        return italic_flag;
 }
 
-/*---------------------------------------------------------------------------*/
-/* PRIVATE.  Utilities to get values with defaults.                          */
-/*---------------------------------------------------------------------------*/
-static gchar*
-get_string (GConfClient *client,
-           const gchar *key,
-           const gchar *def)
+
+/*****************************************************************************/
+/* Set default text color.                                                   */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_text_color (glPrefsModel     *this,
+                                       guint             color)
+{
+        g_settings_set_value (this->priv->objects,
+                              "default-text-color",
+                              g_variant_new_uint32 (color));
+}
+
+
+/*****************************************************************************/
+/* Get default text color.                                                   */
+/*****************************************************************************/
+guint
+gl_prefs_model_get_default_text_color (glPrefsModel     *this)
+{
+        GVariant *value;
+        guint     color;
+
+        value = g_settings_get_value (this->priv->objects, "default-text-color");
+        color = g_variant_get_uint32 (value);
+        g_variant_unref (value);
+
+        return color;
+}
+
+
+/*****************************************************************************/
+/* Set default text alignment.                                               */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_text_alignment (glPrefsModel     *this,
+                                           PangoAlignment    alignment)
 {
-       gchar* val;
+        g_settings_set_string (this->priv->objects,
+                               "default-text-alignment",
+                               gl_str_util_align_to_string(alignment));
+}
 
-       val = gconf_client_get_string (client, key, NULL);
 
-       if (val != NULL) {
+/*****************************************************************************/
+/* Get default text alignment.                                               */
+/*****************************************************************************/
+PangoAlignment
+gl_prefs_model_get_default_text_alignment (glPrefsModel     *this)
+{
+        gchar          *string;
+        PangoAlignment  alignment;
 
-               return val;
+        string = g_settings_get_string (this->priv->objects,
+                                        "default-text-alignment");
+        alignment = gl_str_util_string_to_align (string);
+        g_free (string);
 
-       } else {
+        return alignment;
+}
 
-               return def ? g_strdup (def) : NULL;
 
-       }
+/*****************************************************************************/
+/* Set default text line spacing.                                            */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_text_line_spacing (glPrefsModel     *this,
+                                              gdouble           spacing)
+{
+        g_settings_set_double (this->priv->objects,
+                               "default-text-line-spacing",
+                               spacing);
 }
 
-static gboolean
-get_bool (GConfClient *client,
-         const gchar *key,
-         gboolean     def)
+
+/*****************************************************************************/
+/* Get default text line spacing.                                            */
+/*****************************************************************************/
+gdouble
+gl_prefs_model_get_default_text_line_spacing (glPrefsModel     *this)
 {
-       GConfValue* val;
-       gboolean retval;
+        gdouble spacing;
 
-       val = gconf_client_get (client, key, NULL);
+        spacing = g_settings_get_double (this->priv->objects,
+                                         "default-text-line-spacing");
 
-       if (val != NULL) {
+        return spacing;
+}
 
-               if ( val->type == GCONF_VALUE_BOOL ) {
-                       retval = gconf_value_get_bool (val);
-               } else {
-                       retval = def;
-               }
 
-               gconf_value_free (val);
+/*****************************************************************************/
+/* Set default line width.                                                   */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_line_width (glPrefsModel     *this,
+                                       gdouble           width)
+{
+        g_settings_set_double (this->priv->objects,
+                               "default-line-width",
+                               width);
+}
 
-               return retval;
 
-       } else {
+/*****************************************************************************/
+/* Get default line width.                                                   */
+/*****************************************************************************/
+gdouble
+gl_prefs_model_get_default_line_width (glPrefsModel     *this)
+{
+        gdouble width;
 
-               return def;
+        width = g_settings_get_double (this->priv->objects,
+                                       "default-line-width");
 
-       }
+        return width;
 }
 
-static gint
-get_int (GConfClient *client,
-        const gchar *key,
-        gint         def)
+
+/*****************************************************************************/
+/* Set default line color.                                                   */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_line_color (glPrefsModel     *this,
+                                       guint             color)
 {
-       GConfValue* val;
-       gint retval;
+        g_settings_set_value (this->priv->objects,
+                              "default-line-color",
+                              g_variant_new_uint32 (color));
+}
 
-       val = gconf_client_get (client, key, NULL);
 
-       if (val != NULL) {
+/*****************************************************************************/
+/* Get default line color.                                                   */
+/*****************************************************************************/
+guint
+gl_prefs_model_get_default_line_color (glPrefsModel     *this)
+{
+        GVariant *value;
+        guint     color;
 
-               if ( val->type == GCONF_VALUE_INT) {
-                       retval = gconf_value_get_int(val);
-               } else {
-                       retval = def;
-               }
+        value = g_settings_get_value (this->priv->objects, "default-line-color");
+        color = g_variant_get_uint32 (value);
+        g_variant_unref (value);
 
-               gconf_value_free (val);
+        return color;
+}
 
-               return retval;
 
-       } else {
+/*****************************************************************************/
+/* Set default fill color.                                                   */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_fill_color (glPrefsModel     *this,
+                                       guint             color)
+{
+        g_settings_set_value (this->priv->objects,
+                              "default-fill-color",
+                              g_variant_new_uint32 (color));
+}
 
-               return def;
 
-       }
+/*****************************************************************************/
+/* Get default fill color.                                                   */
+/*****************************************************************************/
+guint
+gl_prefs_model_get_default_fill_color (glPrefsModel     *this)
+{
+        GVariant *value;
+        guint     color;
+
+        value = g_settings_get_value (this->priv->objects, "default-fill-color");
+        color = g_variant_get_uint32 (value);
+        g_variant_unref (value);
+
+        return color;
 }
 
-static gdouble
-get_float (GConfClient *client,
-          const gchar *key,
-          gdouble      def)
+
+/*****************************************************************************/
+/* Set main toolbar visible flag.                                            */
+/*****************************************************************************/
+void
+gl_prefs_model_set_main_toolbar_visible (glPrefsModel     *this,
+                                         gboolean          visible)
 {
-       GConfValue* val;
-       gdouble retval;
+        g_settings_set_boolean (this->priv->ui,
+                                "main-toolbar-visible",
+                                visible);
+}
+
+
+/*****************************************************************************/
+/* Get main toolbar visible flag.                                            */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_main_toolbar_visible (glPrefsModel     *this)
+{
+        gboolean visible;
 
-       val = gconf_client_get (client, key, NULL);
+        visible = g_settings_get_boolean (this->priv->ui,
+                                          "main-toolbar-visible");
+
+        return visible;
+}
 
-       if (val != NULL) {
 
-               if ( val->type == GCONF_VALUE_FLOAT ) {
-                       retval = gconf_value_get_float(val);
-               } else {
-                       retval = def;
-               }
+/*****************************************************************************/
+/* Set drawing toolbar visible flag.                                         */
+/*****************************************************************************/
+void
+gl_prefs_model_set_drawing_toolbar_visible (glPrefsModel     *this,
+                                            gboolean          visible)
+{
+        g_settings_set_boolean (this->priv->ui,
+                                "drawing-toolbar-visible",
+                                visible);
+}
 
-               gconf_value_free (val);
 
-               return retval;
+/*****************************************************************************/
+/* Get drawing toolbar visible flag.                                         */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_drawing_toolbar_visible (glPrefsModel     *this)
+{
+        gboolean visible;
 
-       } else {
-               return def;
+        visible = g_settings_get_boolean (this->priv->ui,
+                                          "drawing-toolbar-visible");
 
-       }
+        return visible;
 }
 
-/*---------------------------------------------------------------------------*/
-/* PRIVATE.  Utilities to deal with units.                                   */
-/*---------------------------------------------------------------------------*/
-static lglUnitsType
-string_to_units (const gchar *string)
+
+/*****************************************************************************/
+/* Set property toolbar visible flag.                                        */
+/*****************************************************************************/
+void
+gl_prefs_model_set_property_toolbar_visible (glPrefsModel     *this,
+                                             gboolean          visible)
+{
+        g_settings_set_boolean (this->priv->ui,
+                                "property-toolbar-visible",
+                                visible);
+}
+
+
+/*****************************************************************************/
+/* Get property toolbar visible flag.                                        */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_property_toolbar_visible (glPrefsModel     *this)
+{
+        gboolean visible;
+
+        visible = g_settings_get_boolean (this->priv->ui,
+                                          "property-toolbar-visible");
+
+        return visible;
+}
+
+
+/*****************************************************************************/
+/* Set grid visible flag.                                                    */
+/*****************************************************************************/
+void
+gl_prefs_model_set_grid_visible (glPrefsModel     *this,
+                                 gboolean          visible)
+{
+        g_settings_set_boolean (this->priv->ui,
+                                "grid-visible",
+                                visible);
+}
+
+
+/*****************************************************************************/
+/* Get grid visible flag.                                                    */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_grid_visible (glPrefsModel     *this)
+{
+        gboolean visible;
+
+        visible = g_settings_get_boolean (this->priv->ui,
+                                          "grid-visible");
+
+        return visible;
+}
+
+
+/*****************************************************************************/
+/* Set markup visible flag.                                                  */
+/*****************************************************************************/
+void
+gl_prefs_model_set_markup_visible (glPrefsModel     *this,
+                                   gboolean          visible)
+{
+        g_settings_set_boolean (this->priv->ui,
+                                "markup-visible",
+                                visible);
+}
+
+
+/*****************************************************************************/
+/* Get markup visible flag.                                                  */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_markup_visible (glPrefsModel     *this)
 {
-       lglUnitsType units;
+        gboolean visible;
 
-       if (g_strcasecmp (string, "Points") == 0) {
-               units = LGL_UNITS_POINT;
-       } else if (g_strcasecmp (string, "Inches") == 0) {
-               units = LGL_UNITS_INCH;
-       } else if (g_strcasecmp (string, "Millimeters") == 0) {
-               units = LGL_UNITS_MM;
-       } else {
-               units = LGL_UNITS_INCH;
-       }
+        visible = g_settings_get_boolean (this->priv->ui,
+                                          "markup-visible");
 
-       return units;
+        return visible;
 }
 
-static const
-gchar *units_to_string (lglUnitsType units)
+
+/*****************************************************************************/
+/* Set max recents.                                                          */
+/*****************************************************************************/
+void
+gl_prefs_model_set_max_recents (glPrefsModel     *this,
+                                gint              max_recents)
 {
-       switch (units) {
-       case LGL_UNITS_POINT:
-               return "Points";
-               break;
-       case LGL_UNITS_INCH:
-               return "Inches";
-               break;
-       case LGL_UNITS_MM:
-               return "Millimeters";
-               break;
-       default:
-               return "Inches";
-               break;
-       }
+        g_settings_set_int (this->priv->ui,
+                            "max-recents",
+                            max_recents);
 }
 
 
+/*****************************************************************************/
+/* Get max recents.                                                          */
+/*****************************************************************************/
+gint
+gl_prefs_model_get_max_recents (glPrefsModel     *this)
+{
+        gint max_recents;
+
+        max_recents = g_settings_get_int (this->priv->ui,
+                                          "max-recents");
+
+        return max_recents;
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Key changed callback.                                           */
+/*---------------------------------------------------------------------------*/
+static void 
+gsettings_changed_cb (glPrefsModel *this)
+{
+        g_signal_emit (G_OBJECT(this), signals[CHANGED], 0);
+}
+
+
+
+
+/*
+ * Local Variables:       -- emacs
+ * mode: C                -- emacs
+ * c-basic-offset: 8      -- emacs
+ * tab-width: 8           -- emacs
+ * indent-tabs-mode: nil  -- emacs
+ * End:                   -- emacs
+ */