gdbus: Add g_dbus_client_set_ready_watch()
authorClaudio Takahasi <claudio.takahasi@openbossa.org>
Thu, 6 Mar 2014 13:44:19 +0000 (10:44 -0300)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 6 Mar 2014 17:36:48 +0000 (09:36 -0800)
This patch adds a new gdbus helper to notify the clients that
GetManagedObjects reply was received and the last proxy has been
informed previously by the proxy_added callback.

gdbus/client.c
gdbus/gdbus.h

index be8cc29..5193b6c 100644 (file)
@@ -56,6 +56,8 @@ struct GDBusClient {
        void *signal_data;
        GDBusProxyFunction proxy_added;
        GDBusProxyFunction proxy_removed;
+       GDBusClientFunction ready;
+       void *ready_data;
        GDBusPropertyFunction property_changed;
        void *user_data;
        GList *proxy_list;
@@ -982,6 +984,9 @@ static void parse_managed_objects(GDBusClient *client, DBusMessage *msg)
 
                dbus_message_iter_next(&dict);
        }
+
+       if (client->ready)
+               client->ready(client, client->ready_data);
 }
 
 static void get_managed_objects_reply(DBusPendingCall *call, void *user_data)
@@ -1243,6 +1248,18 @@ gboolean g_dbus_client_set_signal_watch(GDBusClient *client,
        return TRUE;
 }
 
+gboolean g_dbus_client_set_ready_watch(GDBusClient *client,
+                               GDBusClientFunction ready, void *user_data)
+{
+       if (client == NULL)
+               return FALSE;
+
+       client->ready = ready;
+       client->ready_data = user_data;
+
+       return TRUE;
+}
+
 gboolean g_dbus_client_set_proxy_handlers(GDBusClient *client,
                                        GDBusProxyFunction proxy_added,
                                        GDBusProxyFunction proxy_removed,
index 9542109..8ada200 100644 (file)
@@ -337,6 +337,7 @@ gboolean g_dbus_proxy_method_call(GDBusProxy *proxy, const char *method,
                                GDBusReturnFunction function, void *user_data,
                                GDBusDestroyFunction destroy);
 
+typedef void (* GDBusClientFunction) (GDBusClient *client, void *user_data);
 typedef void (* GDBusProxyFunction) (GDBusProxy *proxy, void *user_data);
 typedef void (* GDBusPropertyFunction) (GDBusProxy *proxy, const char *name,
                                        DBusMessageIter *iter, void *user_data);
@@ -359,7 +360,8 @@ gboolean g_dbus_client_set_disconnect_watch(GDBusClient *client,
                                GDBusWatchFunction function, void *user_data);
 gboolean g_dbus_client_set_signal_watch(GDBusClient *client,
                                GDBusMessageFunction function, void *user_data);
-
+gboolean g_dbus_client_set_ready_watch(GDBusClient *client,
+                               GDBusClientFunction ready, void *user_data);
 gboolean g_dbus_client_set_proxy_handlers(GDBusClient *client,
                                        GDBusProxyFunction proxy_added,
                                        GDBusProxyFunction proxy_removed,