diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2012-11-27 14:51:20 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-11-30 09:58:21 +0100 |
commit | c50f33b0dcd6b14dddca33be8a667c0f0e089c85 (patch) | |
tree | 9a8eed83b52af859c31ca7f9ff0672e5d6fe2355 | |
parent | e9d288043acfc5a2143dc9e22b3da18eb1125bd0 (diff) | |
download | obexd-c50f33b0dcd6b14dddca33be8a667c0f0e089c85.tar.gz |
gdbus: Add g_dbus_add_properties_watch function
Convenient function to create watches for D-Bus properties.
-rw-r--r-- | gdbus/gdbus.h | 5 | ||||
-rw-r--r-- | gdbus/watch.c | 28 |
2 files changed, 33 insertions, 0 deletions
diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h index 6aafc61..dd21f86 100644 --- a/gdbus/gdbus.h +++ b/gdbus/gdbus.h @@ -243,6 +243,11 @@ guint g_dbus_add_signal_watch(DBusConnection *connection, const char *interface, const char *member, GDBusSignalFunction function, void *user_data, GDBusDestroyFunction destroy); +guint g_dbus_add_properties_watch(DBusConnection *connection, + const char *sender, const char *path, + const char *interface, + GDBusSignalFunction function, void *user_data, + GDBusDestroyFunction destroy); gboolean g_dbus_remove_watch(DBusConnection *connection, guint tag); void g_dbus_remove_all_watches(DBusConnection *connection); diff --git a/gdbus/watch.c b/gdbus/watch.c index 1cd1211..9e4f994 100644 --- a/gdbus/watch.c +++ b/gdbus/watch.c @@ -752,6 +752,34 @@ guint g_dbus_add_signal_watch(DBusConnection *connection, return cb->id; } +guint g_dbus_add_properties_watch(DBusConnection *connection, + const char *sender, const char *path, + const char *interface, + GDBusSignalFunction function, void *user_data, + GDBusDestroyFunction destroy) +{ + struct filter_data *data; + struct filter_callback *cb; + + data = filter_data_get(connection, signal_filter, sender, path, + DBUS_INTERFACE_PROPERTIES, "PropertiesChanged", + interface); + if (data == NULL) + return 0; + + cb = filter_data_add_callback(data, NULL, NULL, function, destroy, + user_data); + if (cb == NULL) + return 0; + + if (data->name != NULL && data->name_watch == 0) + data->name_watch = g_dbus_add_service_watch(connection, + data->name, NULL, + NULL, NULL, NULL); + + return cb->id; +} + gboolean g_dbus_remove_watch(DBusConnection *connection, guint id) { struct filter_data *data; |