diff --git a/lib/wp/proxy.c b/lib/wp/proxy.c index 8926f6d1ffdec8ead9668bf03d5094cf0741f805..a35e33aada7d4e640cef33ec038d2c80f0ad4d05 100644 --- a/lib/wp/proxy.c +++ b/lib/wp/proxy.c @@ -32,6 +32,14 @@ enum { PROP_PROXY, }; +enum +{ + SIGNAL_DESTROYED, + LAST_SIGNAL, +}; + +static guint wp_proxy_signals[LAST_SIGNAL] = { 0 }; + static void wp_proxy_async_initable_init (gpointer iface, gpointer iface_data); G_DEFINE_ABSTRACT_TYPE_WITH_CODE (WpProxy, wp_proxy, G_TYPE_OBJECT, @@ -44,6 +52,9 @@ proxy_event_destroy (void *data) WpProxyPrivate *self = wp_proxy_get_instance_private (WP_PROXY(data)); g_autoptr (WpCore) core = g_weak_ref_get (&self->core); + /* Emit the destroy signal */ + g_signal_emit (data, wp_proxy_signals[SIGNAL_DESTROYED], 0); + /* Set the proxy to NULL */ self->proxy = NULL; @@ -193,6 +204,12 @@ wp_proxy_class_init (WpProxyClass * klass) g_object_class_install_property (object_class, PROP_PROXY, g_param_spec_pointer ("pw-proxy", "pw-proxy", "The pipewire proxy", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + + /* 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); } void diff --git a/lib/wp/proxy.h b/lib/wp/proxy.h index 24bc0dda16a58422557b0cf0f6bb64d25d4261c5..6ef85489688ab52fb8c8336dba192bac75239cc6 100644 --- a/lib/wp/proxy.h +++ b/lib/wp/proxy.h @@ -22,6 +22,9 @@ G_DECLARE_DERIVABLE_TYPE (WpProxy, wp_proxy, WP, PROXY, GObject) struct _WpProxyClass { GObjectClass parent_class; + + /* Signals */ + void (*destroyed)(WpProxy *wp_proxy); }; void wp_proxy_register (WpProxy * self);