[tracker/libtracker-miner] Make sure we reload the settings when config file changes



commit 5ac5cfecc3358ff7abfb2c54117f997ae056f4b0
Author: Martyn Russell <martyn lanedo com>
Date:   Thu Aug 27 17:23:28 2009 +0100

    Make sure we reload the settings when config file changes

 src/libtracker-common/tracker-config-file.c |   24 ++++++++++++++-
 src/libtracker-common/tracker-config-file.h |    2 +
 src/tracker-miner-fs/tracker-config.c       |   41 +++++++++++++++++----------
 3 files changed, 50 insertions(+), 17 deletions(-)
---
diff --git a/src/libtracker-common/tracker-config-file.c b/src/libtracker-common/tracker-config-file.c
index 0fe0f0c..6021e87 100644
--- a/src/libtracker-common/tracker-config-file.c
+++ b/src/libtracker-common/tracker-config-file.c
@@ -51,6 +51,13 @@ enum {
 	PROP_DOMAIN
 };
 
+enum {
+	CHANGED,
+	LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0, };
+
 G_DEFINE_TYPE (TrackerConfigFile, tracker_config_file, G_TYPE_OBJECT);
 
 static void
@@ -63,6 +70,18 @@ tracker_config_file_class_init (TrackerConfigFileClass *klass)
 	object_class->finalize	   = config_finalize;
 	object_class->constructed  = config_constructed;
 
+	signals[CHANGED] =
+		g_signal_new ("changed",
+			      G_TYPE_FROM_CLASS (klass),
+			      G_SIGNAL_RUN_LAST,
+			      G_STRUCT_OFFSET (TrackerConfigFileClass, changed),
+			      NULL,
+			      NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE,
+			      0,
+			      G_TYPE_NONE);
+
 	g_object_class_install_property (object_class,
 					 PROP_DOMAIN,
 					 g_param_spec_string ("domain",
@@ -194,14 +213,13 @@ config_changed_cb (GFileMonitor     *monitor,
 		   gpointer	     user_data)
 {
 	TrackerConfigFile *file;
-	gchar	             *filename;
+	gchar	          *filename;
 
 	file = TRACKER_CONFIG_FILE (user_data);
 
 	/* Do we recreate if the file is deleted? */
 
 	switch (event_type) {
-	case G_FILE_MONITOR_EVENT_CHANGED:
 	case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
 		file->file_exists = TRUE;
 
@@ -211,6 +229,8 @@ config_changed_cb (GFileMonitor     *monitor,
 		g_free (filename);
 
 		config_load (file);
+
+		g_signal_emit (file, signals[CHANGED], 0);
 		break;
 
 	case G_FILE_MONITOR_EVENT_DELETED:
diff --git a/src/libtracker-common/tracker-config-file.h b/src/libtracker-common/tracker-config-file.h
index b46fee1..d0d9e85 100644
--- a/src/libtracker-common/tracker-config-file.h
+++ b/src/libtracker-common/tracker-config-file.h
@@ -49,6 +49,8 @@ struct _TrackerConfigFile {
 
 struct _TrackerConfigFileClass {
 	GObjectClass parent_class;
+
+	void (* changed) (TrackerConfigFile *file);
 };
 
 GType	           tracker_config_file_get_type (void) G_GNUC_CONST;
diff --git a/src/tracker-miner-fs/tracker-config.c b/src/tracker-miner-fs/tracker-config.c
index 376cab3..463b776 100644
--- a/src/tracker-miner-fs/tracker-config.c
+++ b/src/tracker-miner-fs/tracker-config.c
@@ -87,21 +87,22 @@ typedef struct {
 	gchar *key;
 } ObjectToKeyFile;
 
-static void     config_set_property         (GObject       *object,
-					     guint          param_id,
-					     const GValue  *value,
-					     GParamSpec    *pspec);
-static void     config_get_property         (GObject       *object,
-					     guint          param_id,
-					     GValue        *value,
-					     GParamSpec    *pspec);
-static void     config_finalize             (GObject       *object);
-static void     config_constructed          (GObject       *object);
-static void     config_load                 (TrackerConfig *config);
-static gboolean config_save                 (TrackerConfig *config);
-static void     config_create_with_defaults (TrackerConfig *config,
-					     GKeyFile      *key_file,
-					     gboolean       overwrite);
+static void     config_set_property         (GObject           *object,
+					     guint              param_id,
+					     const GValue      *value,
+					     GParamSpec        *pspec);
+static void     config_get_property         (GObject           *object,
+					     guint              param_id,
+					     GValue            *value,
+					     GParamSpec        *pspec);
+static void     config_finalize             (GObject           *object);
+static void     config_constructed          (GObject           *object);
+static void     config_changed              (TrackerConfigFile *file);
+static void     config_load                 (TrackerConfig     *config);
+static gboolean config_save                 (TrackerConfig     *config);
+static void     config_create_with_defaults (TrackerConfig     *config,
+					     GKeyFile          *key_file,
+					     gboolean           overwrite);
 
 enum {
 	PROP_0,
@@ -159,12 +160,15 @@ static void
 tracker_config_class_init (TrackerConfigClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	TrackerConfigFileClass *config_file_class = TRACKER_CONFIG_FILE_CLASS (klass);
 
 	object_class->set_property = config_set_property;
 	object_class->get_property = config_get_property;
 	object_class->finalize	   = config_finalize;
 	object_class->constructed  = config_constructed;
 
+	config_file_class->changed = config_changed;
+
 	/* General */
 	g_object_class_install_property (object_class,
 					 PROP_VERBOSITY,
@@ -513,6 +517,13 @@ config_constructed (GObject *object)
 }
 
 static void
+config_changed (TrackerConfigFile *file)
+{
+	/* Reload config */
+	config_load (TRACKER_CONFIG (file));
+}
+
+static void
 config_create_with_defaults (TrackerConfig *config,
 			     GKeyFile      *key_file, 
 			     gboolean       overwrite)



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