1 /* modest-conf-gconf.c */
2 /* GConf implementation of ModestConf */
4 /* insert (c)/licensing information) */
6 #include "modest-conf.h"
7 #include <gconf/gconf-client.h>
10 /* 'private'/'protected' functions */
11 static void modest_conf_class_init (ModestConfClass *klass);
12 static void modest_conf_init (ModestConf *obj);
13 static void modest_conf_finalize (GObject *obj);
15 static void modest_conf_on_change (GConfClient *client, guint conn_id,
16 GConfEntry *entry, gpointer data);
24 typedef struct _ModestConfPrivate ModestConfPrivate;
25 struct _ModestConfPrivate {
26 GConfClient *gconf_client;
28 #define MODEST_CONF_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
32 static GObjectClass *parent_class = NULL;
34 /* uncomment the following if you have defined any signals */
35 /* static guint signals[LAST_SIGNAL] = {0}; */
38 modest_conf_get_type (void)
40 static GType my_type = 0;
42 static const GTypeInfo my_info = {
43 sizeof(ModestConfClass),
45 NULL, /* base finalize */
46 (GClassInitFunc) modest_conf_class_init,
47 NULL, /* class finalize */
48 NULL, /* class data */
51 (GInstanceInitFunc) modest_conf_init,
53 my_type = g_type_register_static (G_TYPE_OBJECT,
61 modest_conf_class_init (ModestConfClass *klass)
63 GObjectClass *gobject_class;
64 gobject_class = (GObjectClass*) klass;
66 parent_class = g_type_class_peek_parent (klass);
67 gobject_class->finalize = modest_conf_finalize;
69 g_type_class_add_private (gobject_class, sizeof(ModestConfPrivate));
71 /* signal definitions go here, e.g.: */
72 /* signals[MY_SIGNAL_1] = */
73 /* g_signal_new ("my_signal_1",....); */
74 /* signals[MY_SIGNAL_2] = */
75 /* g_signal_new ("my_signal_2",....); */
80 modest_conf_init (ModestConf *obj)
82 GConfClient *conf = NULL;
83 ModestConfPrivate *priv = MODEST_CONF_GET_PRIVATE(obj);
86 priv->gconf_client = NULL;
88 conf = gconf_client_get_default ();
90 g_warning ("could not get gconf client");
94 /* FIXME: is PRELOAD_NONE the most efficient? */
95 gconf_client_add_dir (conf,MODEST_CONF_NAMESPACE,
96 GCONF_CLIENT_PRELOAD_NONE,&err);
98 g_warning ("error with gconf_client_add_dir: %d:%s",
99 err->code, err->message);
100 g_object_unref (conf);
105 gconf_client_notify_add (conf, MODEST_CONF_NAMESPACE,
106 modest_conf_on_change,
109 g_warning ("error with gconf_client_notify_add: %d:%s",
110 err->code, err->message);
111 g_object_unref (conf);
117 priv->gconf_client = conf;
122 modest_conf_finalize (GObject *obj)
124 ModestConfPrivate *priv = MODEST_CONF_GET_PRIVATE(obj);
125 if (priv->gconf_client) {
126 gconf_client_suggest_sync (priv->gconf_client, NULL);
127 g_object_unref (priv->gconf_client);
132 modest_conf_new (void)
134 ModestConf *conf = MODEST_CONF(g_object_new(MODEST_TYPE_CONF, NULL));
136 g_warning ("failed to init ModestConf (GConf)");
140 ModestConfPrivate *priv = MODEST_CONF_GET_PRIVATE(conf);
141 if (!priv->gconf_client) {
142 g_warning ("failed to init gconf");
143 g_object_unref (conf);
147 return G_OBJECT(conf);
152 modest_conf_get_string (ModestConf* self, const gchar* key, GError **err)
154 ModestConfPrivate *priv;
156 g_return_val_if_fail (self, NULL);
157 g_return_val_if_fail (key, NULL);
159 priv = MODEST_CONF_GET_PRIVATE(self);
160 return gconf_client_get_string (priv->gconf_client, key, err);
165 modest_conf_get_int (ModestConf* self, const gchar* key, GError **err)
167 ModestConfPrivate *priv;
169 g_return_val_if_fail (self, -1);
170 g_return_val_if_fail (key, -1);
172 priv = MODEST_CONF_GET_PRIVATE(self);
174 return gconf_client_get_int (priv->gconf_client, key, err);
179 modest_conf_get_bool (ModestConf* self, const gchar* key, GError **err)
181 ModestConfPrivate *priv;
183 g_return_val_if_fail (self, FALSE);
184 g_return_val_if_fail (key, FALSE);
186 priv = MODEST_CONF_GET_PRIVATE(self);
188 return gconf_client_get_bool (priv->gconf_client, key, err);
193 modest_conf_set_string (ModestConf* self, const gchar* key, const gchar* val,
196 ModestConfPrivate *priv;
198 g_return_val_if_fail (self,FALSE);
199 g_return_val_if_fail (key, FALSE);
201 priv = MODEST_CONF_GET_PRIVATE(self);
203 if (!gconf_client_key_is_writable(priv->gconf_client,key,err)) {
204 g_warning ("'%s' is not writable", key);
208 return gconf_client_set_string (priv->gconf_client, key, val, err);
213 modest_conf_set_int (ModestConf* self, const gchar* key, gint val,
216 ModestConfPrivate *priv;
218 g_return_val_if_fail (self,FALSE);
219 g_return_val_if_fail (key, FALSE);
221 priv = MODEST_CONF_GET_PRIVATE(self);
223 if (!gconf_client_key_is_writable(priv->gconf_client,key,err)) {
224 g_warning ("'%s' is not writable", key);
228 return gconf_client_set_int (priv->gconf_client, key, val, err);
233 modest_conf_set_bool (ModestConf* self, const gchar* key, gboolean val,
236 ModestConfPrivate *priv;
238 g_return_val_if_fail (self,FALSE);
239 g_return_val_if_fail (key, FALSE);
241 priv = MODEST_CONF_GET_PRIVATE(self);
243 if (!gconf_client_key_is_writable(priv->gconf_client,key, err)) {
244 g_warning ("'%s' is not writable", key);
248 return gconf_client_set_bool (priv->gconf_client,key,val, err);
255 modest_conf_list_subkeys (ModestConf* self, const gchar* key, GError **err)
257 ModestConfPrivate *priv;
259 g_return_val_if_fail (self,FALSE);
260 g_return_val_if_fail (key, FALSE);
262 priv = MODEST_CONF_GET_PRIVATE(self);
264 return gconf_client_all_dirs (priv->gconf_client,key,err);
269 modest_conf_remove_key (ModestConf* self, const gchar* key, GError **err)
271 ModestConfPrivate *priv;
273 g_return_val_if_fail (self,FALSE);
274 g_return_val_if_fail (key, FALSE);
276 priv = MODEST_CONF_GET_PRIVATE(self);
278 return gconf_client_recursive_unset (priv->gconf_client,key,0,err);
285 modest_conf_key_exists (ModestConf* self, const gchar* key, GError **err)
287 ModestConfPrivate *priv;
289 g_return_val_if_fail (self,FALSE);
290 g_return_val_if_fail (key, FALSE);
292 priv = MODEST_CONF_GET_PRIVATE(self);
294 return gconf_client_dir_exists (priv->gconf_client,key,err);
302 modest_conf_on_change (GConfClient *client, guint conn_id, GConfEntry *entry,
305 /* FIXME: emit a signal here */
308 g_print ("modest: key '%s' unset\n",
309 gconf_entry_get_key (entry));
311 gchar *val = gconf_value_to_string (gconf_entry_get_value(entry));
312 g_print ("modest: key '%s' set to '%s'\n",
313 gconf_entry_get_key (entry), val);