gdbus: Add g_dbus_proxy_set_removed_watch
authorDenis Kenzior <denkenz@gmail.com>
Thu, 7 Feb 2013 16:22:57 +0000 (10:22 -0600)
committerDenis Kenzior <denkenz@gmail.com>
Thu, 14 Feb 2013 14:47:10 +0000 (08:47 -0600)
gdbus/client.c
gdbus/gdbus.h

index 0311f9a..369e3ac 100644 (file)
@@ -62,6 +62,8 @@ struct GDBusProxy {
        char *match_rule;
        GDBusPropertyFunction prop_func;
        void *prop_data;
+       GDBusProxyFunction removed_func;
+       void *removed_data;
 };
 
 struct prop_entry {
@@ -394,6 +396,9 @@ static void proxy_free(gpointer data)
                proxy->client = NULL;
        }
 
+       if (proxy->removed_func)
+               proxy->removed_func(proxy, proxy->removed_data);
+
        g_dbus_proxy_unref(proxy);
 }
 
@@ -761,6 +766,18 @@ gboolean g_dbus_proxy_set_property_watch(GDBusProxy *proxy,
        return TRUE;
 }
 
+gboolean g_dbus_proxy_set_removed_watch(GDBusProxy *proxy,
+                               GDBusProxyFunction function, void *user_data)
+{
+       if (proxy == NULL)
+               return FALSE;
+
+       proxy->removed_func = function;
+       proxy->removed_data = user_data;
+
+       return TRUE;
+}
+
 static void refresh_properties(GDBusClient *client)
 {
        GList *list;
index 6f5a012..8b13393 100644 (file)
@@ -341,6 +341,9 @@ typedef void (* GDBusPropertyFunction) (GDBusProxy *proxy, const char *name,
 gboolean g_dbus_proxy_set_property_watch(GDBusProxy *proxy,
                        GDBusPropertyFunction function, void *user_data);
 
+gboolean g_dbus_proxy_set_removed_watch(GDBusProxy *proxy,
+                       GDBusProxyFunction destroy, void *user_data);
+
 GDBusClient *g_dbus_client_new(DBusConnection *connection,
                                        const char *service, const char *path);