summaryrefslogtreecommitdiffstats
path: root/gdbus/client.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2012-12-14 19:48:06 +0100
committerMarcel Holtmann <marcel@holtmann.org>2012-12-19 03:50:42 +0100
commit90c719f29c519bb8fc434afdcfe8b5c3d47db76c (patch)
treea3a9ba56002ad920ba71c91921740991aeabf6e2 /gdbus/client.c
parentf40f27cd444500fe13850c8d5c0282f81e71806c (diff)
downloadofono-90c719f29c519bb8fc434afdcfe8b5c3d47db76c.tar.bz2
gdbus: Add callback support for handling property changes
Diffstat (limited to 'gdbus/client.c')
-rw-r--r--gdbus/client.c33
1 files changed, 25 insertions, 8 deletions
diff --git a/gdbus/client.c b/gdbus/client.c
index c0e9ecbc..e32cefed 100644
--- a/gdbus/client.c
+++ b/gdbus/client.c
@@ -46,7 +46,8 @@ struct GDBusClient {
void *signal_data;
GDBusProxyFunction proxy_added;
GDBusProxyFunction proxy_removed;
- void *proxy_data;
+ GDBusPropertyFunction property_changed;
+ void *user_data;
GList *proxy_list;
};
@@ -230,7 +231,7 @@ static void proxy_free(gpointer data)
GDBusClient *client = proxy->client;
if (client->proxy_removed)
- client->proxy_removed(proxy, client->proxy_data);
+ client->proxy_removed(proxy, client->user_data);
modify_match(client->dbus_conn, "RemoveMatch",
proxy->match_rule);
@@ -433,7 +434,16 @@ static void add_property(GDBusProxy *proxy, const char *name,
prop = g_hash_table_lookup(proxy->prop_list, name);
if (prop != NULL) {
+ GDBusClient *client = proxy->client;
+
prop_entry_update(prop, &value);
+
+ if (client == NULL)
+ return;
+
+ if (client->property_changed)
+ client->property_changed(proxy, name, &value,
+ client->user_data);
return;
}
@@ -518,6 +528,10 @@ static void properties_changed(GDBusClient *client, const char *path,
g_hash_table_remove(proxy->prop_list, name);
+ if (client->property_changed)
+ client->property_changed(proxy, name, NULL,
+ client->user_data);
+
dbus_message_iter_next(&entry);
}
}
@@ -540,7 +554,7 @@ static void parse_properties(GDBusClient *client, const char *path,
update_properties(proxy, iter);
if (client->proxy_added)
- client->proxy_added(proxy, client->proxy_data);
+ client->proxy_added(proxy, client->user_data);
client->proxy_list = g_list_append(client->proxy_list, proxy);
}
@@ -994,15 +1008,18 @@ gboolean g_dbus_client_set_signal_watch(GDBusClient *client,
}
gboolean g_dbus_client_set_proxy_handlers(GDBusClient *client,
- GDBusProxyFunction added,
- GDBusProxyFunction removed, void *user_data)
+ GDBusProxyFunction proxy_added,
+ GDBusProxyFunction proxy_removed,
+ GDBusPropertyFunction property_changed,
+ void *user_data)
{
if (client == NULL)
return FALSE;
- client->proxy_added = added;
- client->proxy_removed = removed;
- client->proxy_data = user_data;
+ client->proxy_added = proxy_added;
+ client->proxy_removed = proxy_removed;
+ client->property_changed = property_changed;
+ client->user_data = user_data;
return TRUE;
}