* more private data for the editor window: identity and transport
[modest] / src / modest-conf-gconf.c
index 20d4385..1202a89 100644 (file)
@@ -4,6 +4,7 @@
 /* insert (c)/licensing information) */
 
 #include "modest-conf.h"
+#include "modest-marshal.h"
 #include <gconf/gconf-client.h>
 
 
@@ -16,8 +17,7 @@ static void   modest_conf_on_change    (GConfClient *client, guint conn_id,
                                          GConfEntry *entry, gpointer data);
 /* list my signals */
 enum {
-       /* MY_SIGNAL_1, */
-       /* MY_SIGNAL_2, */
+       KEY_CHANGED_SIGNAL,
        LAST_SIGNAL
 };
 
@@ -31,8 +31,14 @@ struct _ModestConfPrivate {
 /* globals */
 static GObjectClass *parent_class = NULL;
 
-/* uncomment the following if you have defined any signals */
-/* static guint signals[LAST_SIGNAL] = {0}; */
+static guint signals[LAST_SIGNAL] = {0};
+
+void 
+modest_conf_key_changed (ModestConf* self, const gchar *key, const gchar *new_value)
+{
+       g_signal_emit (self, signals[KEY_CHANGED_SIGNAL], 0, key, new_value);
+}
+
 
 GType
 modest_conf_get_type (void)
@@ -62,18 +68,21 @@ modest_conf_class_init (ModestConfClass *klass)
 {
        GObjectClass *gobject_class;
        gobject_class = (GObjectClass*) klass;
+       GType paramtypes[2] = {G_TYPE_POINTER, G_TYPE_POINTER};
 
        parent_class            = g_type_class_peek_parent (klass);
        gobject_class->finalize = modest_conf_finalize;
 
        g_type_class_add_private (gobject_class, sizeof(ModestConfPrivate));
-
-       /* signal definitions go here, e.g.: */
-/*     signals[MY_SIGNAL_1] = */
-/*             g_signal_new ("my_signal_1",....); */
-/*     signals[MY_SIGNAL_2] = */
-/*             g_signal_new ("my_signal_2",....); */
-/*     etc. */
+       
+       klass->key_changed = modest_conf_key_changed;
+
+       signals[KEY_CHANGED_SIGNAL] = 
+               g_signal_newv ("key-changed", 
+                              G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_LAST,
+                              NULL, NULL, NULL,
+                              modest_marshal_VOID__POINTER_POINTER,
+                              G_TYPE_NONE, 2, paramtypes);
 }
 
 static void
@@ -92,8 +101,8 @@ modest_conf_init (ModestConf *obj)
        }
 
        /* FIXME: is PRELOAD_NONE the most efficient? */
-       gconf_client_add_dir (conf,MODEST_CONF_NAMESPACE,
-                             GCONF_CLIENT_PRELOAD_NONE,&err);
+       gconf_client_add_dir (conf, MODEST_CONF_NAMESPACE,
+                             GCONF_CLIENT_PRELOAD_NONE, &err);
        if (err) {
                g_warning ("error with gconf_client_add_dir: %d:%s",
                           err->code, err->message);
@@ -302,15 +311,19 @@ static void
 modest_conf_on_change (GConfClient *client, guint conn_id, GConfEntry *entry,
                        gpointer data)
 {
-       /* FIXME: emit a signal here */
-
-       if (!entry->value)
+       ModestConf *modest_conf = data;
+       
+       if (!entry->value) {
                g_print ("modest: key '%s' unset\n",
                         gconf_entry_get_key (entry));
-       else {
+               g_signal_emit (modest_conf, signals[KEY_CHANGED_SIGNAL], 0, 
+                              gconf_entry_get_key (entry), NULL);
+       } else {
                gchar *val = gconf_value_to_string (gconf_entry_get_value(entry));
                g_print ("modest: key '%s' set to '%s'\n",
                         gconf_entry_get_key (entry), val);
+               g_signal_emit (modest_conf, signals[KEY_CHANGED_SIGNAL], 0, 
+                              gconf_entry_get_key (entry), val);
                g_free (val);
        }
 }