Diff between 60be3174a3cf5e9707c92e90d4adc007a31b9692 and c4f68e776a7e20cae059805cec073dd8f7546b8d

Changed Files

File Additions Deletions Status
gdbus/client.c +23 -0 modified

Full Patch

diff --git a/gdbus/client.c b/gdbus/client.c
index 76e4cc1..d7d9e36 100644
--- a/gdbus/client.c
+++ b/gdbus/client.c
@@ -196,6 +196,23 @@ static void prop_entry_free(gpointer data)
 	g_free(prop);
 }
 
+static GDBusProxy *proxy_lookup(GDBusClient *client, const char *path,
+						const char *interface)
+{
+	GList *list;
+
+	for (list = g_list_first(client->proxy_list); list;
+						list = g_list_next(list)) {
+		GDBusProxy *proxy = list->data;
+
+		if (g_str_equal(proxy->interface, interface) == TRUE &&
+				g_str_equal(proxy->obj_path, path) == TRUE)
+			return proxy;
+        }
+
+	return NULL;
+}
+
 static GDBusProxy *proxy_new(GDBusClient *client, const char *path,
 						const char *interface)
 {
@@ -621,6 +638,12 @@ static void parse_properties(GDBusClient *client, const char *path,
 	if (g_str_equal(interface, DBUS_INTERFACE_PROPERTIES) == TRUE)
 		return;
 
+	proxy = proxy_lookup(client, path, interface);
+	if (proxy) {
+		update_properties(proxy, iter);
+		return;
+	}
+
 	proxy = proxy_new(client, path, interface);
 	if (proxy == NULL)
 		return;