summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanielle Madeley <danielle.madeley@collabora.co.uk>2010-07-19 14:46:56 +0100
committerDanielle Madeley <danielle.madeley@collabora.co.uk>2010-08-06 19:14:18 +1000
commit3745787733fc7fd57b20667c3042c2abdcd178fe (patch)
treeba4cf607d309c7cddf0626c2c0703a2fd4533050
parent3398e2f2f6cd6645ff862da717185fdd9f591989 (diff)
downloadtelepathy-logger-3745787733fc7fd57b20667c3042c2abdcd178fe.tar.gz
Add globally-enabled property + notification
-rw-r--r--telepathy-logger/conf.c71
-rw-r--r--telepathy-logger/observer.c14
2 files changed, 85 insertions, 0 deletions
diff --git a/telepathy-logger/conf.c b/telepathy-logger/conf.c
index 1f094c5..9cf9908 100644
--- a/telepathy-logger/conf.c
+++ b/telepathy-logger/conf.c
@@ -45,6 +45,65 @@ typedef struct {
} TplConfPriv;
+enum /* properties */
+{
+ PROP_0,
+ PROP_GLOBALLY_ENABLED
+};
+
+
+static void
+_notify_globally_enable (GSettings *gsettings,
+ const gchar *key,
+ GObject *self)
+{
+ g_object_notify (self, "globally-enabled");
+}
+
+
+static void
+tpl_conf_get_property (GObject *self,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ TplConfPriv *priv = GET_PRIV (self);
+
+ switch (prop_id)
+ {
+ case PROP_GLOBALLY_ENABLED:
+ g_value_set_boolean (value,
+ g_settings_get_boolean (priv->gsettings, KEY_ENABLED));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+tpl_conf_set_property (GObject *self,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ TplConfPriv *priv = GET_PRIV (self);
+
+ switch (prop_id)
+ {
+ case PROP_GLOBALLY_ENABLED:
+ g_settings_set_boolean (priv->gsettings, KEY_ENABLED,
+ g_value_get_boolean (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
+ break;
+ }
+}
+
+
static void
tpl_conf_finalize (GObject *obj)
{
@@ -89,9 +148,18 @@ _tpl_conf_class_init (TplConfClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->get_property = tpl_conf_get_property;
+ object_class->set_property = tpl_conf_set_property;
object_class->finalize = tpl_conf_finalize;
object_class->constructor = tpl_conf_constructor;
+ g_object_class_install_property (object_class, PROP_GLOBALLY_ENABLED,
+ g_param_spec_boolean ("globally-enabled",
+ "Globally Enabled",
+ "TRUE if logging is enabled (may still be disabled for specific users)",
+ TRUE,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
+
g_type_class_add_private (object_class, sizeof (TplConfPriv));
}
@@ -103,6 +171,9 @@ _tpl_conf_init (TplConf *self)
TPL_TYPE_CONF, TplConfPriv);
priv->gsettings = g_settings_new (GSETTINGS_SCHEMA);
+
+ g_signal_connect (priv->gsettings, "changed::" KEY_ENABLED,
+ G_CALLBACK (_notify_globally_enable), self);
}
diff --git a/telepathy-logger/observer.c b/telepathy-logger/observer.c
index be710c2..88210d8 100644
--- a/telepathy-logger/observer.c
+++ b/telepathy-logger/observer.c
@@ -231,6 +231,17 @@ _tpl_observer_register_channel (TplObserver *self,
}
static void
+_globally_enabled_changed (TplConf *conf,
+ GParamSpec *pspec,
+ TplObserver *self)
+{
+ gboolean enabled = _tpl_conf_is_globally_enabled (conf);
+
+ DEBUG ("Globally %s all logging",
+ enabled ? "enabling" : "disabling");
+}
+
+static void
got_tpl_channel_text_ready_cb (GObject *obj,
GAsyncResult *result,
gpointer user_data)
@@ -369,6 +380,9 @@ _tpl_observer_init (TplObserver *self)
priv->logmanager = tpl_log_manager_dup_singleton ();
+ g_signal_connect (priv->conf, "notify::globally-enabled",
+ G_CALLBACK (_globally_enabled_changed), self);
+
/* Observe contact text channels */
tp_base_client_take_observer_filter (TP_BASE_CLIENT (self),
tp_asv_new (