[regexxer] Migration from GConf to GSettings.



commit 6a6d0a07e577aaae3bea925a5e12eeabfc0f786a
Author: Fabien Parent <parent f gmail com>
Date:   Sat Feb 19 15:45:36 2011 +0100

    Migration from GConf to GSettings.

 Makefile.am                       |   32 ++++---------
 configure.ac                      |    7 +--
 src/filebuffer.cc                 |   28 ++++++------
 src/filetree.cc                   |   14 ++----
 src/filetree.h                    |    3 +-
 src/globalstrings.h               |   15 +++---
 src/main.cc                       |   42 -----------------
 src/mainwindow.cc                 |   35 ++++++--------
 src/mainwindow.h                  |    4 +-
 src/prefdialog.cc                 |   79 ++++++++++++-------------------
 src/prefdialog.h                  |    6 +--
 src/settings.h                    |   51 ++++++++++++++++++++
 ui/org.gnome.regexxer.gschema.xml |   34 +++++++++++++
 ui/regexxer.schemas.in            |   93 -------------------------------------
 14 files changed, 172 insertions(+), 271 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index b34c425..2dcec88 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -64,7 +64,8 @@ src_regexxer_SOURCES =		\
 	src/translation.cc	\
 	src/translation.h	\
 	src/undostack.cc	\
-	src/undostack.h
+	src/undostack.h		\
+	src/settings.h
 
 nodist_src_regexxer_SOURCES =	\
 	ui/stockimages.h
@@ -83,9 +84,7 @@ iconthemedir        = $(datadir)/icons/hicolor
 appicondir          = $(iconthemedir)/48x48/apps
 dist_appicon_DATA   = ui/regexxer.png
 
-schemas_in_files    = ui/regexxer.schemas.in
-schemasdir          = $(GCONF_SCHEMA_FILE_DIR)
-schemas_DATA        = ui/regexxer.schemas
+gsettingsschema_DATA = ui/org.gnome.regexxer.gschema.xml
 
 desktop_in_files    = ui/regexxer.desktop.in
 desktopdir          = $(datadir)/applications
@@ -94,27 +93,23 @@ desktop_DATA        = ui/regexxer.desktop
 dist_intltool       = intltool-extract.in intltool-merge.in intltool-update.in
 stockimages         = ui/stock_save_all_16.png ui/stock_save_all_24.png
 
-dist_noinst_DATA    = $(stockimages) $(dist_intltool) $(desktop_in_files) $(schemas_in_files)
+dist_noinst_DATA    = $(stockimages) $(dist_intltool) $(desktop_in_files)
 dist_noinst_SCRIPTS = autogen.sh
 
 BUILT_SOURCES       = $(nodist_src_regexxer_SOURCES)
-CLEANFILES          = $(nodist_src_regexxer_SOURCES) $(desktop_DATA) $(schemas_DATA)
+CLEANFILES          = $(nodist_src_regexxer_SOURCES) $(desktop_DATA)
 DISTCLEANFILES      = intltool-extract intltool-merge intltool-update
 
 pixbuf_csource      = $(GDK_PIXBUF_CSOURCE) --raw
 update_icon_cache   = $(GTK_UPDATE_ICON_CACHE) --ignore-theme-index --force
-gconftool           = GCONF_CONFIG_SOURCE='$(GCONF_SCHEMA_CONFIG_SOURCE)' $(GCONFTOOL)
 
- INTLTOOL_SCHEMAS_RULE@
 @INTLTOOL_DESKTOP_RULE@
 
-if GCONF_SCHEMAS_INSTALL
-install-data-hook: install-schemas install-update-icon-cache
-uninstall-hook: uninstall-schemas uninstall-update-icon-cache
-else
 install-data-hook: install-update-icon-cache
+	$(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)
+#$(gsettingsupdateschemacache) $(gsettingsschemadir)
+
 uninstall-hook: uninstall-update-icon-cache
-endif
 
 dist-hook: dist-changelog
 
@@ -144,15 +139,6 @@ dist-changelog:
 	  then mv -f .ChangeLog.tmp "$(top_distdir)/ChangeLog"; \
 	  else rm -f .ChangeLog.tmp; exit 1; fi; \
 	fi
-
-install-schemas: $(schemas_DATA)
-	@$(POST_INSTALL)
-	test -n "$(DESTDIR)" || $(gconftool) --makefile-install-rule $(schemas_DATA)
-
-uninstall-schemas: $(schemas_DATA)
-	@$(POST_UNINSTALL)
-	test -n "$(DESTDIR)" || $(gconftool) --makefile-uninstall-rule $(schemas_DATA)
-
 install-update-icon-cache:
 	@$(POST_INSTALL)
 	test -n "$(DESTDIR)" || $(update_icon_cache) "$(iconthemedir)"
@@ -161,7 +147,7 @@ uninstall-update-icon-cache:
 	@$(POST_UNINSTALL)
 	test -n "$(DESTDIR)" || $(update_icon_cache) "$(iconthemedir)"
 
-.PHONY: dist-changelog install-schemas uninstall-schemas \
+.PHONY: dist-changelog \
 	install-update-icon-cache uninstall-update-icon-cache
 
 .DELETE_ON_ERROR:
diff --git a/configure.ac b/configure.ac
index d78654a..de430d2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -35,17 +35,14 @@ AC_SUBST([GETTEXT_PACKAGE], [regexxer])
 AM_GNU_GETTEXT_VERSION([0.11])
 AM_GLIB_GNU_GETTEXT
 
-# gmodule-export-2.0 adds -Wl,--export-dynamic to the linker flags
-# so that libglade can get at the custom widget creation functions.
 PKG_CHECK_MODULES([REGEXXER_MODULES],
                   [gtk+-2.0 >= 2.16.0 gtkmm-2.4 >= 2.12.0 glibmm-2.4 >= 2.27.4.1
-				  gconfmm-2.6 >= 2.6.1 gtksourceviewmm-2.0 >= 2.9.0])
+                  gtksourceviewmm-2.0 >= 2.9.0])
 
 DK_PKG_PATH_PROG([GDK_PIXBUF_CSOURCE], [gdk-pixbuf-2.0], [gdk-pixbuf-csource])
 DK_PKG_PATH_PROG([GTK_UPDATE_ICON_CACHE], [gtk+-2.0], [gtk-update-icon-cache])
-DK_PKG_PATH_PROG([GCONFTOOL], [gconf-2.0], [gconftool-2])
 
-AM_GCONF_SOURCE_2
+GLIB_GSETTINGS
 
 AC_LANG([C++])
 
diff --git a/src/filebuffer.cc b/src/filebuffer.cc
index 69a237e..b7f0974 100644
--- a/src/filebuffer.cc
+++ b/src/filebuffer.cc
@@ -24,9 +24,9 @@
 #include "miscutils.h"
 #include "stringutils.h"
 #include "translation.h"
+#include "settings.h"
 
 #include <glib.h>
-#include <gconfmm/client.h>
 #include <algorithm>
 #include <list>
 
@@ -55,7 +55,7 @@ protected:
   virtual ~RegexxerTags();
 
 private:
-  void on_conf_value_changed(const Glib::ustring& key, const Gnome::Conf::Value& value);
+  void on_conf_value_changed(const Glib::ustring& key);
 };
 
 RegexxerTags::RegexxerTags()
@@ -71,30 +71,30 @@ RegexxerTags::RegexxerTags()
 
   error_title->property_scale() = Pango::SCALE_X_LARGE;
 
-  Gnome::Conf::Client::get_default_client()->signal_value_changed()
-      .connect(sigc::mem_fun(*this, &RegexxerTags::on_conf_value_changed));
-
   add(error_message);
   add(error_title);
   add(match);
   add(current);
+
+  Glib::RefPtr<Gio::Settings> settings = Regexxer::Settings::instance();
+
+  settings->signal_changed().connect(sigc::mem_fun(*this, &RegexxerTags::on_conf_value_changed));
+  std::vector<std::string> keys = settings->list_keys();
+  for (std::vector<std::string>::iterator i = keys.begin(); i != keys.end(); ++i)
+    on_conf_value_changed(*i);
 }
 
 RegexxerTags::~RegexxerTags()
 {}
 
-void RegexxerTags::on_conf_value_changed(const Glib::ustring& key, const Gnome::Conf::Value& value)
+void RegexxerTags::on_conf_value_changed(const Glib::ustring& key)
 {
   using namespace Regexxer;
 
-  if (value.get_type() == Gnome::Conf::VALUE_STRING)
-  {
-    if (key.raw() == conf_key_match_color)
-      match->property_background() = value.get_string();
-
-    else if (key.raw() == conf_key_current_match_color)
-      current->property_background() = value.get_string();
-  }
+  if (key.raw() == conf_key_match_color)
+    match->property_background() = Settings::instance()->get_string(key);
+  else if (key.raw() == conf_key_current_match_color)
+    current->property_background() = Settings::instance()->get_string(key);
 }
 
 // static
diff --git a/src/filetree.cc b/src/filetree.cc
index bef390e..eeb5f16 100644
--- a/src/filetree.cc
+++ b/src/filetree.cc
@@ -23,9 +23,9 @@
 #include "globalstrings.h"
 #include "stringutils.h"
 #include "translation.h"
+#include "settings.h"
 
 #include <glibmm.h>
-#include <gconfmm/client.h>
 #include <gtkmm/stock.h>
 
 #include <config.h>
@@ -98,8 +98,7 @@ FileTree::FileTree()
   selection->set_select_function(&FileTree::select_func);
   selection->signal_changed().connect(mem_fun(*this, &FileTree::on_selection_changed));
 
-  Gnome::Conf::Client::get_default_client()
-      ->signal_value_changed().connect(mem_fun(*this, &FileTree::on_conf_value_changed));
+  Settings::instance()->signal_changed().connect(mem_fun(*this, &FileTree::on_conf_value_changed));
 }
 
 FileTree::~FileTree()
@@ -934,13 +933,10 @@ void FileTree::load_file_with_fallback(const Gtk::TreeModel::iterator& iter,
   }
 }
 
-void FileTree::on_conf_value_changed(const Glib::ustring& key, const Gnome::Conf::Value& value)
+void FileTree::on_conf_value_changed(const Glib::ustring& key)
 {
-  if (value.get_type() == Gnome::Conf::VALUE_STRING)
-  {
-    if (key.raw() == conf_key_fallback_encoding)
-      fallback_encoding_ = value.get_string();
-  }
+  if (key == conf_key_fallback_encoding)
+    fallback_encoding_ = Settings::instance()->get_string(key);
 }
 
 } // namespace Regexxer
diff --git a/src/filetree.h b/src/filetree.h
index 369a0fd..90e4710 100644
--- a/src/filetree.h
+++ b/src/filetree.h
@@ -34,7 +34,6 @@
 
 namespace Gtk   { class TreeStore; }
 namespace Glib  { class Regex; }
-namespace Gnome { namespace Conf { class Value; } }
 
 namespace Regexxer
 {
@@ -155,7 +154,7 @@ private:
 
   void load_file_with_fallback(const Gtk::TreeModel::iterator& iter, const FileInfoPtr& fileinfo);
 
-  void on_conf_value_changed(const Glib::ustring& key, const Gnome::Conf::Value& value);
+  void on_conf_value_changed(const Glib::ustring& key);
 };
 
 class FileTree::Error
diff --git a/src/globalstrings.h b/src/globalstrings.h
index 9782d00..34d40cf 100644
--- a/src/globalstrings.h
+++ b/src/globalstrings.h
@@ -32,14 +32,13 @@ namespace Regexxer
  * The final executable contains exactly one copy of each string literal,
  * so there's no need to define them in a separate object file.
  */
-const char *const conf_dir_application         = "/apps/regexxer";
-const char *const conf_key_textview_font       = "/apps/regexxer/textview_font";
-const char *const conf_key_match_color         = "/apps/regexxer/match_color";
-const char *const conf_key_current_match_color = "/apps/regexxer/current_match_color";
-const char *const conf_key_toolbar_style       = "/apps/regexxer/toolbar_style";
-const char *const conf_key_fallback_encoding   = "/apps/regexxer/fallback_encoding";
-const char *const conf_key_substitution_patterns = "/apps/regexxer/substitution_patterns";
-const char *const conf_key_regex_patterns      = "/apps/regexxer/regex_patterns";
+const char *const conf_schema                  = "org.gnome.regexxer";
+const char *const conf_key_textview_font       = "textview-font";
+const char *const conf_key_match_color         = "match-color";
+const char *const conf_key_current_match_color = "current-match-color";
+const char *const conf_key_fallback_encoding   = "fallback-encoding";
+const char *const conf_key_substitution_patterns = "substitution-patterns";
+const char *const conf_key_regex_patterns      = "regex-patterns";
 
 const char *const ui_mainwindow_filename       = REGEXXER_PKGDATADIR G_DIR_SEPARATOR_S
                                                  "mainwindow.ui";
diff --git a/src/main.cc b/src/main.cc
index 6648379..bb5553b 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -26,7 +26,6 @@
 #include <glib.h>
 #include <gtk/gtkwindow.h> /* for gtk_window_set_default_icon_name() */
 #include <glibmm.h>
-#include <gconfmm.h>
 #include <gtkmm/iconfactory.h>
 #include <gtkmm/iconset.h>
 #include <gtkmm/iconsource.h>
@@ -194,45 +193,6 @@ void register_stock_items()
   factory->add_default();
 }
 
-static
-void trap_gconf_exceptions()
-{
-  try
-  {
-    throw; // re-throw current exception
-  }
-  catch (const Gnome::Conf::Error&)
-  {
-    // Ignore GConf exceptions thrown from GObject signal handlers.
-    // GConf itself is going print the warning message for us
-    // since we set the error handling mode to CLIENT_HANDLE_ALL.
-  }
-}
-
-static
-void initialize_configuration()
-{
-  using namespace Gnome::Conf;
-
-  Glib::add_exception_handler(&trap_gconf_exceptions);
-
-  const Glib::RefPtr<Client> client = Client::get_default_client();
-
-  client->set_error_handling(CLIENT_HANDLE_ALL);
-  client->add_dir(Regexxer::conf_dir_application, CLIENT_PRELOAD_ONELEVEL);
-
-  const std::list<Entry> entries = client->all_entries(Regexxer::conf_dir_application);
-
-  // Issue an artificial value_changed() signal for each entry in /apps/regexxer.
-  // Reusing the signal handlers this way neatly avoids the need for separate
-  // startup-initialization routines.
-
-  for (std::list<Entry>::const_iterator p = entries.begin(); p != entries.end(); ++p)
-  {
-    client->value_changed(p->get_key(), p->get_value());
-  }
-}
-
 } // anonymous namespace
 
 int main(int argc, char** argv)
@@ -240,7 +200,6 @@ int main(int argc, char** argv)
   try
   {
     Util::initialize_gettext(PACKAGE_TARNAME, REGEXXER_LOCALEDIR);
-    Gnome::Conf::init();
 
     std::auto_ptr<RegexxerOptions> options = RegexxerOptions::create();
     Gtk::Main main_instance (argc, argv, options->context());
@@ -253,7 +212,6 @@ int main(int argc, char** argv)
 
     Regexxer::MainWindow window;
 
-    initialize_configuration();
     window.initialize(options->init_state());
     options.reset();
 
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index 9221d9b..b77b2cc 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -25,11 +25,11 @@
 #include "statusline.h"
 #include "stringutils.h"
 #include "translation.h"
+#include "settings.h"
 
 #include <glib.h>
 #include <gtkmm.h>
 #include <gtksourceviewmm.h>
-#include <gconfmm/client.h>
 #include <algorithm>
 #include <functional>
 #include <iostream>
@@ -185,10 +185,10 @@ MainWindow::MainWindow()
   button_recursive_       (0),
   button_hidden_          (0),
   entry_regex_            (0),
-  entry_regex_completion_stack_(10, Gnome::Conf::Client::get_default_client()->get_string_list(conf_key_regex_patterns)),
+  entry_regex_completion_stack_(10, Settings::instance()->get_string_array(conf_key_regex_patterns)),
   entry_regex_completion_ (Gtk::EntryCompletion::create()),
   entry_substitution_     (0),
-  entry_substitution_completion_stack_(10, Gnome::Conf::Client::get_default_client()->get_string_list(conf_key_substitution_patterns)),
+  entry_substitution_completion_stack_(10, Settings::instance()->get_string_array(conf_key_substitution_patterns)),
   entry_substitution_completion_ (Gtk::EntryCompletion::create()),
   button_multiple_        (0),
   button_caseless_        (0),
@@ -356,8 +356,7 @@ void MainWindow::connect_signals()
   controller_.replace_file.connect(mem_fun(*this, &MainWindow::on_replace_file));
   controller_.replace_all .connect(mem_fun(*this, &MainWindow::on_replace_all));
 
-  Gnome::Conf::Client::get_default_client()
-      ->signal_value_changed().connect(mem_fun(*this, &MainWindow::on_conf_value_changed));
+  Settings::instance()->signal_changed().connect(mem_fun(*this, &MainWindow::on_conf_value_changed));
 
   statusline_->signal_cancel_clicked.connect(
       mem_fun(*this, &MainWindow::on_busy_action_cancel));
@@ -575,10 +574,11 @@ void MainWindow::on_exec_search()
   const Glib::ustring regex = entry_regex_->get_text();
   const bool caseless = button_caseless_->get_active();
   const bool multiple = button_multiple_->get_active();
-  
+
   entry_regex_completion_stack_.push(regex);
-  Gnome::Conf::Client::get_default_client()->set_string_list(conf_key_regex_patterns, entry_regex_completion_stack_.get_stack());
-  
+
+  Settings::instance()->set_string_array(conf_key_regex_patterns, entry_regex_completion_stack_.get_stack());
+
   try
   {
     Glib::RefPtr<Glib::Regex> pattern =
@@ -759,7 +759,7 @@ void MainWindow::on_replace()
   {
     const Glib::ustring substitution = entry_substitution_->get_text();
     entry_substitution_completion_stack_.push(substitution);
-    Gnome::Conf::Client::get_default_client()->set_string_list(conf_key_substitution_patterns, entry_substitution_completion_stack_.get_stack());
+    Settings::instance()->set_string_array(conf_key_substitution_patterns, entry_substitution_completion_stack_.get_stack());
     buffer->replace_current_match(substitution);
     on_go_next(true);
   }
@@ -771,7 +771,7 @@ void MainWindow::on_replace_file()
   {
     const Glib::ustring substitution = entry_substitution_->get_text();
     entry_substitution_completion_stack_.push(substitution);
-    Gnome::Conf::Client::get_default_client()->set_string_list(conf_key_substitution_patterns, entry_substitution_completion_stack_.get_stack());
+    Settings::instance()->set_string_array(conf_key_substitution_patterns, entry_substitution_completion_stack_.get_stack());
     buffer->replace_all_matches(substitution);
     statusline_->set_match_index(0);
   }
@@ -783,7 +783,7 @@ void MainWindow::on_replace_all()
 
   const Glib::ustring substitution = entry_substitution_->get_text();
   entry_substitution_completion_stack_.push(substitution);
-  Gnome::Conf::Client::get_default_client()->set_string_list(conf_key_substitution_patterns, entry_substitution_completion_stack_.get_stack());
+  Settings::instance()->set_string_array(conf_key_substitution_patterns, entry_substitution_completion_stack_.get_stack());
   filetree_->replace_all_matches(substitution);
   statusline_->set_match_index(0);
 }
@@ -1003,16 +1003,13 @@ void MainWindow::on_pref_dialog_hide()
   const std::auto_ptr<PrefDialog> temp (pref_dialog_);
 }
 
-void MainWindow::on_conf_value_changed(const Glib::ustring& key, const Gnome::Conf::Value& value)
+void MainWindow::on_conf_value_changed(const Glib::ustring& key)
 {
-  if (value.get_type() == Gnome::Conf::VALUE_STRING)
+  if (key == conf_key_textview_font)
   {
-    if (key.raw() == conf_key_textview_font)
-    {
-      const Pango::FontDescription font (value.get_string());
-      textview_     ->modify_font(font);
-      entry_preview_->modify_font(font);
-    }
+    const Pango::FontDescription font (Settings::instance()->get_string(key));
+    textview_     ->modify_font(font);
+    entry_preview_->modify_font(font);
   }
 }
 
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 83a530a..2aef98a 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -55,8 +55,6 @@ namespace gtksourceview
 class SourceView;
 }
 
-namespace Gnome { namespace Conf { class Value; } }
-
 namespace Regexxer
 {
 
@@ -197,7 +195,7 @@ private:
   void on_preferences();
   void on_pref_dialog_hide();
 
-  void on_conf_value_changed(const Glib::ustring& key, const Gnome::Conf::Value& value);
+  void on_conf_value_changed(const Glib::ustring& key);
 };
 
 } // namespace Regexxer
diff --git a/src/prefdialog.cc b/src/prefdialog.cc
index 6c34959..ee771ed 100644
--- a/src/prefdialog.cc
+++ b/src/prefdialog.cc
@@ -22,11 +22,12 @@
 #include "globalstrings.h"
 #include "stringutils.h"
 #include "translation.h"
+#include "settings.h"
 
 #include <glib.h>
 #include <gtkmm.h>
-#include <gconfmm/client.h>
 #include <list>
+#include <iostream>
 
 #include <config.h>
 
@@ -108,82 +109,64 @@ void PrefDialog::on_response(int)
 {
   if (entry_fallback_changed_)
     entry_fallback_->activate();
-
-  Gnome::Conf::Client::get_default_client()->suggest_sync();
-
+  std::cout << std::boolalpha << Settings::instance()->is_writable(conf_key_match_color) << std::endl;
   dialog_->hide();
 }
 
-/*
- * Note that it isn't strictly required to block the change notification
- * as done below for the "toolbar_style" setting.  GConf doesn't emit
- * "value_changed" if the new value is identical to the old one.  If, however,
- * the value was reset to the schema default, the following change notification
- * would again detach the schema.  This won't look neat, and I like neat.
- */
-void PrefDialog::on_conf_value_changed(const Glib::ustring& key, const Gnome::Conf::Value& value)
+void PrefDialog::on_conf_value_changed(const Glib::ustring& key)
 {
-  if (value.get_type() == Gnome::Conf::VALUE_STRING)
+  Glib::RefPtr<Gio::Settings> settings = Settings::instance();
+
+  if (key.raw() == conf_key_textview_font)
+  {
+    button_textview_font_->set_font_name(settings->get_string(key));
+  }
+  else if (key.raw() == conf_key_match_color)
   {
-    if (key.raw() == conf_key_textview_font)
-    {
-      button_textview_font_->set_font_name(value.get_string());
-    }
-    else if (key.raw() == conf_key_match_color)
-    {
-      button_match_color_->set_color(Gdk::Color(value.get_string()));
-    }
-    else if (key.raw() == conf_key_current_match_color)
-    {
-      button_current_color_->set_color(Gdk::Color(value.get_string()));
-    }
-    else if (key.raw() == conf_key_fallback_encoding)
-    {
-      entry_fallback_->set_text(value.get_string());
-      entry_fallback_changed_ = false;
-    }
+    button_match_color_->set_color(Gdk::Color(settings->get_string(key)));
+  }
+  else if (key.raw() == conf_key_current_match_color)
+  {
+    button_current_color_->set_color(Gdk::Color(settings->get_string(key)));
+  }
+  else if (key.raw() == conf_key_fallback_encoding)
+  {
+    entry_fallback_->set_text(settings->get_string(key));
+    entry_fallback_changed_ = false;
   }
 }
 
 void PrefDialog::initialize_configuration()
 {
-  using namespace Gnome::Conf;
+  Glib::RefPtr<Gio::Settings> settings = Settings::instance();
+  const std::list<Glib::ustring> entries = settings->list_keys();
 
-  const Glib::RefPtr<Client> client = Client::get_default_client();
-  const std::list<Entry> entries (client->all_entries(conf_dir_application));
-
-  for (std::list<Entry>::const_iterator p = entries.begin(); p != entries.end(); ++p)
-  {
-    on_conf_value_changed(p->get_key(), p->get_value());
-  }
+  for (std::list<Glib::ustring>::const_iterator p = entries.begin(); p != entries.end(); ++p)
+    on_conf_value_changed(*p);
 
-  client->signal_value_changed().connect(
-      sigc::mem_fun(*this, &PrefDialog::on_conf_value_changed));
+  settings->bind(conf_key_textview_font, button_textview_font_, "font_name");
 }
 
 void PrefDialog::on_textview_font_set()
 {
   const Glib::ustring value = button_textview_font_->get_font_name();
-  Gnome::Conf::Client::get_default_client()->set(conf_key_textview_font, value);
+  Settings::instance()->set_string(conf_key_textview_font, value);
 }
 
 void PrefDialog::on_match_color_set()
 {
   const Glib::ustring value = Util::color_to_string(button_match_color_->get_color());
-  Gnome::Conf::Client::get_default_client()->set(conf_key_match_color, value);
+  Settings::instance()->set_string(conf_key_match_color, value);
 }
 
 void PrefDialog::on_current_color_set()
 {
   const Glib::ustring value = Util::color_to_string(button_current_color_->get_color());
-  Gnome::Conf::Client::get_default_client()->set(conf_key_current_match_color, value);
+  Settings::instance()->set_string(conf_key_current_match_color, value);
 }
 
 void PrefDialog::on_entry_fallback_changed()
 {
-  // On dialog close, write back to the GConf database only if the user
-  // actually did something with the entry widget.  This prevents GConf from
-  // detaching the key's Schema each time the preferences dialog is closed.
   entry_fallback_changed_ = true;
 }
 
@@ -193,8 +176,8 @@ void PrefDialog::on_entry_fallback_activate()
 
   if (Util::validate_encoding(fallback_encoding.raw()))
   {
-    Gnome::Conf::Client::get_default_client()
-        ->set(conf_key_fallback_encoding, fallback_encoding.uppercase());
+    Settings::instance()->set_string(conf_key_fallback_encoding,
+                                     fallback_encoding.uppercase());
 
     entry_fallback_changed_ = false;
   }
diff --git a/src/prefdialog.h b/src/prefdialog.h
index 1d17269..af35a32 100644
--- a/src/prefdialog.h
+++ b/src/prefdialog.h
@@ -38,9 +38,6 @@ class Widget;
 class Window;
 }
 
-namespace Gnome { namespace Conf { class Value; } }
-
-
 namespace Regexxer
 {
 
@@ -58,7 +55,6 @@ private:
   Gtk::ColorButton*           button_match_color_;
   Gtk::ColorButton*           button_current_color_;
   Gtk::Entry*                 entry_fallback_;
-  Util::AutoConnection        conn_toolbar_style_;
   bool                        entry_fallback_changed_;
 
   void load_xml();
@@ -66,7 +62,7 @@ private:
 
   void on_response(int response_id);
 
-  void on_conf_value_changed(const Glib::ustring& key, const Gnome::Conf::Value& value);
+  void on_conf_value_changed(const Glib::ustring& key);
   void initialize_configuration();
 
   void on_textview_font_set();
diff --git a/src/settings.h b/src/settings.h
new file mode 100644
index 0000000..988986e
--- /dev/null
+++ b/src/settings.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010  Fabien Parent  <parent f gmail com>
+ *
+ * This file is part of regexxer.
+ *
+ * regexxer 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
+ * (at your option) any later version.
+ *
+ * regexxer 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 regexxer; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef __REGEXXER_SETTINGS_H_INCLUDED__
+#define __REGEXXER_SETTINGS_H_INCLUDED__
+
+#include <glibmm/refptr.h>
+#include <giomm/settings.h>
+
+#include "globalstrings.h"
+
+namespace Regexxer
+{
+
+class Settings
+{
+private:
+  Settings();
+
+public:
+  static Glib::RefPtr<Gio::Settings> instance()
+  {
+    static Glib::RefPtr<Gio::Settings> settings;
+    if (!settings)
+      settings = Gio::Settings::create(conf_schema);
+
+    return settings;
+  }
+};
+
+} // namespace Regexxer
+
+#endif /* __REGEXXER_SETTINGS_H_INCLUDED__ */
+
diff --git a/ui/org.gnome.regexxer.gschema.xml b/ui/org.gnome.regexxer.gschema.xml
new file mode 100644
index 0000000..0301bab
--- /dev/null
+++ b/ui/org.gnome.regexxer.gschema.xml
@@ -0,0 +1,34 @@
+<schemalist>
+  <schema id="org.gnome.regexxer" path="/org/gnome/regexxer/">
+    <key name="regex-patterns" type="as">
+      <default>[]</default>
+      <summary>Regex Patterns</summary>
+      <description>List of last pattern used for the regex entry.</description>
+    </key>
+    <key name="substitution-patterns" type="as">
+      <default>[]</default>
+      <summary>Regex Patterns</summary>
+      <description>List of last pattern used for the substitution entry.</description>
+    </key>
+    <key name="textview-font" type="s">
+      <default>'Monospace 10'</default>
+      <summary>Text view font</summary>
+      <description>The font used in the file editor.</description>
+    </key>
+    <key name="match-color" type="s">
+      <default>'#9DB8D2'</default>
+      <summary>Match color</summary>
+      <description>The background color used to highlight matches of the search expression.</description>
+    </key>
+    <key name="current-match-color" type="s">
+      <default>'#EED680'</default>
+      <summary>Current-match color</summary>
+      <description>The background color used to highlight the currently selected match of the search expression.</description>
+    </key>
+    <key name="fallback-encoding" type="s">
+      <default>'ISO-8859-15'</default>
+      <summary>Fallback encoding</summary>
+      <description>Name of the character encoding to use if a file is not readable in either UTF-8 or the codeset specified by the current locale. Try "iconv --list" for a complete list of possible values.</description>
+    </key>
+  </schema>
+</schemalist>



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