[evolution/wip/gsettings: 6/11] More GSettings migration



commit 9744056c5e69227abdcdd55c4bffb674b29bd765
Author: Rodrigo Moya <rodrigo gnome-db org>
Date:   Wed Oct 26 17:54:50 2011 +0200

    More GSettings migration

 mail/e-mail-browser.c          |   10 ++--
 mail/e-mail-label-list-store.c |  105 +++++++++++++++++++++++++++++++++++----
 mail/em-composer-utils.c       |   21 ++++----
 3 files changed, 110 insertions(+), 26 deletions(-)
---
diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c
index fe8b898..aaa12b1 100644
--- a/mail/e-mail-browser.c
+++ b/mail/e-mail-browser.c
@@ -550,7 +550,7 @@ mail_browser_constructed (GObject *object)
 	EShell *shell;
 	EFocusTracker *focus_tracker;
 	ESearchBar *search_bar;
-	GConfBridge *bridge;
+	GSettings *settings;
 	GtkAccelGroup *accel_group;
 	GtkActionGroup *action_group;
 	GtkAction *action;
@@ -710,13 +710,13 @@ mail_browser_constructed (GObject *object)
 		search_bar, "changed",
 		G_CALLBACK (em_format_queue_redraw), priv->formatter);
 
-	/* Bind GObject properties to GConf keys. */
+	/* Bind GObject properties to GSettings keys. */
 
-	bridge = gconf_bridge_get ();
+	settings = g_settings_new ("org.gnome.evolution.mail");
 
 	object = G_OBJECT (reader);
-	key = "/apps/evolution/mail/display/show_deleted";
-	gconf_bridge_bind_property (bridge, key, object, "show-deleted");
+	g_settings_bind (settings, "show-deleted", object, "show-deleted", G_SETTINGS_BIND_DEFAULT);
+	g_object_unref (settings);
 
 	id = "org.gnome.evolution.mail.browser";
 	e_plugin_ui_register_manager (ui_manager, id, object);
diff --git a/mail/e-mail-label-list-store.c b/mail/e-mail-label-list-store.c
index f604893..e9f9c4b 100644
--- a/mail/e-mail-label-list-store.c
+++ b/mail/e-mail-label-list-store.c
@@ -27,10 +27,10 @@
 
 #include <glib/gi18n.h>
 #include <camel/camel.h>
-#include "e-util/gconf-bridge.h"
 
 struct _EMailLabelListStorePrivate {
 	GHashTable *tag_index;
+	GSettings *mail_settings;
 };
 
 static struct {
@@ -160,24 +160,107 @@ mail_label_list_store_finalize (GObject *object)
 	priv = E_MAIL_LABEL_LIST_STORE (object)->priv;
 
 	g_hash_table_destroy (priv->tag_index);
+	if (priv->mail_settings != NULL) {
+		g_object_unref (priv->mail_settings);
+		priv->mail_settings = NULL;
+	}
 
 	/* Chain up to parent's finalize() method. */
 	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
+
+static void labels_settings_changed_cb (GSettings *settings, const gchar *key, gpointer user_data);
+
+static void
+labels_model_changed_cb (GtkTreeModel *model,
+			 GtkTreePath *path,
+			 GtkTreeIter *iter,
+			 gpointer user_data)
+{
+	EMailLabelListStore *store;
+	GtkTreeIter iter;
+	GPtrArray *array;
+	gboolean res;
+
+	store = E_MAIL_LABEL_LIST_STORE (user_data);
+
+	/* Make sure we don't enter an infinite synchronizing loop */
+	g_signal_handlers_block_by_func (store->priv->mail_settings, labels_settings_changed_cb, store);
+
+	/* Build list to store in GSettings */
+	array = g_ptr_array_new ();
+	res = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
+	while (res) {
+		gchar *string;
+
+		gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+				    0, &string, -1);
+		g_ptr_array_add (array, string);
+
+		res = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
+	}
+
+	g_ptr_array_add (array, NULL);
+	g_settings_set_strv (store->priv->mail_settings, "labels", array->pdata);
+
+	g_ptr_array_free (array, TRUE);
+	g_signal_handlers_unblock_by_func (store->priv->mail_settings, labels_settings_changed_cb, store);
+}
+
+static void
+labels_settings_changed_cb (GSettings *settings,
+			    const gchar *key,
+			    gpointer user_data)
+{
+	EMailLabelListStore *store;
+	gchar **strv;
+	gint i;
+
+	store = E_MAIL_LABEL_LIST_STORE (user_data);
+
+	/* Make sure we don't enter an infinite synchronizing loop */
+	g_signal_handlers_block_by_func (store, labels_model_changed_cb, store);
+
+	gtk_list_store_clear (GTK_LIST_STORE (store));
+
+	strv = g_settings_get_strv (store->priv->mail_settings, "labels");
+	for (i = 0; strv[i] != NULL; i++) {
+		GtkTreeIter iter;
+
+		gtk_list_store_insert_with_values (GTK_LIST_STORE (store),
+						   &iter, -1,
+						   0, strv[i],
+						   -1);
+	}
+
+	g_strfreev (strv);
+
+	g_signal_handlers_unblock_by_func (store, labels_model_changed_cb, store);
+}
+
 static void
 mail_label_list_store_constructed (GObject *object)
 {
 	EMailLabelListStore *store;
-	GConfBridge *bridge;
-	const gchar *key;
 
 	store = E_MAIL_LABEL_LIST_STORE (object);
 
-	bridge = gconf_bridge_get ();
-	key = "/apps/evolution/mail/labels";
-	gconf_bridge_bind_string_list_store (
-		bridge, key, GTK_LIST_STORE (store));
+	/* Connect to GSettings' change notifications */
+	store->priv->mail_settings = g_settings_new ("org.gnome.evolution.mail");
+	g_signal_connect (store->priv->mail_settings, "changed::labels",
+			  G_CALLBACK (labels_settings_changed_cb), store);
+	labels_settings_changed_cb (store->priv->mail_settings, "labels", store);
+
+	/* Connect to ListStore change notifications */
+	g_signal_connect (store, "row-inserted",
+			  G_CALLBACK (labels_model_changed_cb), store);
+	g_signal_connect (store, "row-changed",
+			  G_CALLBACK (labels_model_changed_cb), store);
+	g_signal_connect (store, "row-deleted",
+			  G_CALLBACK (labels_model_changed_cb), store);
+	g_signal_connect (store, "rows-reordered",
+			  G_CALLBACK (labels_model_changed_cb), store);
 
 	mail_label_list_store_ensure_defaults (store);
 
@@ -245,10 +328,10 @@ mail_label_list_store_init (EMailLabelListStore *store)
 
 	/* XXX While it may seem awkward to cram the label name and color
 	 *     into a single string column, we do it for the benefit of
-	 *     letting GConfBridge keep the model in sync with GConf.
+	 *     letting GSettings keep the model in sync.
 	 *
 	 * XXX There's a valid argument to be made that this information
-	 *     doesn't belong in GConf in the first place.  A key file
+	 *     doesn't belong in GSettings in the first place.  A key file
 	 *     under $(user_data_dir)/mail would work better. */
 	gtk_list_store_set_column_types (GTK_LIST_STORE (store), 1, &type);
 }
@@ -404,7 +487,7 @@ e_mail_label_list_store_get_tag (EMailLabelListStore *store,
 	strv = g_strsplit_set (encoded, ":|", 3);
 
 	/* XXX I guess for historical reasons the default label tags have
-	 *     a "$Label" prefix, but the default list in GConf doesn't
+	 *     a "$Label" prefix, but the default list in GSettings doesn't
 	 *     include tags.  That's why the <tag> part is optional.
 	 *     So if we're missing the <tag> part, look it up in the
 	 *     hard-coded default list above.
@@ -431,7 +514,7 @@ e_mail_label_list_store_get_tag (EMailLabelListStore *store,
 		}
 	}
 
-	/* XXX Still no luck?  The label list in GConf must be screwed up.
+	/* XXX Still no luck?  The label list in GSettings must be screwed up.
 	 *     We must not return NULL because the tag is used as a key in
 	 *     the index hash table, so generate a tag from the name. */
 	if (result == NULL)
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index eacf61b..06db108 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -69,9 +69,6 @@
 #define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0)
 #endif
 
-#define GCONF_KEY_TEMPLATE_PLACEHOLDERS \
-	"/apps/evolution/mail/template_placeholders"
-
 typedef struct _AsyncContext AsyncContext;
 typedef struct _ForwardData ForwardData;
 
@@ -1261,15 +1258,19 @@ em_utils_edit_message (EShell *shell,
 	/* Template specific code follows. */
 	if (folder_is_templates) {
 		CamelDataWrapper *content;
-		GConfClient *gconf;
+		GSettings *settings;
+		gchar **strv;
+		gint i;
 		GSList *clue_list = NULL;
 
-		gconf = gconf_client_get_default ();
-		/* Get the list from gconf */
-		clue_list = gconf_client_get_list (
-			gconf, GCONF_KEY_TEMPLATE_PLACEHOLDERS,
-			GCONF_VALUE_STRING, NULL );
-		g_object_unref (gconf);
+		settings = g_settings_new ("org.gnome.evolution.eplugin.templates");
+
+		/* Get the list from GSettings */
+		strv = g_settings_get_strv (settings, "template-placeholders");
+		for (i = 0; strv[i] != NULL; i++)
+			clue_list = g_slist_append (clue_list, g_strdup (strv[i]));
+		g_object_unref (settings);
+		g_strfreev (strv);
 
 		content = camel_medium_get_content (CAMEL_MEDIUM (message));
 		traverse_parts (clue_list, message, content);



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