From: Marcel Holtmann Date: Fri, 14 Dec 2012 18:48:06 +0000 (+0100) Subject: gdbus: Add callback support for handling property changes X-Git-Tag: 1.12~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=90c719f29c519bb8fc434afdcfe8b5c3d47db76c;p=platform%2Fupstream%2Fofono.git gdbus: Add callback support for handling property changes --- diff --git a/gdbus/client.c b/gdbus/client.c index c0e9ecb..e32cefe 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; } diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h index fa978db..57c2685 100644 --- a/gdbus/gdbus.h +++ b/gdbus/gdbus.h @@ -302,10 +302,14 @@ gboolean g_dbus_client_set_signal_watch(GDBusClient *client, GDBusMessageFunction function, void *user_data); typedef void (* GDBusProxyFunction) (GDBusProxy *proxy, void *user_data); +typedef void (* GDBusPropertyFunction) (GDBusProxy *proxy, const char *name, + DBusMessageIter *iter, void *user_data); 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); #ifdef __cplusplus }