summaryrefslogtreecommitdiff
path: root/libupower-glib
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2013-10-12 21:49:21 +0200
committerBastien Nocera <hadess@hadess.net>2013-10-14 11:06:53 +0200
commit28438a7672eec8277341d14121bf267f8e0542b3 (patch)
tree769fc3e58d834ab2cff22bb0483a9d024a652067 /libupower-glib
parent7531dbdac05f1698d565f564f2280aafbeb1ba57 (diff)
downloadupower-28438a7672eec8277341d14121bf267f8e0542b3.tar.gz
lib: Emit notify:: signals
In the UpClient object. https://bugs.freedesktop.org/show_bug.cgi?id=43001
Diffstat (limited to 'libupower-glib')
-rw-r--r--libupower-glib/up-client.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/libupower-glib/up-client.c b/libupower-glib/up-client.c
index 7057e79..cfc6ce8 100644
--- a/libupower-glib/up-client.c
+++ b/libupower-glib/up-client.c
@@ -275,6 +275,19 @@ out:
}
/*
+ * up_client_notify_cb:
+ */
+static void
+up_client_notify_cb (GObject *gobject,
+ GParamSpec *pspec,
+ UpClient *client)
+{
+ /* Proxy the notification from the D-Bus glue object
+ * to the real one */
+ g_object_notify (G_OBJECT (client), pspec->name);
+}
+
+/*
* up_client_added_cb:
*/
static void
@@ -569,6 +582,9 @@ static void
up_client_init (UpClient *client)
{
GError *error = NULL;
+ GParamSpec **specs;
+ guint n_props;
+ guint i;
client->priv = UP_CLIENT_GET_PRIVATE (client);
client->priv->array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
@@ -595,6 +611,18 @@ up_client_init (UpClient *client)
G_CALLBACK (up_device_changed_cb), client);
g_signal_connect (client->priv->proxy, "changed",
G_CALLBACK (up_client_changed_cb), client);
+
+ /* Proxy all the property notifications from the glue object */
+ specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (client), &n_props);
+ for (i = 0; i < n_props; i++) {
+ gchar *signal_name;
+
+ signal_name = g_strdup_printf ("notify::%s", specs[i]->name);
+ g_signal_connect (client->priv->proxy, signal_name,
+ G_CALLBACK (up_client_notify_cb), client);
+ g_free (signal_name);
+ }
+ g_free (specs);
}
/*