diff --git a/lib/wp/global-proxy.c b/lib/wp/global-proxy.c index 046795aa..d7f70208 100644 --- a/lib/wp/global-proxy.c +++ b/lib/wp/global-proxy.c @@ -7,6 +7,7 @@ */ #include "global-proxy.h" +#include "collection-manager.h" #include "private/registry.h" #include "core.h" #include "error.h" @@ -51,6 +52,7 @@ enum { PROP_FACTORY_NAME, PROP_GLOBAL_PROPERTIES, PROP_PERMISSIONS, + PROP_COLLECTION_NAME, }; G_DEFINE_TYPE_WITH_PRIVATE (WpGlobalProxy, wp_global_proxy, WP_TYPE_PROXY) @@ -125,6 +127,9 @@ wp_global_proxy_get_property (GObject * object, guint property_id, case PROP_GLOBAL_PROPERTIES: g_value_take_boxed (value, wp_global_proxy_get_global_properties (self)); break; + case PROP_COLLECTION_NAME: + g_value_set_string (value, wp_global_proxy_get_collection_name (self)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -308,6 +313,11 @@ wp_global_proxy_class_init (WpGlobalProxyClass * klass) g_param_spec_uint ("permissions", "permissions", "The pipewire global permissions", 0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (object_class, PROP_COLLECTION_NAME, + g_param_spec_string ("collection-name", "collection-name", + "The collection name this global proxy belongs to", NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); } /*! @@ -376,6 +386,34 @@ wp_global_proxy_get_global_properties (WpGlobalProxy * self) return NULL; } +/*! + * \brief Gets the collection name of the pipewire global if it was collected + * into a collection. + * \ingroup wpglobalproxy + * \param self the pipewire global + * \returns (nullable): the collection name this pipewire global belongs to, or + * NULL if the pipewire global does not belong to any collection + */ +const gchar * +wp_global_proxy_get_collection_name (WpGlobalProxy * self) +{ + g_autoptr (WpCore) core = NULL; + const gchar *collection_name = NULL; + + core = wp_object_get_core (WP_OBJECT (self)); + if (core) { + g_autoptr (WpCollectionManager) cm = NULL; + cm = wp_collection_manager_find (core, NULL); + if (cm) { + g_autoptr (WpCollection) c = NULL; + c = wp_collection_manager_get_global_collection (cm, self); + if (c) + collection_name = wp_collection_get_name (c); + } + } + return collection_name; +} + /*! * \brief Binds to the global and creates the underlying `pw_proxy`. * diff --git a/lib/wp/global-proxy.h b/lib/wp/global-proxy.h index 3bb82084..e1d45504 100644 --- a/lib/wp/global-proxy.h +++ b/lib/wp/global-proxy.h @@ -41,6 +41,9 @@ WP_API WpProperties * wp_global_proxy_get_global_properties ( WpGlobalProxy * self); +WP_API +const gchar * wp_global_proxy_get_collection_name (WpGlobalProxy * self); + WP_API gboolean wp_global_proxy_bind (WpGlobalProxy * self);