Skip to content
Snippets Groups Projects
Commit 3d46253d authored by George Kiagiadakis's avatar George Kiagiadakis
Browse files

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
parent ac7086d1
No related branches found
No related tags found
No related merge requests found
...@@ -173,6 +173,22 @@ static const struct pw_proxy_events proxy_events = { ...@@ -173,6 +173,22 @@ static const struct pw_proxy_events proxy_events = {
.done = proxy_event_done, .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 static void
wp_proxy_init (WpProxy * self) wp_proxy_init (WpProxy * self)
{ {
...@@ -190,13 +206,8 @@ wp_proxy_constructed (GObject * object) ...@@ -190,13 +206,8 @@ wp_proxy_constructed (GObject * object)
WpProxyPrivate *priv = wp_proxy_get_instance_private (self); WpProxyPrivate *priv = wp_proxy_get_instance_private (self);
/* native proxy was passed in the constructor, declare it as ready */ /* native proxy was passed in the constructor, declare it as ready */
if (priv->pw_proxy) { if (priv->pw_proxy)
priv->ft_ready |= WP_PROXY_FEATURE_PW_PROXY; wp_proxy_got_pw_proxy (self);
/* and inform the subclasses */
g_signal_emit (self, wp_proxy_signals[SIGNAL_PW_PROXY_CREATED], 0,
priv->pw_proxy);
}
} }
static void static void
...@@ -204,8 +215,8 @@ wp_proxy_finalize (GObject * object) ...@@ -204,8 +215,8 @@ wp_proxy_finalize (GObject * object)
{ {
WpProxyPrivate *priv = wp_proxy_get_instance_private (WP_PROXY(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), g_debug ("%s:%p destroyed (global %u; pw_proxy %p)",
object, priv->global_id, priv->pw_proxy); G_OBJECT_TYPE_NAME (object), object, priv->global_id, priv->pw_proxy);
g_clear_object (&priv->task); g_clear_object (&priv->task);
g_clear_pointer (&priv->global_props, wp_properties_unref); g_clear_pointer (&priv->global_props, wp_properties_unref);
...@@ -298,6 +309,7 @@ static void ...@@ -298,6 +309,7 @@ static void
wp_proxy_default_augment (WpProxy * self, WpProxyFeatures features) wp_proxy_default_augment (WpProxy * self, WpProxyFeatures features)
{ {
WpProxyPrivate *priv = wp_proxy_get_instance_private (self); WpProxyPrivate *priv = wp_proxy_get_instance_private (self);
g_autoptr (WpRemote) remote = NULL;
/* ensure we have a pw_proxy, as we can't have /* ensure we have a pw_proxy, as we can't have
* any other feature without first having that */ * any other feature without first having that */
...@@ -315,7 +327,14 @@ wp_proxy_default_augment (WpProxy * self, WpProxyFeatures features) ...@@ -315,7 +327,14 @@ wp_proxy_default_augment (WpProxy * self, WpProxyFeatures features)
return; 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) ...@@ -513,39 +532,6 @@ wp_proxy_augment_error (WpProxy * self, GError * error)
g_clear_object (&priv->task); 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 WpProxyFeatures
wp_proxy_get_features (WpProxy * self) wp_proxy_get_features (WpProxy * self)
{ {
......
...@@ -81,8 +81,6 @@ void wp_proxy_augment_error (WpProxy * self, GError * error); ...@@ -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); void wp_proxy_register_async_task (WpProxy * self, int seq, GTask * task);
GTask * wp_proxy_find_async_task (WpProxy * self, int seq, gboolean steal); GTask * wp_proxy_find_async_task (WpProxy * self, int seq, gboolean steal);
gboolean wp_proxy_bind_global (WpProxy * self);
G_END_DECLS G_END_DECLS
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment