summaryrefslogtreecommitdiff
path: root/src/backend/plugins/config-kde/config-kde.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/plugins/config-kde/config-kde.c')
-rw-r--r--src/backend/plugins/config-kde/config-kde.c64
1 files changed, 41 insertions, 23 deletions
diff --git a/src/backend/plugins/config-kde/config-kde.c b/src/backend/plugins/config-kde/config-kde.c
index 24fb9e1..1079c19 100644
--- a/src/backend/plugins/config-kde/config-kde.c
+++ b/src/backend/plugins/config-kde/config-kde.c
@@ -40,8 +40,9 @@ typedef enum {
struct _PxConfigKde {
GObject parent_instance;
- char *config_option;
+ char *config_file;
gboolean available;
+ GFileMonitor *monitor;
char *no_proxy;
char *http_proxy;
@@ -62,9 +63,25 @@ enum {
PROP_CONFIG_OPTION
};
+static void px_config_kde_set_config_file (PxConfigKde *self,
+ char *proxy_file);
+
static void
-px_config_kde_read_config (PxConfigKde *self,
- char *proxy_file)
+on_file_changed (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
+{
+ PxConfigKde *self = PX_CONFIG_KDE (user_data);
+
+ g_debug ("%s: Reloading configuration\n", __FUNCTION__);
+ px_config_kde_set_config_file (self, g_file_get_path (file));
+}
+
+static void
+px_config_kde_set_config_file (PxConfigKde *self,
+ char *proxy_file)
{
g_autoptr (GError) error = NULL;
g_autofree char *line = NULL;
@@ -72,15 +89,19 @@ px_config_kde_read_config (PxConfigKde *self,
g_autoptr (GFileInputStream) istr = NULL;
g_autoptr (GDataInputStream) dstr = NULL;
- file = g_file_new_for_path (proxy_file);
+ g_clear_pointer (&self->config_file, g_free);
+ self->config_file = proxy_file ? g_strdup (proxy_file) : g_build_filename (g_get_user_config_dir (), "kioslaverc", NULL);
+ self->available = FALSE;
+
+ file = g_file_new_for_path (self->config_file);
if (!file) {
- g_debug ("%s: Could not create file", __FUNCTION__);
+ g_debug ("%s: Could not create file for %s", __FUNCTION__, self->config_file);
return;
}
istr = g_file_read (file, NULL, NULL);
if (!istr) {
- g_debug ("%s: Could not read file", __FUNCTION__);
+ g_debug ("%s: Could not read file %s", __FUNCTION__, self->config_file);
return;
}
@@ -88,6 +109,13 @@ px_config_kde_read_config (PxConfigKde *self,
if (!dstr)
return;
+ g_clear_object (&self->monitor);
+ self->monitor = g_file_monitor (file, G_FILE_MONITOR_NONE, NULL, &error);
+ if (!self->monitor)
+ g_warning ("Could not add a file monitor for %s, error: %s", g_file_get_uri (file), error->message);
+ else
+ g_signal_connect_object (G_OBJECT (self->monitor), "changed", G_CALLBACK (on_file_changed), self, 0);
+
do {
g_clear_pointer (&line, g_free);
@@ -122,25 +150,11 @@ px_config_kde_read_config (PxConfigKde *self,
}
}
} while (line);
-}
-
-static
-void
-px_config_kde_set_config_file (PxConfigKde *self,
- const char *file)
-{
- g_autofree char *config = NULL;
-
- g_clear_pointer (&self->config_option, g_free);
- self->config_option = file ? g_strdup (file) : NULL;
- config = self->config_option ? g_strdup (self->config_option) : g_build_filename (g_get_user_config_dir (), "kioslaverc", NULL);
-
- self->available = g_file_test (config, G_FILE_TEST_EXISTS);
- if (self->available)
- px_config_kde_read_config (self, config);
+ self->available = TRUE;
}
+
static void
px_config_kde_init (PxConfigKde *self)
{
@@ -150,6 +164,10 @@ px_config_kde_init (PxConfigKde *self)
static void
px_config_kde_dispose (GObject *object)
{
+ PxConfigKde *self = PX_CONFIG_KDE (object);
+
+ g_clear_object (&self->monitor);
+
G_OBJECT_CLASS (px_config_kde_parent_class)->dispose (object);
}
@@ -182,7 +200,7 @@ px_config_kde_get_property (GObject *object,
switch (prop_id) {
case PROP_CONFIG_OPTION:
- g_value_set_string (value, config->config_option);
+ g_value_set_string (value, config->config_file);
break;
default: