summaryrefslogtreecommitdiffstats
path: root/gdbus
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-05-29 14:43:27 +0000
committerJohan Hedberg <johan.hedberg@nokia.com>2008-05-29 14:43:27 +0000
commitcc0f97ec2cb298bde87cd3753fd96f11ce41ff64 (patch)
treee02bb5f68ca60810d2793708939306174f4aa100 /gdbus
parent4baf1de49d3aad2837a968a18a7181d568ff9457 (diff)
Change name_listener API to libgdbus watch API
Diffstat (limited to 'gdbus')
-rw-r--r--gdbus/gdbus.h16
-rw-r--r--gdbus/watch.c63
2 files changed, 21 insertions, 58 deletions
diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h
index 6f3ddb79..22c10569 100644
--- a/gdbus/gdbus.h
+++ b/gdbus/gdbus.h
@@ -185,14 +185,14 @@ gboolean g_dbus_send_reply(DBusConnection *connection,
gboolean g_dbus_send_reply_valist(DBusConnection *connection,
DBusMessage *message, int type, va_list args);
-typedef void (*name_cb_t)(const char *name, void *user_data);
-
-guint name_listener_add(DBusConnection *connection, const char *name,
- name_cb_t func, void *user_data);
-int name_listener_remove(DBusConnection *connection, const char *name,
- name_cb_t func, void *user_data);
-gboolean name_listener_id_remove(guint id);
-int name_listener_indicate_disconnect(DBusConnection *connection);
+typedef void (* GDBusWatchFunction) (void *user_data);
+
+guint g_dbus_add_disconnect_watch(DBusConnection *connection,
+ const char *name,
+ GDBusWatchFunction function,
+ void *user_data, GDBusDestroyFunction destroy);
+gboolean g_dbus_remove_watch(DBusConnection *connection, guint tag);
+void g_dbus_remove_all_watches(DBusConnection *connection);
#ifdef __cplusplus
}
diff --git a/gdbus/watch.c b/gdbus/watch.c
index 80be3a6a..3c7a03a4 100644
--- a/gdbus/watch.c
+++ b/gdbus/watch.c
@@ -41,7 +41,7 @@ static guint listener_id = 0;
static GSList *name_listeners = NULL;
struct name_callback {
- name_cb_t func;
+ GDBusWatchFunction func;
void *user_data;
guint id;
};
@@ -74,7 +74,7 @@ static struct name_data *name_data_find(DBusConnection *connection,
}
static struct name_callback *name_callback_find(GSList *callbacks,
- name_cb_t func, void *user_data)
+ GDBusWatchFunction func, void *user_data)
{
GSList *current;
@@ -94,7 +94,7 @@ static void name_data_call_and_free(struct name_data *data)
for (l = data->callbacks; l != NULL; l = l->next) {
struct name_callback *cb = l->data;
if (cb->func)
- cb->func(data->name, cb->user_data);
+ cb->func(cb->user_data);
g_free(cb);
}
@@ -116,7 +116,7 @@ static void name_data_free(struct name_data *data)
}
static int name_data_add(DBusConnection *connection, const char *name,
- name_cb_t func, void *user_data, guint id)
+ GDBusWatchFunction func, void *user_data, guint id)
{
int first = 1;
struct name_data *data = NULL;
@@ -147,7 +147,7 @@ done:
}
static void name_data_remove(DBusConnection *connection,
- const char *name, name_cb_t func, void *user_data)
+ const char *name, GDBusWatchFunction func, void *user_data)
{
struct name_data *data;
struct name_callback *cb = NULL;
@@ -246,7 +246,7 @@ static DBusHandlerResult name_exit_filter(DBusConnection *connection,
for (l = data->callbacks; l != NULL; l = l->next) {
struct name_callback *cb = l->data;
- cb->func(name, cb->user_data);
+ cb->func(cb->user_data);
}
name_listeners = g_slist_remove(name_listeners, data);
@@ -257,8 +257,10 @@ static DBusHandlerResult name_exit_filter(DBusConnection *connection,
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
-guint name_listener_add(DBusConnection *connection, const char *name,
- name_cb_t func, void *user_data)
+guint g_dbus_add_disconnect_watch(DBusConnection *connection,
+ const char *name,
+ GDBusWatchFunction func,
+ void *user_data, GDBusDestroyFunction destroy)
{
int first;
@@ -289,44 +291,7 @@ guint name_listener_add(DBusConnection *connection, const char *name,
return listener_id;
}
-int name_listener_remove(DBusConnection *connection, const char *name,
- name_cb_t func, void *user_data)
-{
- struct name_data *data;
- struct name_callback *cb;
-
- data = name_data_find(connection, name);
- if (!data) {
- error("remove_name_listener: no listener for %s", name);
- return -1;
- }
-
- cb = name_callback_find(data->callbacks, func, user_data);
- if (!cb) {
- error("No matching callback found for %s", name);
- return -1;
- }
-
- data->callbacks = g_slist_remove(data->callbacks, cb);
- g_free(cb);
-
- /* Don't remove the filter if other callbacks exist */
- if (data->callbacks)
- return 0;
-
- if (name) {
- debug("name_listener_remove(%s)", name);
-
- if (!remove_match(connection, name))
- return -1;
- }
-
- name_data_remove(connection, name, func, user_data);
-
- return 0;
-}
-
-gboolean name_listener_id_remove(guint id)
+gboolean g_dbus_remove_watch(DBusConnection *connection, guint id)
{
struct name_data *data;
struct name_callback *cb;
@@ -362,19 +327,17 @@ remove:
return TRUE;
}
-int name_listener_indicate_disconnect(DBusConnection *connection)
+void g_dbus_remove_all_watches(DBusConnection *connection)
{
struct name_data *data;
data = name_data_find(connection, NULL);
if (!data) {
error("name_listener_indicate_disconnect: no listener found");
- return -1;
+ return;
}
debug("name_listener_indicate_disconnect");
name_data_call_and_free(data);
-
- return 0;
}