From 236ea5e0f2f2a4198ff7a1d769f6237613b8ed04 Mon Sep 17 00:00:00 2001
From: Julian Bouzas <julian.bouzas@collabora.com>
Date: Thu, 20 Jun 2019 09:01:40 -0400
Subject: [PATCH] proxy: add wp_proxy_sync API and DONE signal

---
 lib/wp/proxy.c | 25 ++++++++++++++++++++++---
 lib/wp/proxy.h |  4 +++-
 2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/lib/wp/proxy.c b/lib/wp/proxy.c
index c5082f15..137f70d3 100644
--- a/lib/wp/proxy.c
+++ b/lib/wp/proxy.c
@@ -35,6 +35,7 @@ enum {
 enum
 {
   SIGNAL_DESTROYED,
+  SIGNAL_DONE,
   LAST_SIGNAL,
 };
 
@@ -63,6 +64,9 @@ proxy_event_done (void *data, int seq)
 {
   WpProxyPrivate *self = wp_proxy_get_instance_private (WP_PROXY(data));
 
+  /* Emit the done signal */
+  g_signal_emit (data, wp_proxy_signals[SIGNAL_DONE], 0);
+
   /* Make sure the task is valid */
   if (!self->done_task)
     return;
@@ -152,7 +156,7 @@ wp_proxy_init_async (GAsyncInitable *initable, int io_priority,
   pw_proxy_add_listener (self->proxy, &self->listener, &proxy_events, initable);
 
   /* Trigger the done callback */
-  pw_proxy_sync(self->proxy, 0);
+  wp_proxy_sync(WP_PROXY(initable));
 }
 
 static gboolean
@@ -199,8 +203,11 @@ wp_proxy_class_init (WpProxyClass * klass)
   /* Signals */
   wp_proxy_signals[SIGNAL_DESTROYED] =
     g_signal_new ("destroyed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
-    G_STRUCT_OFFSET (WpProxyClass, destroyed), NULL, NULL,
-    g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+    G_STRUCT_OFFSET (WpProxyClass, destroyed), NULL, NULL, NULL, G_TYPE_NONE,
+    0);
+  wp_proxy_signals[SIGNAL_DONE] =
+    g_signal_new ("done", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (WpProxyClass, done), NULL, NULL, NULL, G_TYPE_NONE, 0);
 }
 
 guint
@@ -224,3 +231,15 @@ wp_proxy_get_pw_proxy (WpProxy * self)
   priv = wp_proxy_get_instance_private (self);
   return priv->proxy;
 }
+
+void wp_proxy_sync (WpProxy * self)
+{
+  WpProxyPrivate *priv;
+
+  g_return_if_fail (WP_IS_PROXY (self));
+
+  priv = wp_proxy_get_instance_private (self);
+
+  /* Trigger the done callback */
+  pw_proxy_sync(priv->proxy, 0);
+}
diff --git a/lib/wp/proxy.h b/lib/wp/proxy.h
index 456b29b4..be3570b4 100644
--- a/lib/wp/proxy.h
+++ b/lib/wp/proxy.h
@@ -24,11 +24,13 @@ struct _WpProxyClass
   GObjectClass parent_class;
 
   /* Signals */
-  void (*destroyed)(WpProxy *wp_proxy);
+  void (*destroyed)(WpProxy *wp_proxy, gpointer data);
+  void (*done)(WpProxy *wp_proxy, gpointer data);
 };
 
 guint wp_proxy_get_global_id (WpProxy * self);
 gpointer wp_proxy_get_pw_proxy (WpProxy * self);
+void wp_proxy_sync (WpProxy * self);
 
 G_END_DECLS
 
-- 
GitLab