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;
155 gchar *retval = NULL;
157 g_return_val_if_fail (self, NULL);
158 g_return_val_if_fail (key, NULL);
160 priv = MODEST_CONF_GET_PRIVATE(self);
161 return gconf_client_get_string (priv->gconf_client, key, err);
166 modest_conf_get_int (ModestConf* self, const gchar* key, GError **err)
168 ModestConfPrivate *priv;
171 g_return_val_if_fail (self, -1);
172 g_return_val_if_fail (key, -1);
174 priv = MODEST_CONF_GET_PRIVATE(self);
176 return gconf_client_get_int (priv->gconf_client, key, err);
181 modest_conf_get_bool (ModestConf* self, const gchar* key, GError **err)
183 ModestConfPrivate *priv;
186 g_return_val_if_fail (self, FALSE);
187 g_return_val_if_fail (key, FALSE);
189 priv = MODEST_CONF_GET_PRIVATE(self);
191 return gconf_client_get_bool (priv->gconf_client, key, err);
196 modest_conf_set_string (ModestConf* self, const gchar* key, const gchar* val,
199 ModestConfPrivate *priv;
201 g_return_val_if_fail (self,FALSE);
202 g_return_val_if_fail (key, FALSE);
204 priv = MODEST_CONF_GET_PRIVATE(self);
206 if (!gconf_client_key_is_writable(priv->gconf_client,key,err)) {
207 g_warning ("'%s' is not writable", key);
211 return gconf_client_set_string (priv->gconf_client, key, val, err);
216 modest_conf_set_int (ModestConf* self, const gchar* key, gint val,
219 ModestConfPrivate *priv;
221 g_return_val_if_fail (self,FALSE);
222 g_return_val_if_fail (key, FALSE);
224 priv = MODEST_CONF_GET_PRIVATE(self);
226 if (!gconf_client_key_is_writable(priv->gconf_client,key,err)) {
227 g_warning ("'%s' is not writable", key);
231 return gconf_client_set_int (priv->gconf_client, key, val, err);
236 modest_conf_set_bool (ModestConf* self, const gchar* key, gboolean val,
239 ModestConfPrivate *priv;
241 g_return_val_if_fail (self,FALSE);
242 g_return_val_if_fail (key, FALSE);
244 priv = MODEST_CONF_GET_PRIVATE(self);
246 if (!gconf_client_key_is_writable(priv->gconf_client,key, err)) {
247 g_warning ("'%s' is not writable", key);
251 return gconf_client_set_bool (priv->gconf_client,key,val, err);
258 modest_conf_list_subkeys (ModestConf* self, const gchar* key, GError **err)
260 ModestConfPrivate *priv;
262 g_return_val_if_fail (self,FALSE);
263 g_return_val_if_fail (key, FALSE);
265 priv = MODEST_CONF_GET_PRIVATE(self);
267 return gconf_client_all_dirs (priv->gconf_client,key,err);
272 modest_conf_remove_key (ModestConf* self, const gchar* key, GError **err)
274 ModestConfPrivate *priv;
276 g_return_val_if_fail (self,FALSE);
277 g_return_val_if_fail (key, FALSE);
279 priv = MODEST_CONF_GET_PRIVATE(self);
281 return gconf_client_recursive_unset (priv->gconf_client,key,0,err);
288 modest_conf_key_exists (ModestConf* self, const gchar* key, GError **err)
290 ModestConfPrivate *priv;
292 g_return_val_if_fail (self,FALSE);
293 g_return_val_if_fail (key, FALSE);
295 priv = MODEST_CONF_GET_PRIVATE(self);
297 return gconf_client_dir_exists (priv->gconf_client,key,err);
305 modest_conf_on_change (GConfClient *client, guint conn_id, GConfEntry *entry,
308 /* FIXME: emit a signal here */
311 g_print ("modest: key '%s' unset\n",
312 gconf_entry_get_key (entry));
314 gchar *val = gconf_value_to_string (gconf_entry_get_value(entry));
315 g_print ("modest: key '%s' set to '%s'\n",
316 gconf_entry_get_key (entry), val);