From 3d46253dd667e91dbbc77aec6a77dbc4fb39aedf Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Thu, 29 Aug 2019 21:21:51 +0300
Subject: [PATCH] proxy: hide the bind() API and fix attaching the listener in
 wrap mode

In case the proxy was created with wp_proxy_new_wrap(), the event
listener was not attached on the pw_proxy
---
 lib/wp/proxy.c | 72 ++++++++++++++++++++------------------------------
 lib/wp/proxy.h |  2 --
 2 files changed, 29 insertions(+), 45 deletions(-)

diff --git a/lib/wp/proxy.c b/lib/wp/proxy.c
index 4e5fd08d..66781c8e 100644
--- a/lib/wp/proxy.c
+++ b/lib/wp/proxy.c
@@ -173,6 +173,22 @@ static const struct pw_proxy_events proxy_events = {
   .done = proxy_event_done,
 };
 
+static void
+wp_proxy_got_pw_proxy (WpProxy * self)
+{
+  WpProxyPrivate *priv = wp_proxy_get_instance_private (self);
+
+  pw_proxy_add_listener (priv->pw_proxy, &priv->listener, &proxy_events,
+      self);
+
+  /* inform subclasses and listeners */
+  g_signal_emit (self, wp_proxy_signals[SIGNAL_PW_PROXY_CREATED], 0,
+      priv->pw_proxy);
+
+  /* declare the feature as ready */
+  wp_proxy_set_feature_ready (self, WP_PROXY_FEATURE_PW_PROXY);
+}
+
 static void
 wp_proxy_init (WpProxy * self)
 {
@@ -190,13 +206,8 @@ wp_proxy_constructed (GObject * object)
   WpProxyPrivate *priv = wp_proxy_get_instance_private (self);
 
   /* native proxy was passed in the constructor, declare it as ready */
-  if (priv->pw_proxy) {
-    priv->ft_ready |= WP_PROXY_FEATURE_PW_PROXY;
-
-    /* and inform the subclasses */
-    g_signal_emit (self, wp_proxy_signals[SIGNAL_PW_PROXY_CREATED], 0,
-        priv->pw_proxy);
-  }
+  if (priv->pw_proxy)
+    wp_proxy_got_pw_proxy (self);
 }
 
 static void
@@ -204,8 +215,8 @@ wp_proxy_finalize (GObject * object)
 {
   WpProxyPrivate *priv = wp_proxy_get_instance_private (WP_PROXY(object));
 
-  g_debug ("%s:%p destroyed (global %u; pw_proxy %p)", G_OBJECT_TYPE_NAME (object),
-      object, priv->global_id, priv->pw_proxy);
+  g_debug ("%s:%p destroyed (global %u; pw_proxy %p)",
+      G_OBJECT_TYPE_NAME (object), object, priv->global_id, priv->pw_proxy);
 
   g_clear_object (&priv->task);
   g_clear_pointer (&priv->global_props, wp_properties_unref);
@@ -298,6 +309,7 @@ static void
 wp_proxy_default_augment (WpProxy * self, WpProxyFeatures features)
 {
   WpProxyPrivate *priv = wp_proxy_get_instance_private (self);
+  g_autoptr (WpRemote) remote = NULL;
 
   /* ensure we have a pw_proxy, as we can't have
    * any other feature without first having that */
@@ -315,7 +327,14 @@ wp_proxy_default_augment (WpProxy * self, WpProxyFeatures features)
       return;
     }
 
-    wp_proxy_bind_global (self);
+    remote = g_weak_ref_get (&priv->remote);
+    g_return_if_fail (remote);
+
+    /* bind */
+    priv->pw_proxy = wp_remote_pipewire_proxy_bind (
+        WP_REMOTE_PIPEWIRE (remote),
+        priv->global_id, priv->iface_type);
+    wp_proxy_got_pw_proxy (self);
   }
 }
 
@@ -513,39 +532,6 @@ wp_proxy_augment_error (WpProxy * self, GError * error)
   g_clear_object (&priv->task);
 }
 
-gboolean
-wp_proxy_bind_global (WpProxy * self)
-{
-  WpProxyPrivate *priv;
-  g_autoptr (WpRemote) remote = NULL;
-
-  g_return_val_if_fail (wp_proxy_is_global (self), FALSE);
-
-  priv = wp_proxy_get_instance_private (self);
-
-  if (priv->pw_proxy)
-    return FALSE;
-
-  remote = g_weak_ref_get (&priv->remote);
-  g_return_val_if_fail (remote != NULL, FALSE);
-
-  /* bind */
-  priv->pw_proxy  = wp_remote_pipewire_proxy_bind (
-      WP_REMOTE_PIPEWIRE (remote),
-      priv->global_id, priv->iface_type);
-  pw_proxy_add_listener (priv->pw_proxy, &priv->listener, &proxy_events,
-      self);
-
-  /* inform subclasses and listeners */
-  g_signal_emit (self, wp_proxy_signals[SIGNAL_PW_PROXY_CREATED], 0,
-      priv->pw_proxy);
-
-  /* declare the feature as ready */
-  wp_proxy_set_feature_ready (self, WP_PROXY_FEATURE_PW_PROXY);
-
-  return TRUE;
-}
-
 WpProxyFeatures
 wp_proxy_get_features (WpProxy * self)
 {
diff --git a/lib/wp/proxy.h b/lib/wp/proxy.h
index 99a359b8..800d760b 100644
--- a/lib/wp/proxy.h
+++ b/lib/wp/proxy.h
@@ -81,8 +81,6 @@ void wp_proxy_augment_error (WpProxy * self, GError * error);
 void wp_proxy_register_async_task (WpProxy * self, int seq, GTask * task);
 GTask * wp_proxy_find_async_task (WpProxy * self, int seq, gboolean steal);
 
-gboolean wp_proxy_bind_global (WpProxy * self);
-
 G_END_DECLS
 
 #endif
-- 
GitLab