Diff between 404d8b142919531f271ddbaaa761d3bb0848307d and 906ba9c5550e451c66d2e9dfcf83e13cf17a06f4

Changed Files

File Additions Deletions Status
gdbus/client.c +17 -0 modified
gdbus/gdbus.h +3 -0 modified

Full Patch

diff --git a/gdbus/client.c b/gdbus/client.c
index 0311f9a..369e3ac 100644
--- a/gdbus/client.c
+++ b/gdbus/client.c
@@ -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;
diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h
index 6f5a012..8b13393 100644
--- a/gdbus/gdbus.h
+++ b/gdbus/gdbus.h
@@ -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);