[gnome-utils] dictionary: Port to GSettings



commit afb2cc417fbab3c94dba73dac333039f6191fa52
Author: Emmanuele Bassi <ebassi linux intel com>
Date:   Sat Jan 29 17:13:09 2011 +0000

    dictionary: Port to GSettings
    
    Drop the GConf dependency for the main application, and use the new
    GSettings API from GIO.
    
    This requires some bumping around of dependencies, like GLib and GIO, to
    something relatively recent.
    
    The Dictionary window state is not stored in GSettings, but in a cache
    file in XDG_CACHE_DIR/XDG_USER_CACHE, since it's something that we don't
    need changes notification on, nor we particularly rely upon.

 .gitignore                                         |    3 +
 configure.ac                                       |   42 +-
 gnome-dictionary/data/Makefile.am                  |   67 +--
 gnome-dictionary/data/gnome-dictionary.schemas.in  |  201 ------
 .../data/org.gnome.dictionary.gschema.xml.in.in    |   25 +
 gnome-dictionary/src/Makefile.am                   |   10 +-
 gnome-dictionary/src/gdict-app.c                   |   18 +-
 gnome-dictionary/src/gdict-app.h                   |    4 +-
 gnome-dictionary/src/gdict-common.c                |   12 -
 gnome-dictionary/src/gdict-common.h                |    6 -
 gnome-dictionary/src/gdict-pref-dialog.c           |   94 +---
 gnome-dictionary/src/gdict-pref-dialog.h           |   24 +-
 gnome-dictionary/src/gdict-print.c                 |   24 +-
 gnome-dictionary/src/gdict-source-dialog.c         |   12 +-
 gnome-dictionary/src/gdict-window.c                |  709 ++++++++++----------
 gnome-dictionary/src/gdict-window.h                |   16 +-
 16 files changed, 464 insertions(+), 803 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index bc12198..a79b078 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,9 @@ config.status
 config.sub
 configure
 depcomp
+/gnome-dictionary/data/org.gnome.dictionary.gschema.valid
+/gnome-dictionary/data/org.gnome.dictionary.gschema.xml
+/gnome-dictionary/data/org.gnome.dictionary.gschema.xml.in
 /font-viewer/font-thumbnailer.o
 /font-viewer/font-view.o
 /font-viewer/fontilus.schemas
diff --git a/configure.ac b/configure.ac
index 347b177..71ac464 100644
--- a/configure.ac
+++ b/configure.ac
@@ -35,8 +35,6 @@ GNOME_COMPILE_WARNINGS([maximum])
 
 AC_PATH_XTRA
 
-AC_C_CONST
-AC_C_INLINE
 AC_TYPE_OFF_T
 AC_TYPE_PID_T
 AC_TYPE_SIZE_T
@@ -69,31 +67,29 @@ AC_SUBST(SUN_OS)
 
 dnl pkg-config check
 
-GLIB_REQUIRED=2.20.0
-GIO_REQUIRED=2.16.0
+GLIB_REQUIRED=2.26.0
 GTK_REQUIRED=2.91.1
-GIO_UNIX_REQUIRED=2.18.0
 LIBPANEL_APPLET_REQUIRED=2.13.4
 LIBGTOP_REQUIRED=2.12.0
 LIBCANBERRA_GTK_REQUIRED=0.26
 
-PKG_CHECK_MODULES(GLIB, glib-2.0 >= $GLIB_REQUIRED)
+PKG_CHECK_MODULES([GLIB], [glib-2.0 >= $GLIB_REQUIRED])
 AC_SUBST(GLIB_CFLAGS)
 AC_SUBST(GLIB_LIBS)
 
-PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= $GLIB_REQUIRED)
+PKG_CHECK_MODULES([GTHREAD], [gthread-2.0 >= $GLIB_REQUIRED])
 AC_SUBST(GTHREAD_CFLAGS)
 AC_SUBST(GTHREAD_LIBS)
 
-PKG_CHECK_MODULES(GIO, gio-2.0 >= $GIO_REQUIRED)
+PKG_CHECK_MODULES([GIO], [gio-2.0])
 AC_SUBST(GIO_CFLAGS)
 AC_SUBST(GIO_LIBS)
 
-PKG_CHECK_MODULES(GIO_UNIX, gio-unix-2.0 >= $GIO_UNIX_REQUIRED)
+PKG_CHECK_MODULES([GIO_UNIX], [gio-unix-2.0])
 AC_SUBST(GIO_UNIX_CFLAGS)
 AC_SUBST(GIO_UNIX_LIBS)
 
-PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED)
+PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= $GTK_REQUIRED])
 AC_SUBST(GTK_CFLAGS)
 AC_SUBST(GTK_LIBS)
 
@@ -101,10 +97,6 @@ PKG_CHECK_MODULES(LIBEGGSMCLIENT, gtk+-3.0 >= $GTK_REQUIRED)
 AC_SUBST(LIBEGGSMCLIENT_CFLAGS)
 AC_SUBST(LIBEGGSMCLIENT_LIBS)
 
-PKG_CHECK_MODULES(GCONF, gconf-2.0)
-AC_SUBST(GCONF_CFLAGS)
-AC_SUBST(GCONF_LIBS)
-
 PKG_CHECK_MODULES(DESKTOP_GSETTINGS, gsettings-desktop-schemas)
 AC_SUBST(DESKTOP_GSETTINGS)
 AC_SUBST(DESKTOP_GSETTINGS)
@@ -133,8 +125,12 @@ AC_SUBST(GDICT_VERSION)
 
 # xext for gnome-screenshot; in theory checking for xext should be
 # enough but there are a lot of broken distros out there
-PKG_CHECK_MODULES(XSHAPE, xext x11,
-                  [AC_CHECK_HEADERS(X11/extensions/shape.h, XSHAPE_LIBS="-lXext -lX11")])
+PKG_CHECK_MODULES([XSHAPE],
+                  [xext x11],
+                  [
+                    AC_CHECK_HEADERS([X11/extensions/shape.h],
+                                     [XSHAPE_LIBS="-lXext -lX11"])
+                  ])
 AC_SUBST(XSHAPE_LIBS)
 
 # for anything which calls gconftool-2 correctly
@@ -143,10 +139,6 @@ AS_IF([test "x$GCONFTOOL" = "xno"],
       [AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])]
 )
 
-GLIB_GSETTINGS
-
-AM_GCONF_SOURCE_2
-
 AC_ARG_ENABLE([gdict-applet],
                [AS_HELP_STRING([--enable-gdict-applet=@<:@yes/no@:>@],
                                [Whether to build the Dictionary gnome-panel applet])],
@@ -170,11 +162,11 @@ AS_CASE([$enable_gdict_applet],
 AM_CONDITIONAL([BUILD_GDICT_APPLET], [test "x$enable_gdict_applet" = "xyes"])
 
 # Baobab checks
-PKG_CHECK_MODULES(LIBGTOP, libgtop-2.0 >= $LIBGTOP_REQUIRED)
+PKG_CHECK_MODULES([LIBGTOP], [libgtop-2.0 >= $LIBGTOP_REQUIRED])
 AC_SUBST(LIBGTOP_CFLAGS)
 AC_SUBST(LIBGTOP_LIBS)
 
-PKG_CHECK_MODULES(LIBCANBERRA_GTK, libcanberra-gtk3 >= $LIBCANBERRA_GTK_REQUIRED)
+PKG_CHECK_MODULES([LIBCANBERRA_GTK], [libcanberra-gtk3 >= $LIBCANBERRA_GTK_REQUIRED])
 AC_SUBST(LIBCANBERRA_GTK_CFLAGS)
 AC_SUBST(LIBCANBERRA_GTK_LIBS)
 
@@ -347,13 +339,14 @@ AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], "$GETTEXT_PACKAGE", [Define the gettext pa
 AC_SUBST(GETTEXT_PACKAGE)
 AM_GLIB_GNU_GETTEXT
 
-GLIB_GSETTINGS
-
 # AM_GLIB_GNU_GETTEXT above substs $DATADIRNAME
 # this is the directory where the *.{mo,gmo} files are installed
 gnomeutilslocaledir='${prefix}/${DATADIRNAME}/locale'
 AC_SUBST(gnomeutilslocaledir)
 
+GLIB_GSETTINGS
+AM_GCONF_SOURCE_2
+
 dnl gtk-doc stuff
 GTK_DOC_CHECK([1.10])
 
@@ -392,6 +385,7 @@ AC_CONFIG_FILES([
         gnome-dictionary/libgdict/gdict-version.h
         gnome-dictionary/libgdict/gdict-1.0.pc
         gnome-dictionary/data/Makefile
+        gnome-dictionary/data/org.gnome.dictionary.gschema.xml.in
         gnome-dictionary/docs/Makefile
         gnome-dictionary/docs/reference/Makefile
         gnome-dictionary/docs/reference/gdict/Makefile
diff --git a/gnome-dictionary/data/Makefile.am b/gnome-dictionary/data/Makefile.am
index 4debb14..b3e3e72 100644
--- a/gnome-dictionary/data/Makefile.am
+++ b/gnome-dictionary/data/Makefile.am
@@ -1,13 +1,18 @@
 NULL =
 
+EXTRA_DIST =
+CLEANFILES =
+
 man_MANS = gnome-dictionary.1
+EXTRA_DIST += $(man_MANS)
 
 gdictappdir = $(datadir)/applications
 gdictapp_in_files = gnome-dictionary.desktop.in
 gdictapp_DATA = $(gdictapp_in_files:.desktop.in=.desktop)
+EXTRA_DIST += gnome-dictionary.desktop.in.in
 
 $(gdictapp_in_files): $(gdictapp_in_files:.desktop.in=.desktop.in.in)
-	@sed -e "s|\ VERSION\@|@VERSION@|" $< > $@
+	$(AM_V_GEN)sed -e "s|\ VERSION\@|@VERSION@|" $< > $@
 
 @INTLTOOL_DESKTOP_RULE@
 
@@ -21,64 +26,38 @@ dictsource_in_files = \
 dictsource_DATA = $(dictsource_in_files:.desktop.in=.desktop)
 @INTLTOOL_DESKTOP_RULE@
 
-builderdir        = $(datadir)/gnome-dictionary
-builder_DATA      = gnome-dictionary-preferences.ui \
-		    gnome-dictionary-source.ui
+EXTRA_DIST += $(dictsource_in_files)
+
+builderdir = $(datadir)/gnome-dictionary
+builder_DATA = \
+	gnome-dictionary-preferences.ui	\
+	gnome-dictionary-source.ui	\
+	$(NULL)
 
-uidir           = $(datadir)/gnome-dictionary
-ui_DATA         = gnome-dictionary-ui.xml
+uidir = $(datadir)/gnome-dictionary
+ui_DATA = gnome-dictionary-ui.xml
 
 # applet menu definition
-appletuidir	= $(datadir)/gnome-2.0/ui
-appletui_DATA	= GNOME_DictionaryApplet.xml
+appletuidir = $(datadir)/gnome-2.0/ui
+appletui_DATA = GNOME_DictionaryApplet.xml
 
 if BUILD_GDICT_APPLET
-
 serverdir       = $(libdir)/bonobo/servers
 server_in_files = GNOME_DictionaryApplet.server.in
 server_DATA     = $(server_in_files:.server.in=.server)
 
 $(server_in_files): $(server_in_files:.server.in=.server.in.in)
-	@sed 						\
+	$(AM_V_GEN)sed 					\
 		-e "s|\ VERSION\@|@VERSION@|" 		\
 		-e "s|\ LIBEXECDIR\@|$(libexecdir)|" 	\
 	$< > $@
 
-
 @INTLTOOL_SERVER_RULE@
-
 endif # BUILD_GDICT_APPLET
 
-schemadir   = $(GCONF_SCHEMA_FILE_DIR)
-schemas_in_file = gnome-dictionary.schemas.in
-schema_DATA = $(schemas_in_file:.schemas.in=.schemas)
- INTLTOOL_SCHEMAS_RULE@
-
-EXTRA_DIST = \
-	GNOME_DictionaryApplet.server.in.in 	\
-	gnome-dictionary.desktop.in.in		\
-	$(dictsource_in_files)			\
-	$(man_MANS) 				\
-	$(schemas_in_file) 			\
-	$(builder_DATA) 				\
-	$(ui_DATA)				\
-	$(appletui_DATA)			\
-	$(NULL)
-
-CLEANFILES = 				\
-	$(dictsource_DATA)		\
-	$(server_in_files) 		\
-	$(server_DATA) 			\
-	$(gdictapp_in_files)		\
-	$(gdictapp_DATA) 		\
-	$(schema_DATA)			\
-	$(NULL)
+EXTRA_DIST += GNOME_DictionaryApplet.server.in.in
 
-if GCONF_SCHEMAS_INSTALL
-install-data-local:
-	if test -z "$(DESTDIR)" ; then \
-		GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA) ; \
-	fi
-else
-install-data-local:
-endif
+gsettings_SCHEMAS = org.gnome.dictionary.gschema.xml
+CLEANFILES += $(gsettings_SCHEMAS)
+ INTLTOOL_XML_NOMERGE_RULE@
+ GSETTINGS_RULES@
diff --git a/gnome-dictionary/data/org.gnome.dictionary.gschema.xml.in.in b/gnome-dictionary/data/org.gnome.dictionary.gschema.xml.in.in
new file mode 100644
index 0000000..a04f3b4
--- /dev/null
+++ b/gnome-dictionary/data/org.gnome.dictionary.gschema.xml.in.in
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist>
+  <schema id="org.gnome.dictionary" path="/org/gnome/dictionary/" gettext-domain="@GETTEXT_PACKAGE@">
+    <key name="database" type="s">
+      <default>'!'</default>
+      <_summary>The default database to use</_summary>
+      <_description>The name of the default individual database or meta-database to use on a dictionary source. An exclamation mark ("!") means that all the databases present in a dictionary source should be searched</_description>
+    </key>
+    <key name="strategy" type="s">
+      <default>'exact'</default>
+      <_summary>The default search strategy to use</_summary>
+      <_description>The name of the default search strategy to use on a dictionary source, if available. The default strategy is 'exact', that is match exact words.</_description>
+    </key>
+    <key name="print-font" type="s">
+      <default>'Serif 12'</default>
+      <_summary>The font to be used when printing</_summary>
+      <_description>The font to be used when printing a definition.</_description>
+    </key>
+    <key name="source-name" type="s">
+      <default>'Default'</default>
+      <_summary>The name of the dictionary source used</_summary>
+      <_description>The name of the dictionary source used to retrieve the definitions of words.</_description>
+    </key>
+  </schema>
+</schemalist>
diff --git a/gnome-dictionary/src/Makefile.am b/gnome-dictionary/src/Makefile.am
index 526f433..f11eeb0 100644
--- a/gnome-dictionary/src/Makefile.am
+++ b/gnome-dictionary/src/Makefile.am
@@ -42,7 +42,6 @@ gnome_dictionary_CFLAGS = \
 	$(GLIB_CFLAGS)				\
 	$(GIO_CFLAGS)				\
 	$(GTK_CFLAGS)				\
-	$(GCONF_CFLAGS)				\
 	$(NULL)
 
 gnome_dictionary_LDADD = \
@@ -51,11 +50,9 @@ gnome_dictionary_LDADD = \
 	$(GLIB_LIBS)		\
 	$(GIO_LIBS)		\
 	$(GTK_LIBS)		\
-	$(GCONF_LIBS)		\
 	$(NULL)
 
 if BUILD_GDICT_APPLET
-
 gnome_dictionary_applet_SOURCES = \
 	gdict-about.c 		\
 	gdict-about.h		\
@@ -81,8 +78,8 @@ gnome_dictionary_applet_CFLAGS = \
 	$(GLIB_CFLAGS)				\
 	$(GIO_CFLAG)				\
 	$(GTK_CFLAGS)				\
-	$(GCONF_CFLAG)				\
-	$(APPLET_CFLAGS) \
+	$(APPLET_CFLAGS) 			\
+	$(GCONF_CFLAGS)				\
 	$(NULL)
 
 gnome_dictionary_applet_LDADD = \
@@ -91,8 +88,7 @@ gnome_dictionary_applet_LDADD = \
 	$(GLIB_LIBS)		\
 	$(GIO_LIBS)		\
 	$(GTK_LIBS)		\
-	$(GCONF_LIBS)		\
 	$(APPLET_LIBS)		\
+	$(GCONF_LIBS)		\
 	$(NULL)
-
 endif # BUILD_GDICT_APPLET
diff --git a/gnome-dictionary/src/gdict-app.c b/gnome-dictionary/src/gdict-app.c
index 8f989ba..8d41fbc 100644
--- a/gnome-dictionary/src/gdict-app.c
+++ b/gnome-dictionary/src/gdict-app.c
@@ -320,7 +320,7 @@ gdict_look_up_word_and_quit (GdictApp *app)
 void
 gdict_init (int *argc, char ***argv)
 {
-  GError *gconf_error, *err = NULL;
+  GError *err = NULL;
   GOptionContext *context;
   gchar *loader_path;
   gchar **lookup_words = NULL;
@@ -391,20 +391,8 @@ gdict_init (int *argc, char ***argv)
 
       exit (1);
     }
-  
-  gconf_error = NULL;
-  singleton->gconf_client = gconf_client_get_default ();
-  gconf_client_add_dir (singleton->gconf_client,
-  			GDICT_GCONF_DIR,
-  			GCONF_CLIENT_PRELOAD_ONELEVEL,
-  			&gconf_error);
-  if (gconf_error)
-    {
-      g_warning ("Unable to access GConf: %s\n", gconf_error->message);
-      
-      g_error_free (gconf_error);
-      g_object_unref (singleton->gconf_client);
-    }
+
+  singleton->settings = g_settings_new ("org.gnome.dictionary");
 
   /* add user's path for fetching dictionary sources */  
   singleton->loader = gdict_source_loader_new ();
diff --git a/gnome-dictionary/src/gdict-app.h b/gnome-dictionary/src/gdict-app.h
index 96fd601..e70d585 100644
--- a/gnome-dictionary/src/gdict-app.h
+++ b/gnome-dictionary/src/gdict-app.h
@@ -23,8 +23,8 @@
 #ifndef __GDICT_APP_H__
 #define __GDICT_APP_H__
 
+#include <gio/gio.h>
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 #include <libgdict/gdict.h>
 
 #include "gdict-window.h"
@@ -43,7 +43,7 @@ struct _GdictApp
 {
   GObject parent_instance;
 
-  GConfClient *gconf_client;
+  GSettings *settings;
 
   GSList *lookup_words;
   GSList *match_words;
diff --git a/gnome-dictionary/src/gdict-common.c b/gnome-dictionary/src/gdict-common.c
index 6410a43..4503126 100644
--- a/gnome-dictionary/src/gdict-common.c
+++ b/gnome-dictionary/src/gdict-common.c
@@ -187,15 +187,3 @@ gdict_show_gerror_dialog (GtkWindow   *parent,
   g_error_free (error);
   error = NULL;
 }
-
-gchar *
-gdict_gconf_get_string_with_default (GConfClient *client,
-				     const gchar *key,
-				     const gchar *def)
-{
-  gchar *val;
-
-  val = gconf_client_get_string (client, key, NULL);
-  return val ? val : g_strdup (def);
-}
-
diff --git a/gnome-dictionary/src/gdict-common.h b/gnome-dictionary/src/gdict-common.h
index 5159109..b3fa9da 100644
--- a/gnome-dictionary/src/gdict-common.h
+++ b/gnome-dictionary/src/gdict-common.h
@@ -24,7 +24,6 @@
 #define __GDICT_COMMON_H__
 
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 
 G_BEGIN_DECLS
 
@@ -38,11 +37,6 @@ void     gdict_show_gerror_dialog (GtkWindow   *parent,
 				   const gchar *message,
 				   GError      *error);
 
-gchar *  gdict_gconf_get_string_with_default (GConfClient *client,
-					      const gchar *key,
-					      const gchar *def);
-
-
 G_END_DECLS
 
 #endif /* __GDICT_COMMON_H__ */
diff --git a/gnome-dictionary/src/gdict-pref-dialog.c b/gnome-dictionary/src/gdict-pref-dialog.c
index 75cd5d8..02abae6 100644
--- a/gnome-dictionary/src/gdict-pref-dialog.c
+++ b/gnome-dictionary/src/gdict-pref-dialog.c
@@ -34,7 +34,8 @@
 #endif
 
 #include <glib/gi18n.h>
-#include <gconf/gconf-client.h>
+
+#include <gio/gio.h>
 
 #include "gdict-source-dialog.h"
 #include "gdict-pref-dialog.h"
@@ -66,8 +67,7 @@ struct _GdictPrefDialog
 
   GtkBuilder *builder;
 
-  GConfClient *gconf_client;
-  guint notify_id;
+  GSettings *settings;
   
   gchar *active_source;
   GdictSourceLoader *loader;
@@ -204,14 +204,10 @@ source_renderer_toggled_cb (GtkCellRendererToggle *renderer,
     {
       g_free (dialog->active_source);
       dialog->active_source = g_strdup (name);
-      
-      gconf_client_set_string (dialog->gconf_client,
-      			       GDICT_GCONF_SOURCE_KEY,
-      			       dialog->active_source,
-      			       NULL);
-      
+
+      g_settings_set_string (dialog->settings, GDICT_SETTINGS_SOURCE_KEY, dialog->active_source);
       update_sources_view (dialog);
-      
+
       g_free (name);
     }
   
@@ -434,52 +430,8 @@ font_button_font_set_cb (GtkWidget       *font_button,
   
   g_free (dialog->print_font);
   dialog->print_font = g_strdup (font);
-      
-  gconf_client_set_string (dialog->gconf_client,
-  			   GDICT_GCONF_PRINT_FONT_KEY,
-  			   dialog->print_font,
-  			   NULL);
-}
-
-static void
-gdict_pref_dialog_gconf_notify_cb (GConfClient *client,
-				   guint        cnxn_id,
-				   GConfEntry  *entry,
-				   gpointer     user_data)
-{
-  GdictPrefDialog *dialog = GDICT_PREF_DIALOG (user_data);
-  
-  if (strcmp (entry->key, GDICT_GCONF_SOURCE_KEY) == 0)
-    {
-      if (entry->value && entry->value->type == GCONF_VALUE_STRING)
-        {
-          g_free (dialog->active_source);
-          dialog->active_source = g_strdup (gconf_value_get_string (entry->value));
-        }
-      else
-        {
-          g_free (dialog->active_source);
-          dialog->active_source = g_strdup (GDICT_DEFAULT_SOURCE_NAME);
-        }
-      
-      update_sources_view (dialog);
-    }
-  else if (strcmp (entry->key, GDICT_GCONF_PRINT_FONT_KEY) == 0)
-    {
-      if (entry->value && entry->value->type == GCONF_VALUE_STRING)
-        {
-          g_free (dialog->print_font);
-          dialog->print_font = g_strdup (gconf_value_get_string (entry->value));
-        }
-      else
-        {
-          g_free (dialog->print_font);
-          dialog->print_font = g_strdup (GDICT_DEFAULT_PRINT_FONT);
-        }
 
-      gtk_font_button_set_font_name (GTK_FONT_BUTTON (dialog->font_button),
-		      		     dialog->print_font);
-    }
+  g_settings_set_string (dialog->settings, GDICT_SETTINGS_PRINT_FONT_KEY, dialog->print_font);
 }
 
 static void
@@ -531,11 +483,8 @@ gdict_pref_dialog_finalize (GObject *object)
 {
   GdictPrefDialog *dialog = GDICT_PREF_DIALOG (object);
   
-  if (dialog->notify_id);
-    gconf_client_notify_remove (dialog->gconf_client, dialog->notify_id);
-  
-  if (dialog->gconf_client)
-    g_object_unref (dialog->gconf_client);
+  if (dialog->settings)
+    g_object_unref (dialog->settings);
   
   if (dialog->builder)
     g_object_unref (dialog->builder);
@@ -624,17 +573,7 @@ gdict_pref_dialog_init (GdictPrefDialog *dialog)
   			 "gtk-close",
   			 GTK_RESPONSE_ACCEPT);
 
-  dialog->gconf_client = gconf_client_get_default ();
-  gconf_client_add_dir (dialog->gconf_client,
-  			GDICT_GCONF_DIR,
-  			GCONF_CLIENT_PRELOAD_ONELEVEL,
-  			NULL);
-  dialog->notify_id = gconf_client_notify_add (dialog->gconf_client,
-  					       GDICT_GCONF_DIR,
-		  			       gdict_pref_dialog_gconf_notify_cb,
-  					       dialog,
-  					       NULL,
-  					       NULL);
+  dialog->settings = g_settings_new (GDICT_SETTINGS_SCHEMA);
 
   /* get the UI from the GtkBuilder file */
   dialog->builder = gtk_builder_new ();
@@ -656,9 +595,7 @@ gdict_pref_dialog_init (GdictPrefDialog *dialog)
   dialog->sources_view = GTK_WIDGET (gtk_builder_get_object (dialog->builder, "sources_treeview"));
   build_sources_view (dialog);
 
-  dialog->active_source = gdict_gconf_get_string_with_default (dialog->gconf_client,
-							       GDICT_GCONF_SOURCE_KEY,
-							       GDICT_DEFAULT_SOURCE_NAME);
+  dialog->active_source = g_settings_get_string (dialog->settings, GDICT_SETTINGS_SOURCE_KEY);
 
   dialog->sources_add = GTK_WIDGET (gtk_builder_get_object (dialog->builder, "add_button"));
   gtk_widget_set_tooltip_text (dialog->sources_add,
@@ -671,13 +608,8 @@ gdict_pref_dialog_init (GdictPrefDialog *dialog)
                                _("Remove the currently selected dictionary source"));
   g_signal_connect (dialog->sources_remove, "clicked",
   		    G_CALLBACK (source_remove_clicked_cb), dialog);
-  
-  font = gconf_client_get_string (dialog->gconf_client,
-  				  GDICT_GCONF_PRINT_FONT_KEY,
-  				  NULL);
-  if (!font)
-    font = g_strdup (GDICT_DEFAULT_PRINT_FONT);
-  
+
+  font = g_settings_get_string (dialog->settings, GDICT_SETTINGS_PRINT_FONT_KEY);
   dialog->font_button = GTK_WIDGET (gtk_builder_get_object (dialog->builder, "print_font_button"));
   gtk_font_button_set_font_name (GTK_FONT_BUTTON (dialog->font_button), font);
   gtk_widget_set_tooltip_text (dialog->font_button,
diff --git a/gnome-dictionary/src/gdict-pref-dialog.h b/gnome-dictionary/src/gdict-pref-dialog.h
index db1420b..b0dabac 100644
--- a/gnome-dictionary/src/gdict-pref-dialog.h
+++ b/gnome-dictionary/src/gdict-pref-dialog.h
@@ -36,20 +36,16 @@ G_BEGIN_DECLS
 #define GDICT_DEFAULT_PRINT_FONT 	"Serif 10"
 #define GDICT_DEFAULT_SOURCE_NAME 	"Default"
 
-#define GDICT_GCONF_DIR				"/apps/gnome-dictionary"
-#define GDICT_GCONF_DATABASE_KEY 		GDICT_GCONF_DIR "/database"
-#define GDICT_GCONF_STRATEGY_KEY 		GDICT_GCONF_DIR "/strategy"
-#define GDICT_GCONF_PRINT_FONT_KEY 		GDICT_GCONF_DIR "/print-font"
-#define GDICT_GCONF_SOURCE_KEY 			GDICT_GCONF_DIR "/source-name"
-#define GDICT_GCONF_WINDOW_WIDTH_KEY 		GDICT_GCONF_DIR "/default-window-width"
-#define GDICT_GCONF_WINDOW_HEIGHT_KEY 		GDICT_GCONF_DIR "/default-window-height"
-#define GDICT_GCONF_WINDOW_IS_MAXIMIZED_KEY 	GDICT_GCONF_DIR "/window-is-maximized"
-#define GDICT_GCONF_SIDEBAR_VISIBLE_KEY		GDICT_GCONF_DIR "/sidebar-visible"
-#define GDICT_GCONF_SIDEBAR_PAGE_KEY            GDICT_GCONF_DIR "/sidebar-page"
-#define GDICT_GCONF_SIDEBAR_WIDTH_KEY           GDICT_GCONF_DIR "/sidebar-width"
-#define GDICT_GCONF_STATUSBAR_VISIBLE_KEY	GDICT_GCONF_DIR "/statusbar-visible"
-
-#define DOCUMENT_FONT_KEY 			"/desktop/gnome/interface/document_font_name"
+#define GDICT_SETTINGS_SCHEMA           "org.gnome.dictionary"
+#define GDICT_SETTINGS_PATH             "/org/gnome/dictionary"
+#define GDICT_SETTINGS_DATABASE_KEY 	"database"
+#define GDICT_SETTINGS_STRATEGY_KEY 	"strategy"
+#define GDICT_SETTINGS_PRINT_FONT_KEY 	"print-font"
+#define GDICT_SETTINGS_SOURCE_KEY 	"source-name"
+
+#define DESKTOP_SETTINGS_SCHEMA         "org.gnome.desktop.interface"
+#define DESKTOP_SETTINGS_PATH           "/desktop/gnome/interface"
+#define DOCUMENT_FONT_KEY               "document-font-name"
 
 typedef struct _GdictPrefDialog        GdictPrefDialog;
 typedef struct _GdictPrefDialogClass   GdictPrefDialogClass;
diff --git a/gnome-dictionary/src/gdict-print.c b/gnome-dictionary/src/gdict-print.c
index df8ad64..949b120 100644
--- a/gnome-dictionary/src/gdict-print.c
+++ b/gnome-dictionary/src/gdict-print.c
@@ -28,10 +28,9 @@
 #include <string.h>
 #include <math.h>
 
-#include <gtk/gtk.h>
 #include <glib/gi18n.h>
-
-#include <gconf/gconf-client.h>
+#include <gio/gio.h>
+#include <gtk/gtk.h>
 
 #include <libgdict/gdict.h>
 
@@ -178,19 +177,12 @@ end_print (GtkPrintOperation *operation,
 static gchar *
 get_print_font (void)
 {
-  GConfClient *client;
-  gchar *print_font;
-  
-  client = gconf_client_get_default ();
-  print_font = gconf_client_get_string (client,
-  					GDICT_GCONF_PRINT_FONT_KEY,
-  					NULL);
-  if (!print_font)
-    print_font = g_strdup (GDICT_DEFAULT_PRINT_FONT);
-  
-  g_object_unref (client);
-  
-  return print_font;
+  static GSettings *settings = NULL;
+
+  if (settings == NULL)
+    settings = g_settings_new ("org.gnome.dictionary");
+
+  return g_settings_get_string (settings, "print-font");
 }
 
 void
diff --git a/gnome-dictionary/src/gdict-source-dialog.c b/gnome-dictionary/src/gdict-source-dialog.c
index 7aae710..6d070d8 100644
--- a/gnome-dictionary/src/gdict-source-dialog.c
+++ b/gnome-dictionary/src/gdict-source-dialog.c
@@ -34,7 +34,8 @@
 #endif
 
 #include <glib/gi18n.h>
-#include <gconf/gconf-client.h>
+
+#include <gio/gio.h>
 
 #include "gdict-source-dialog.h"
 #include "gdict-common.h"
@@ -51,9 +52,8 @@ struct _GdictSourceDialog
 
   GtkBuilder *builder; 
 
-  GConfClient *gconf_client;
-  guint notify_id;
-  
+  GSettings *settings;
+
   GdictSourceLoader *loader;
   GdictSource *source;
   gchar *source_name;
@@ -499,8 +499,8 @@ gdict_source_dialog_finalize (GObject *object)
 {
   GdictSourceDialog *dialog = GDICT_SOURCE_DIALOG (object);
 
-  if (dialog->gconf_client)
-    g_object_unref (dialog->gconf_client);
+  if (dialog->settings)
+    g_object_unref (dialog->settings);
   
   if (dialog->builder)
     g_object_unref (dialog->builder);
diff --git a/gnome-dictionary/src/gdict-window.c b/gnome-dictionary/src/gdict-window.c
index a08fa8a..d84d4a6 100644
--- a/gnome-dictionary/src/gdict-window.c
+++ b/gnome-dictionary/src/gdict-window.c
@@ -20,14 +20,13 @@
  * 02111-1307, USA.
  */
 
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <math.h>
+#include <errno.h>
 
 #include <gtk/gtk.h>
 #include <glib.h>
@@ -68,10 +67,14 @@ enum
   PROP_ACTION,
   PROP_SOURCE_LOADER,
   PROP_SOURCE_NAME,
+  PROP_DATABASE,
+  PROP_STRATEGY,
   PROP_PRINT_FONT,
   PROP_DEFBOX_FONT,
   PROP_WORD,
-  PROP_WINDOW_ID
+  PROP_WINDOW_ID,
+
+  LAST_PROP
 };
 
 enum
@@ -81,6 +84,7 @@ enum
   LAST_SIGNAL
 };
 
+static GParamSpec *gdict_window_properties[LAST_PROP] = { NULL, };
 static guint gdict_window_signals[LAST_SIGNAL] = { 0 };
 
 static const GtkTargetEntry drop_types[] =
@@ -117,37 +121,27 @@ gdict_window_dispose (GObject *gobject)
 {
   GdictWindow *window = GDICT_WINDOW (gobject);
 
-  if (window->notify_id)
+  if (window->desktop_settings != NULL)
     {
-      gconf_client_notify_remove (window->gconf_client, window->notify_id);
-      window->notify_id = 0;
+      g_object_unref (window->desktop_settings);
+      window->desktop_settings = NULL;
     }
 
-  if (window->font_notify_id)
-    {
-      gconf_client_notify_remove (window->gconf_client,
-                                  window->font_notify_id);
-      window->font_notify_id = 0;
-    }
-  
-  if (window->gconf_client)
+  if (window->settings != NULL)
     {
-      g_object_unref (window->gconf_client);
-      window->gconf_client = NULL;
+      g_object_unref (window->settings);
+
+      window->settings = NULL;
     }
   
   if (window->context)
     {
       if (window->lookup_start_id)
         {
-          g_signal_handler_disconnect (window->context,
-                                       window->lookup_start_id);
-          g_signal_handler_disconnect (window->context,
-                                       window->definition_id);
-          g_signal_handler_disconnect (window->context,
-                                       window->lookup_end_id);
-          g_signal_handler_disconnect (window->context,
-                                       window->error_id);
+          g_signal_handler_disconnect (window->context, window->lookup_start_id);
+          g_signal_handler_disconnect (window->context, window->definition_id);
+          g_signal_handler_disconnect (window->context, window->lookup_end_id);
+          g_signal_handler_disconnect (window->context, window->error_id);
 
           window->lookup_start_id = 0;
           window->definition_id = 0;
@@ -446,14 +440,15 @@ static void
 gdict_window_set_database (GdictWindow *window,
 			   const gchar *database)
 {
+  if (g_strcmp0 (window->database, database) == 0)
+    return;
+
   g_free (window->database);
 
-  if (database)
+  if (database != NULL && *database != '\0')
     window->database = g_strdup (database);
   else
-    window->database = gdict_gconf_get_string_with_default (window->gconf_client,
-							    GDICT_GCONF_DATABASE_KEY,
-							    GDICT_DEFAULT_DATABASE);
+    window->database = g_settings_get_string (window->settings, GDICT_SETTINGS_DATABASE_KEY);
 
   if (window->defbox)
     gdict_defbox_set_database (GDICT_DEFBOX (window->defbox),
@@ -462,20 +457,23 @@ gdict_window_set_database (GdictWindow *window,
   if (window->db_chooser)
     gdict_database_chooser_set_current_database (GDICT_DATABASE_CHOOSER (window->db_chooser),
                                                  window->database);
+
+  g_object_notify_by_pspec (G_OBJECT (window), gdict_window_properties[PROP_DATABASE]);
 }
 
 static void
 gdict_window_set_strategy (GdictWindow *window,
 			   const gchar *strategy)
 {
+  if (g_strcmp0 (window->strategy, strategy) == 0)
+    return;
+
   g_free (window->strategy);
 
-  if (strategy && strategy[0] != '\0')
+  if (strategy != NULL && *strategy != '\0')
     window->strategy = g_strdup (strategy);
   else
-    window->strategy = gdict_gconf_get_string_with_default (window->gconf_client,
-							    GDICT_GCONF_STRATEGY_KEY,
-							    GDICT_DEFAULT_STRATEGY);
+    window->strategy = g_settings_get_string (window->settings, GDICT_SETTINGS_STRATEGY_KEY);
 
   if (window->speller)
     gdict_speller_set_strategy (GDICT_SPELLER (window->speller),
@@ -484,6 +482,8 @@ gdict_window_set_strategy (GdictWindow *window,
   if (window->strat_chooser)
     gdict_strategy_chooser_set_current_strategy (GDICT_STRATEGY_CHOOSER (window->strat_chooser),
                                                  window->strategy);
+
+  g_object_notify_by_pspec (G_OBJECT (window), gdict_window_properties[PROP_STRATEGY]);
 }
 
 static GdictContext *
@@ -555,16 +555,12 @@ gdict_window_set_defbox_font (GdictWindow *window,
 {
   g_free (window->defbox_font);
 
-  if (defbox_font)
+  if (defbox_font != NULL && *defbox_font != '\0')
     window->defbox_font = g_strdup (defbox_font);
   else
-    window->defbox_font = gdict_gconf_get_string_with_default (window->gconf_client,
-							       DOCUMENT_FONT_KEY,
-							       GDICT_DEFAULT_DEFBOX_FONT);
+    window->defbox_font = g_settings_get_string (window->desktop_settings, DOCUMENT_FONT_KEY);
 
-  if (window->defbox)
-    gdict_defbox_set_font_name (GDICT_DEFBOX (window->defbox),
-				window->defbox_font);
+  gdict_defbox_set_font_name (GDICT_DEFBOX (window->defbox), window->defbox_font);
 }
 
 static void
@@ -573,12 +569,10 @@ gdict_window_set_print_font (GdictWindow *window,
 {
   g_free (window->print_font);
 
-  if (print_font)
+  if (print_font != NULL && *print_font != '\0')
     window->print_font = g_strdup (print_font);
   else
-    window->print_font = gdict_gconf_get_string_with_default (window->gconf_client,
-							      GDICT_GCONF_PRINT_FONT_KEY,
-							      GDICT_DEFAULT_PRINT_FONT);
+    window->print_font = g_settings_get_string (window->settings, GDICT_SETTINGS_PRINT_FONT_KEY);
 }
 
 static void
@@ -675,12 +669,10 @@ gdict_window_set_source_name (GdictWindow *window,
 
   g_free (window->source_name);
 
-  if (source_name)
+  if (source_name != NULL && *source_name != '\0')
     window->source_name = g_strdup (source_name);
   else
-    window->source_name = gdict_gconf_get_string_with_default (window->gconf_client,
-							       GDICT_GCONF_SOURCE_KEY,
-							       GDICT_DEFAULT_SOURCE_NAME);
+    window->source_name = g_settings_get_string (window->settings, GDICT_SETTINGS_SOURCE_KEY);
 
   context = get_context_from_loader (window);
   gdict_window_set_context (window, context);
@@ -689,7 +681,7 @@ gdict_window_set_source_name (GdictWindow *window,
     gdict_source_chooser_set_current_source (GDICT_SOURCE_CHOOSER (window->source_chooser),
                                              window->source_name);
 
-  g_object_notify (G_OBJECT (window), "source-name");
+  g_object_notify_by_pspec (G_OBJECT (window), gdict_window_properties[PROP_SOURCE_NAME]);
 }
 
 static void
@@ -714,6 +706,12 @@ gdict_window_set_property (GObject      *object,
     case PROP_SOURCE_NAME:
       gdict_window_set_source_name (window, g_value_get_string (value));
       break;
+    case PROP_DATABASE:
+      gdict_window_set_database (window, g_value_get_string (value));
+      break;
+    case PROP_STRATEGY:
+      gdict_window_set_strategy (window, g_value_get_string (value));
+      break;
     case PROP_WORD:
       gdict_window_set_word (window, g_value_get_string (value), NULL);
       break;
@@ -748,6 +746,12 @@ gdict_window_get_property (GObject    *object,
     case PROP_SOURCE_NAME:
       g_value_set_string (value, window->source_name);
       break;
+    case PROP_DATABASE:
+      g_value_set_string (value, window->database);
+      break;
+    case PROP_STRATEGY:
+      g_value_set_string (value, window->strategy);
+      break;
     case PROP_WORD:
       g_value_set_string (value, window->word);
       break;
@@ -767,43 +771,154 @@ gdict_window_get_property (GObject    *object,
 }
 
 static void
+gdict_window_store_state (GdictWindow *window)
+{
+  gchar *state_dir, *state_file;
+  GKeyFile *state_key;
+  gchar *data;
+  gsize data_len;
+  GError *error;
+
+  state_dir = g_build_filename (g_get_user_cache_dir (),
+                                "gnome-dictionary-3.0",
+                                NULL);
+
+  if (g_mkdir (state_dir, 0700) == -1)
+    {
+      if (errno != EEXIST)
+        {
+          g_warning ("Unable to create a cache directory: %s", g_strerror (errno));
+          g_free (state_dir);
+          return;
+        }
+    }
+
+  state_file = g_build_filename (state_dir, "window.ini", NULL);
+  state_key = g_key_file_new ();
+
+  /* store the default size of the window and its state, so that
+   * it's picked up by newly created windows
+   */
+  g_key_file_set_integer (state_key, "WindowState", "Width", window->current_width);
+  g_key_file_set_integer (state_key, "WindowState", "Height", window->current_height);
+  g_key_file_set_boolean (state_key, "WindowState", "IsMaximized", window->is_maximized);
+  g_key_file_set_boolean (state_key, "WindowState", "SidebarVisible", window->sidebar_visible);
+  g_key_file_set_boolean (state_key, "WindowState", "StatusbarVisible", window->statusbar_visible);
+  g_key_file_set_integer (state_key, "WindowState", "SidebarWidth", window->sidebar_width);
+  g_key_file_set_string (state_key, "WindowState", "SidebarPage",
+                         gdict_sidebar_current_page (GDICT_SIDEBAR (window->sidebar)));
+
+  error = NULL;
+  data = g_key_file_to_data (state_key, &data_len, &error);
+  if (error != NULL)
+    {
+      g_warning ("Unable to create the window state file: %s", error->message);
+      g_error_free (error);
+    }
+  else
+    {
+      g_file_set_contents (state_file, data, data_len, &error);
+      if (error != NULL)
+        {
+          g_warning ("Unable to write the window state file: %s", error->message);
+          g_error_free (error);
+        }
+
+      g_free (data);
+    }
+
+  g_key_file_free (state_key);
+  g_free (state_file);
+  g_free (state_dir);
+}
+
+static void
+gdict_window_load_state (GdictWindow *window)
+{
+  gchar *state_file;
+  GKeyFile *state_key;
+  gchar *data;
+  gsize data_len;
+  GError *error;
+
+  state_file = g_build_filename (g_get_user_cache_dir (),
+                                 "gnome-dictionary-3.0",
+                                 "window.ini",
+                                 NULL);
+  state_key = g_key_file_new ();
+
+  error = NULL;
+  g_key_file_load_from_file (state_key, state_file, 0, &error);
+  if (error != NULL)
+    {
+      g_warning ("Unable to load the window state file: %s", error->message);
+      g_error_free (error);
+      g_key_file_free (state_key);
+      g_free (state_file);
+      return;
+    }
+
+  window->default_width = g_key_file_get_integer (state_key, "WindowState", "Width", &error);
+  if (error != NULL)
+    {
+      g_clear_error (&error);
+      window->default_width = -1;
+    }
+
+  window->default_height = g_key_file_get_integer (state_key, "WindowState", "Height", &error);
+  if (error != NULL)
+    {
+      g_clear_error (&error);
+      window->default_height = -1;
+    }
+
+  window->is_maximized = g_key_file_get_boolean (state_key, "WindowState", "IsMaximized", &error);
+  if (error != NULL)
+    {
+      g_clear_error (&error);
+      window->is_maximized = FALSE;
+    }
+
+  window->sidebar_visible = g_key_file_get_boolean (state_key, "WindowState", "SidebarVisible", &error);
+  if (error != NULL)
+    {
+      g_clear_error (&error);
+      window->sidebar_visible = FALSE;
+    }
+
+  window->statusbar_visible = g_key_file_get_boolean (state_key, "WindowState", "StatusbarVisible", &error);
+  if (error != NULL)
+    {
+      g_clear_error (&error);
+      window->statusbar_visible = FALSE;
+    }
+
+  window->sidebar_width = g_key_file_get_integer (state_key, "WindowState", "SidebarWidth", &error);
+  if (error != NULL)
+    {
+      g_clear_error (&error);
+      window->sidebar_width = -1;
+    }
+
+  window->sidebar_page = g_key_file_get_string (state_key, "WindowState", "SidebarPage", &error);
+  if (error != NULL)
+    {
+      g_clear_error (&error);
+      window->sidebar_page = NULL;
+    }
+
+  g_key_file_free (state_key);
+  g_free (state_file);
+}
+
+static void
 gdict_window_cmd_file_new (GtkAction   *action,
 			   GdictWindow *window)
 {
   GtkWidget *new_window;
   gchar *word = NULL;
-  
-  /* store the default size of the window and its state, so that
-   * it's picked up by the newly created window
-   */
-  gconf_client_set_int (window->gconf_client,
-		        GDICT_GCONF_WINDOW_WIDTH_KEY,
-		  	window->default_width,
-			NULL);
-  gconf_client_set_int (window->gconf_client,
-		  	GDICT_GCONF_WINDOW_HEIGHT_KEY,
-			window->default_height,
-			NULL);
-  gconf_client_set_bool (window->gconf_client,
-		  	 GDICT_GCONF_WINDOW_IS_MAXIMIZED_KEY,
-			 window->is_maximized,
-			 NULL);
-  gconf_client_set_bool (window->gconf_client,
-		  	 GDICT_GCONF_SIDEBAR_VISIBLE_KEY,
-			 window->sidebar_visible,
-			 NULL);
-  gconf_client_set_int (window->gconf_client,
-		  	GDICT_GCONF_SIDEBAR_WIDTH_KEY,
-			window->sidebar_width,
-			NULL);
-  gconf_client_set_string (window->gconf_client,
-		  	   GDICT_GCONF_SIDEBAR_PAGE_KEY,
-			   gdict_sidebar_current_page (GDICT_SIDEBAR (window->sidebar)),
-			   NULL);
-  gconf_client_set_bool (window->gconf_client,
-		  	 GDICT_GCONF_STATUSBAR_VISIBLE_KEY,
-			 window->statusbar_visible,
-			 NULL);
+
+  gdict_window_store_state (window);
 
   word = gdict_defbox_get_selected_word (GDICT_DEFBOX (window->defbox));
   if (word)
@@ -904,36 +1019,8 @@ gdict_window_cmd_file_close_window (GtkAction   *action,
 {
   g_assert (GDICT_IS_WINDOW (window));
 
-  /* store the default size of the window and its state */
-  gconf_client_set_int (window->gconf_client,
-		        GDICT_GCONF_WINDOW_WIDTH_KEY,
-		  	window->default_width,
-			NULL);
-  gconf_client_set_int (window->gconf_client,
-		  	GDICT_GCONF_WINDOW_HEIGHT_KEY,
-			window->default_height,
-			NULL);
-  gconf_client_set_bool (window->gconf_client,
-		  	 GDICT_GCONF_WINDOW_IS_MAXIMIZED_KEY,
-			 window->is_maximized,
-			 NULL);
-  gconf_client_set_bool (window->gconf_client,
-		         GDICT_GCONF_SIDEBAR_VISIBLE_KEY,
-			 window->sidebar_visible,
-			 NULL);
-  gconf_client_set_int  (window->gconf_client,
-		  	 GDICT_GCONF_SIDEBAR_WIDTH_KEY,
-			 window->sidebar_width,
-			 NULL);
-  gconf_client_set_string (window->gconf_client,
-		           GDICT_GCONF_SIDEBAR_PAGE_KEY,
-			   gdict_sidebar_current_page (GDICT_SIDEBAR (window->sidebar)),
-			   NULL);
-  gconf_client_set_bool (window->gconf_client,
-		  	 GDICT_GCONF_STATUSBAR_VISIBLE_KEY,
-			 window->statusbar_visible,
-			 NULL);
-  
+  gdict_window_store_state (window);
+
   /* if this was called from the uimanager, destroy the widget;
    * otherwise, if it was called from the delete_event, the widget
    * will destroy itself.
@@ -1271,62 +1358,6 @@ gdict_window_state_event_cb (GtkWidget           *widget,
 }
 
 static void
-gdict_window_gconf_notify_cb (GConfClient *client,
-			      guint        cnxn_id,
-			      GConfEntry  *entry,
-			      gpointer     user_data)
-{
-  GdictWindow *window;
-
-  window = GDICT_WINDOW (user_data);
-
-  if (strcmp (entry->key, GDICT_GCONF_PRINT_FONT_KEY) == 0)
-    {
-      if (entry->value && (entry->value->type == GCONF_VALUE_STRING))
-        gdict_window_set_print_font (window, gconf_value_get_string (entry->value));
-      else
-        gdict_window_set_print_font (window, GDICT_DEFAULT_PRINT_FONT);
-    }
-  else if (strcmp (entry->key, GDICT_GCONF_SOURCE_KEY) == 0)
-    {
-      if (entry->value && (entry->value->type == GCONF_VALUE_STRING))
-        gdict_window_set_source_name (window, gconf_value_get_string (entry->value));
-      else
-        gdict_window_set_source_name (window, GDICT_DEFAULT_SOURCE_NAME);
-    }
-  else if (strcmp (entry->key, GDICT_GCONF_DATABASE_KEY) == 0)
-    {
-      if (entry->value && (entry->value->type == GCONF_VALUE_STRING))
-        gdict_window_set_database (window, gconf_value_get_string (entry->value));
-      else
-        gdict_window_set_database (window, GDICT_DEFAULT_DATABASE);
-    }
-  else if (strcmp (entry->key, DOCUMENT_FONT_KEY) == 0)
-    {
-      if (entry->value && (entry->value->type == GCONF_VALUE_STRING))
-        gdict_window_set_defbox_font (window, gconf_value_get_string (entry->value));
-      else
-        gdict_window_set_defbox_font (window, GDICT_DEFAULT_DEFBOX_FONT);
-    }
-  else if (strcmp (entry->key, GDICT_GCONF_SIDEBAR_VISIBLE_KEY) == 0)
-    {
-      if (entry->value && (entry->value->type == GCONF_VALUE_BOOL))
-        gdict_window_set_sidebar_visible (window,
-					  gconf_value_get_bool (entry->value));
-      else
-        gdict_window_set_sidebar_visible (window, FALSE);
-    }
-  else if (strcmp (entry->key, GDICT_GCONF_STATUSBAR_VISIBLE_KEY) == 0)
-    {
-      if (entry->value && (entry->value->type == GCONF_VALUE_BOOL))
-	gdict_window_set_statusbar_visible (window,
-					    gconf_value_get_bool (entry->value));
-      else
-	gdict_window_set_statusbar_visible (window, FALSE);
-    }
-}
-
-static void
 lookup_word (GdictWindow *window,
              gpointer     dummy)
 {
@@ -1438,6 +1469,9 @@ sidebar_page_changed_cb (GdictSidebar *sidebar,
 
   page_id = gdict_sidebar_current_page (sidebar);
 
+  g_free (window->sidebar_page);
+  window->sidebar_page = g_strdup (page_id);
+
   switch (page_id[0])
     {
     case 's':
@@ -1491,38 +1525,8 @@ gdict_window_link_clicked (GdictDefbox *defbox,
                            GdictWindow *window)
 {
   GtkWidget *new_window;
-  
-  /* store the default size of the window and its state, so that
-   * it's picked up by the newly created window
-   */
-  gconf_client_set_int (window->gconf_client,
-		        GDICT_GCONF_WINDOW_WIDTH_KEY,
-		  	window->default_width,
-			NULL);
-  gconf_client_set_int (window->gconf_client,
-		  	GDICT_GCONF_WINDOW_HEIGHT_KEY,
-			window->default_height,
-			NULL);
-  gconf_client_set_bool (window->gconf_client,
-		  	 GDICT_GCONF_WINDOW_IS_MAXIMIZED_KEY,
-			 window->is_maximized,
-			 NULL);
-  gconf_client_set_bool (window->gconf_client,
-		  	 GDICT_GCONF_SIDEBAR_VISIBLE_KEY,
-			 window->sidebar_visible,
-			 NULL);
-  gconf_client_set_int (window->gconf_client,
-		  	GDICT_GCONF_SIDEBAR_WIDTH_KEY,
-			window->sidebar_width,
-			NULL);
-  gconf_client_set_string (window->gconf_client,
-		  	   GDICT_GCONF_SIDEBAR_PAGE_KEY,
-			   gdict_sidebar_current_page (GDICT_SIDEBAR (window->sidebar)),
-			   NULL);
-  gconf_client_set_bool (window->gconf_client,
-		  	 GDICT_GCONF_STATUSBAR_VISIBLE_KEY,
-			 window->statusbar_visible,
-			 NULL);
+
+  gdict_window_store_state (window);
 
   new_window = gdict_window_new (GDICT_WINDOW_ACTION_LOOKUP,
                                  window->loader,
@@ -1567,8 +1571,8 @@ gdict_window_size_allocate (GtkWidget     *widget,
 
   if (!window->is_maximized)
     {
-      window->default_width = allocation->width;
-      window->default_height = allocation->height;
+      window->current_width = allocation->width;
+      window->current_height = allocation->height;
     }
 
   if (GTK_WIDGET_CLASS (gdict_window_parent_class)->size_allocate)
@@ -1595,17 +1599,6 @@ set_window_default_size (GdictWindow *window)
   /* make sure that the widget is realized */
   gtk_widget_realize (widget);
   
-  /* recover the state from GConf */
-  width = gconf_client_get_int (window->gconf_client,
-		  		GDICT_GCONF_WINDOW_WIDTH_KEY,
-				NULL);
-  height = gconf_client_get_int (window->gconf_client,
-		  		 GDICT_GCONF_WINDOW_HEIGHT_KEY,
-				 NULL);
-  is_maximized = gconf_client_get_bool (window->gconf_client,
-		  			GDICT_GCONF_WINDOW_IS_MAXIMIZED_KEY,
-					NULL);
-  
   /* XXX - the user wants gnome-dictionary to resize itself, so
    * we compute the minimum safe geometry needed for displaying
    * the text returned by a dictionary server, which is based
@@ -1613,10 +1606,11 @@ set_window_default_size (GdictWindow *window)
    * I know, but dictionary servers return pre-formatted text
    * and we can't reformat it ourselves.
    */
-  if (width == -1 || height == -1)
+  if (window->default_width == -1 || window->default_height == -1)
     {
       /* Size based on the font size */
       GtkWidget *defbox = window->defbox;
+      gint width, height;
       
       font_size = pango_font_description_get_size (gtk_widget_get_style (defbox)->font_desc);
       font_size = PANGO_PIXELS (font_size);
@@ -1636,14 +1630,17 @@ set_window_default_size (GdictWindow *window)
       gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
       width = MIN (width, monitor.width * 3 / 4);
       height = MIN (height, monitor.height * 3 / 4);
+
+      window->default_width = width;
+      window->default_height = height;
     }
 
   /* Set default size */
   gtk_window_set_default_size (GTK_WINDOW (widget),
-  			       width,
-  			       height);
+                               window->default_width,
+                               window->default_height);
 
-  if (is_maximized)
+  if (window->is_maximized)
     gtk_window_maximize (GTK_WINDOW (widget));
 }
 
@@ -1681,7 +1678,6 @@ gdict_window_constructor (GType                  type,
 {
   GObject *object;
   GdictWindow *window;
-  gint width, height, sidebar_width;
   gboolean is_maximized;
   GtkWidget *hbox;
   GtkWidget *handle;
@@ -1697,11 +1693,14 @@ gdict_window_constructor (GType                  type,
   gboolean statusbar_visible;
   GtkAllocation allocation;
   
-  object = G_OBJECT_CLASS (gdict_window_parent_class)->constructor (type,
-  						   n_construct_properties,
-  						   construct_params);
+  object = G_OBJECT_CLASS (gdict_window_parent_class)->constructor (type, n_construct_properties, construct_params);
   window = GDICT_WINDOW (object);
-  
+
+  window->in_construction = TRUE;
+
+  /* recover the state */
+  gdict_window_load_state (window);
+
   gtk_widget_push_composite_child ();
  
   window->main_box = gtk_vbox_new (FALSE, 0);
@@ -1843,6 +1842,11 @@ gdict_window_constructor (GType                  type,
 			  window->db_chooser);
   gtk_widget_show (window->db_chooser);
 
+  /* bind the database property to the database setting */
+  g_settings_bind (window->settings, GDICT_SETTINGS_DATABASE_KEY,
+                   window, "database",
+                   G_SETTINGS_BIND_DEFAULT);
+
   /* Strategy chooser */
   if (window->context)
     gdict_strategy_chooser_set_context (GDICT_STRATEGY_CHOOSER (window->strat_chooser),
@@ -1856,6 +1860,11 @@ gdict_window_constructor (GType                  type,
                           window->strat_chooser);
   gtk_widget_show (window->strat_chooser);
 
+  /* bind the strategy property to the strategy setting */
+  g_settings_bind (window->settings, GDICT_SETTINGS_STRATEGY_KEY,
+                   window, "strategy",
+                   G_SETTINGS_BIND_DEFAULT);
+
   /* Source chooser */
   window->source_chooser = gdict_source_chooser_new_with_loader (window->loader);
   g_signal_connect (window->source_chooser, "source-activated",
@@ -1867,6 +1876,11 @@ gdict_window_constructor (GType                  type,
                           window->source_chooser);
   gtk_widget_show (window->source_chooser);
 
+  /* bind the source-name property to the source setting */
+  g_settings_bind (window->settings, GDICT_SETTINGS_SOURCE_KEY,
+                   window, "source-name",
+                   G_SETTINGS_BIND_DEFAULT);
+
   gtk_container_add (GTK_CONTAINER (frame2), window->sidebar);
   gtk_widget_show (window->sidebar);
 
@@ -1880,83 +1894,54 @@ gdict_window_constructor (GType                  type,
 
   window->status = gtk_statusbar_new ();
   gtk_box_pack_end (GTK_BOX (window->main_box), window->status, FALSE, FALSE, 0);
-  statusbar_visible = gconf_client_get_bool (window->gconf_client,
-		  			     GDICT_GCONF_STATUSBAR_VISIBLE_KEY,
-					     NULL);
-  gdict_window_set_statusbar_visible (window, statusbar_visible);
+  gdict_window_set_statusbar_visible (window, window->statusbar_visible);
 
   window->progress = gtk_progress_bar_new ();
   gtk_box_pack_end (GTK_BOX (window->status), window->progress, FALSE, FALSE, 0);
 
-  /* retrieve the font size from gconf */
-  font_name = gdict_gconf_get_string_with_default (window->gconf_client,
-						   DOCUMENT_FONT_KEY,
-						   GDICT_DEFAULT_DEFBOX_FONT);
-
+  /* retrieve the document font size */
+  font_name = g_settings_get_string (window->desktop_settings, DOCUMENT_FONT_KEY);
   gdict_window_set_defbox_font (window, font_name);
   font_desc = pango_font_description_from_string (font_name);
   g_free (font_name);
 
-  sidebar_visible = gconf_client_get_bool (window->gconf_client,
-		  			   GDICT_GCONF_SIDEBAR_VISIBLE_KEY,
-					   NULL);
-  gdict_window_set_sidebar_visible (window, sidebar_visible);
-
-  /* retrieve the window state from gconf */
-  is_maximized = gconf_client_get_bool (window->gconf_client,
-		  			GDICT_GCONF_WINDOW_IS_MAXIMIZED_KEY,
-					NULL);
-
-  width = gconf_client_get_int (window->gconf_client,
-		  		GDICT_GCONF_WINDOW_WIDTH_KEY,
-				NULL);
-  height = gconf_client_get_int (window->gconf_client,
-		  		 GDICT_GCONF_WINDOW_HEIGHT_KEY,
-				 NULL);
-  sidebar_width = gconf_client_get_int (window->gconf_client,
-		  			GDICT_GCONF_SIDEBAR_WIDTH_KEY,
-					NULL);
-  sidebar_page = gconf_client_get_string (window->gconf_client,
-		  			  GDICT_GCONF_SIDEBAR_PAGE_KEY,
-					  NULL);
+  g_settings_bind (window->desktop_settings, DOCUMENT_FONT_KEY,
+                   window, "defbox-font",
+                   G_SETTINGS_BIND_GET);
+
+  gdict_window_set_sidebar_visible (window, window->sidebar_visible);
 
   /* if the (width, height) tuple is not defined, use the font to
    * calculate the right window geometry
    */
-  if (width == -1 || height == -1)
+  if (window->default_width == -1 || window->default_height == -1)
     {
       gint font_size;
+      gint width, height;
   
       font_size = pango_font_description_get_size (font_desc);
       font_size = PANGO_PIXELS (font_size);
 
       width = MAX (GDICT_WINDOW_COLUMNS * font_size, GDICT_WINDOW_MIN_WIDTH);
       height = MAX (GDICT_WINDOW_ROWS * font_size, GDICT_WINDOW_MIN_HEIGHT);
-    }
-  else
-    {
+
       window->default_width = width;
       window->default_height = height;
     }
 
   pango_font_description_free (font_desc);
   
-  window->is_maximized = is_maximized;
-  
   gtk_window_set_title (GTK_WINDOW (window), _("Dictionary"));
   gtk_window_set_default_size (GTK_WINDOW (window),
-  			       width,
-  			       height);
-  if (is_maximized)
+                               window->default_width,
+                               window->default_height);
+  if (window->is_maximized)
     gtk_window_maximize (GTK_WINDOW (window));
 
   gtk_widget_get_allocation (GTK_WIDGET (window), &allocation);
-  gtk_paned_set_position (GTK_PANED (handle), allocation.width - sidebar_width);
-  if (sidebar_page)
-    {
-      gdict_sidebar_view_page (GDICT_SIDEBAR (window->sidebar), sidebar_page);
-      g_free (sidebar_page);
-    }
+  gtk_paned_set_position (GTK_PANED (handle), allocation.width - window->sidebar_width);
+  if (window->sidebar_page != NULL)
+    gdict_sidebar_view_page (GDICT_SIDEBAR (window->sidebar), window->sidebar_page);
 
   g_signal_connect (window, "delete-event",
 		    G_CALLBACK (gdict_window_delete_event_cb),
@@ -1971,7 +1956,9 @@ gdict_window_constructor (GType                  type,
   gtk_widget_grab_focus (window->entry);
 
   gtk_widget_pop_composite_child ();
-  
+
+  window->in_construction = FALSE;
+
   return object;
 }
 
@@ -1981,67 +1968,74 @@ gdict_window_class_init (GdictWindowClass *klass)
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
-  gobject_class->finalize = gdict_window_finalize;
-  gobject_class->dispose = gdict_window_dispose;
-  gobject_class->set_property = gdict_window_set_property;
-  gobject_class->get_property = gdict_window_get_property;
-  gobject_class->constructor = gdict_window_constructor;
-
-  widget_class->style_set = gdict_window_style_set;
-  widget_class->size_allocate = gdict_window_size_allocate;
-  
-  g_object_class_install_property (gobject_class,
-  				   PROP_ACTION,
-				   g_param_spec_enum ("action",
-				   		      "Action",
-						      "The default action performed by the window",
-						      GDICT_TYPE_WINDOW_ACTION,
-						      GDICT_WINDOW_ACTION_CLEAR,
-						      (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
-  g_object_class_install_property (gobject_class,
-  				   PROP_SOURCE_LOADER,
-  				   g_param_spec_object ("source-loader",
-  							"Source Loader",
-  							"The GdictSourceLoader to be used to load dictionary sources",
-  							GDICT_TYPE_SOURCE_LOADER,
-  							(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)));
-  g_object_class_install_property (gobject_class,
-		  		   PROP_SOURCE_NAME,
-				   g_param_spec_string ("source-name",
-					   		"Source Name",
-							"The name of the GdictSource to be used",
-							GDICT_DEFAULT_SOURCE_NAME,
-							(G_PARAM_READABLE | G_PARAM_WRITABLE)));
-  g_object_class_install_property (gobject_class,
-  				   PROP_PRINT_FONT,
-  				   g_param_spec_string ("print-font",
-  				   			"Print Font",
-  				   			"The font name to be used when printing",
-  				   			GDICT_DEFAULT_PRINT_FONT,
-  				   			(G_PARAM_READABLE | G_PARAM_WRITABLE)));
-  g_object_class_install_property (gobject_class,
-		  		   PROP_DEFBOX_FONT,
-				   g_param_spec_string ("defbox-font",
-					   		"Defbox Font",
-							"The font name to be used by the defbox widget",
-							GDICT_DEFAULT_DEFBOX_FONT,
-							(G_PARAM_READABLE | G_PARAM_WRITABLE)));
-  g_object_class_install_property (gobject_class,
-		  		   PROP_WORD,
-				   g_param_spec_string ("word",
-					   		"Word",
-							"The word to search",
-							NULL,
-							(G_PARAM_READABLE | G_PARAM_WRITABLE)));
-  g_object_class_install_property (gobject_class,
-  				   PROP_WINDOW_ID,
-  				   g_param_spec_uint ("window-id",
-  				   		      "Window ID",
-  				   		      "The unique identifier for this window",
-  				   		      0,
-  				   		      G_MAXUINT,
-  				   		      0,
-  				   		      G_PARAM_READABLE));
+  gdict_window_properties[PROP_ACTION] =
+    g_param_spec_enum ("action",
+                       "Action",
+                       "The default action performed by the window",
+                       GDICT_TYPE_WINDOW_ACTION,
+                       GDICT_WINDOW_ACTION_CLEAR,
+                       G_PARAM_READWRITE |
+                       G_PARAM_STATIC_STRINGS |
+                       G_PARAM_CONSTRUCT_ONLY);
+
+  gdict_window_properties[PROP_SOURCE_LOADER] =
+    g_param_spec_object ("source-loader",
+                         "Source Loader",
+                         "The GdictSourceLoader to be used to load dictionary sources",
+                         GDICT_TYPE_SOURCE_LOADER,
+                         G_PARAM_READWRITE |
+                         G_PARAM_STATIC_STRINGS |
+                         G_PARAM_CONSTRUCT_ONLY);
+
+  gdict_window_properties[PROP_SOURCE_NAME] =
+    g_param_spec_string ("source-name",
+                         "Source Name",
+                         "The name of the GdictSource to be used",
+                         GDICT_DEFAULT_SOURCE_NAME,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  gdict_window_properties[PROP_DATABASE] =
+    g_param_spec_string ("database",
+                         "Database",
+                         "The name of the database to search",
+                         GDICT_DEFAULT_DATABASE,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  gdict_window_properties[PROP_STRATEGY] =
+    g_param_spec_string ("strategy",
+                         "Strategy",
+                         "The name of the strategy",
+                         GDICT_DEFAULT_STRATEGY,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  gdict_window_properties[PROP_PRINT_FONT] =
+    g_param_spec_string ("print-font",
+                         "Print Font",
+                         "The font name to be used when printing",
+                         GDICT_DEFAULT_PRINT_FONT,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  gdict_window_properties[PROP_DEFBOX_FONT] =
+    g_param_spec_string ("defbox-font",
+                         "Defbox Font",
+                         "The font name to be used by the defbox widget",
+                         GDICT_DEFAULT_DEFBOX_FONT,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  gdict_window_properties[PROP_WORD] =
+    g_param_spec_string ("word",
+                         "Word",
+                         "The word to search",
+                         NULL,
+                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  gdict_window_properties[PROP_WINDOW_ID] =
+    g_param_spec_uint ("window-id",
+                       "Window ID",
+                       "The unique identifier for this window",
+                       0, G_MAXUINT,
+                       0,
+                       G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
   gdict_window_signals[CREATED] =
     g_signal_new ("created",
@@ -2052,58 +2046,32 @@ gdict_window_class_init (GdictWindowClass *klass)
                   g_cclosure_marshal_VOID__OBJECT,
                   G_TYPE_NONE, 1,
                   GDICT_TYPE_WINDOW);
+
+  gobject_class->finalize = gdict_window_finalize;
+  gobject_class->dispose = gdict_window_dispose;
+  gobject_class->set_property = gdict_window_set_property;
+  gobject_class->get_property = gdict_window_get_property;
+  gobject_class->constructor = gdict_window_constructor;
+
+  g_object_class_install_properties (gobject_class,
+                                     LAST_PROP,
+                                     gdict_window_properties);
+
+  widget_class->style_set = gdict_window_style_set;
+  widget_class->size_allocate = gdict_window_size_allocate;
 }
 
 static void
 gdict_window_init (GdictWindow *window)
 {
-  GError *gconf_error;
-
   window->action = GDICT_WINDOW_ACTION_CLEAR;
   
   window->loader = NULL;
   window->context = NULL;
 
-  window->gconf_client = gconf_client_get_default ();
-
-  gconf_error = NULL;
-  gconf_client_add_dir (window->gconf_client,
-  			GDICT_GCONF_DIR,
-  			GCONF_CLIENT_PRELOAD_NONE,
-  			&gconf_error);
-  if (gconf_error)
-    {
-      gdict_show_gerror_dialog (NULL,
-		                _("Unable to connect to GConf"),
-		                gconf_error);
-    }
-
-  window->notify_id = gconf_client_notify_add (window->gconf_client,
-  					       GDICT_GCONF_DIR,
-  					       gdict_window_gconf_notify_cb,
-  					       window,
-  					       NULL,
-  					       &gconf_error);
-  if (gconf_error)
-    {
-      gdict_show_gerror_dialog (NULL,
-		                _("Unable to get notification for preferences"),
-		                gconf_error);
-    }
+  window->settings = g_settings_new (GDICT_SETTINGS_SCHEMA);
+  window->desktop_settings = g_settings_new (DESKTOP_SETTINGS_SCHEMA);
 
-  window->font_notify_id = gconf_client_notify_add (window->gconf_client,
-		  				    DOCUMENT_FONT_KEY,
-						    gdict_window_gconf_notify_cb,
-						    window,
-						    NULL,
-						    &gconf_error);
-  if (gconf_error)
-    {
-      gdict_show_gerror_dialog (NULL,
-		                _("Unable to get notification for the document font"),
-		                gconf_error);
-    }
-  
   window->word = NULL;
   window->source_name = NULL;
   window->print_font = NULL;
@@ -2115,6 +2083,9 @@ gdict_window_init (GdictWindow *window)
   window->default_width = -1;
   window->default_height = -1;
   window->is_maximized = FALSE;
+  window->sidebar_visible = FALSE;
+  window->statusbar_visible = FALSE;
+  window->sidebar_page = NULL;
   
   window->window_id = (gulong) time (NULL);
 
diff --git a/gnome-dictionary/src/gdict-window.h b/gnome-dictionary/src/gdict-window.h
index b62007a..8c35670 100644
--- a/gnome-dictionary/src/gdict-window.h
+++ b/gnome-dictionary/src/gdict-window.h
@@ -23,9 +23,9 @@
 #ifndef __GDICT_WINDOW_H__
 #define __GDICT_WINDOW_H__
 
+#include <gio/gio.h>
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 #include <libgdict/gdict.h>
 
 G_BEGIN_DECLS
@@ -94,20 +94,24 @@ struct _GdictWindow
   gchar *strategy;
   gchar *print_font;
   gchar *defbox_font;
-  
-  GConfClient *gconf_client;
-  guint notify_id;
-  guint font_notify_id;
+
+  GSettings *settings;
+  GSettings *desktop_settings;
 
   GdkCursor *busy_cursor;
 
   gint default_width;
   gint default_height;
+  gint current_width;
+  gint current_height;
   gint sidebar_width;
-  
+
+  gchar *sidebar_page;
+
   guint is_maximized      : 1;
   guint sidebar_visible   : 1;
   guint statusbar_visible : 1;
+  guint in_construction   : 1;
   
   gulong window_id;
 };



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