diff options
author | kotontrion <[email protected]> | 2024-07-19 09:47:49 +0200 |
---|---|---|
committer | kotontrion <[email protected]> | 2024-07-19 09:47:49 +0200 |
commit | 5cd9f20a93101da2738a4be3a0735a4d6cd3abf9 (patch) | |
tree | 824470511dee96d9fe412ec614a4c21031616534 /src | |
parent | 31776f401a9ff3124ca3feb1271cd17fb751081e (diff) |
move mixer handler to endpoints
Diffstat (limited to 'src')
-rw-r--r-- | src/endpoint.c | 19 | ||||
-rw-r--r-- | src/wireplumber.c | 21 |
2 files changed, 17 insertions, 23 deletions
diff --git a/src/endpoint.c b/src/endpoint.c index 2fbab5f..77b3104 100644 --- a/src/endpoint.c +++ b/src/endpoint.c @@ -28,7 +28,8 @@ typedef struct { gboolean is_default_node; AstalWpMediaClass media_class; - gulong signal_handler_id; + gulong default_signal_handler_id; + gulong mixer_signal_handler_id; } AstalWpEndpointPrivate; @@ -260,6 +261,11 @@ static void astal_wp_endpoint_default_changed(AstalWpEndpoint *self) { } } +static void astal_wp_endpoint_mixer_changed(AstalWpEndpoint *self, guint node_id) { + if (self->id != node_id) return; + astal_wp_endpoint_update_volume(self); +} + AstalWpEndpoint *astal_wp_endpoint_init_as_default(AstalWpEndpoint *self, WpPlugin *mixer, WpPlugin *defaults, AstalWpMediaClass type) { AstalWpEndpointPrivate *priv = astal_wp_endpoint_get_instance_private(self); @@ -271,8 +277,10 @@ AstalWpEndpoint *astal_wp_endpoint_init_as_default(AstalWpEndpoint *self, WpPlug priv->is_default_node = TRUE; self->is_default = TRUE; - priv->signal_handler_id = g_signal_connect_swapped( + priv->default_signal_handler_id = g_signal_connect_swapped( priv->defaults, "changed", G_CALLBACK(astal_wp_endpoint_default_changed_as_default), self); + priv->mixer_signal_handler_id = g_signal_connect_swapped( + priv->mixer, "changed", G_CALLBACK(astal_wp_endpoint_mixer_changed), self); astal_wp_endpoint_default_changed_as_default(self); astal_wp_endpoint_update_properties(self); @@ -288,8 +296,10 @@ AstalWpEndpoint *astal_wp_endpoint_create(WpNode *node, WpPlugin *mixer, WpPlugi priv->node = g_object_ref(node); priv->is_default_node = FALSE; - priv->signal_handler_id = g_signal_connect_swapped( + priv->default_signal_handler_id = g_signal_connect_swapped( priv->defaults, "changed", G_CALLBACK(astal_wp_endpoint_default_changed), self); + priv->mixer_signal_handler_id = g_signal_connect_swapped( + priv->mixer, "changed", G_CALLBACK(astal_wp_endpoint_mixer_changed), self); astal_wp_endpoint_update_properties(self); astal_wp_endpoint_default_changed(self); @@ -311,7 +321,8 @@ static void astal_wp_endpoint_dispose(GObject *object) { AstalWpEndpoint *self = ASTAL_WP_ENDPOINT(object); AstalWpEndpointPrivate *priv = astal_wp_endpoint_get_instance_private(self); - g_signal_handler_disconnect(priv->defaults, priv->signal_handler_id); + g_signal_handler_disconnect(priv->defaults, priv->default_signal_handler_id); + g_signal_handler_disconnect(priv->mixer, priv->mixer_signal_handler_id); g_print("dispose: id: %u, name: %s\n", self->id, self->description); diff --git a/src/wireplumber.c b/src/wireplumber.c index 74794e6..41ba36c 100644 --- a/src/wireplumber.c +++ b/src/wireplumber.c @@ -166,23 +166,6 @@ static void astal_wp_wp_object_removed(AstalWpWp *self, gpointer object) { g_signal_emit_by_name(self, "changed"); } -static void astal_wp_wp_mixer_changed(AstalWpWp *self, guint node_id) { - AstalWpWpPrivate *priv = astal_wp_wp_get_instance_private(self); - - AstalWpEndpoint *endpoint = g_hash_table_lookup(priv->endpoints, GUINT_TO_POINTER(node_id)); - - if (endpoint == NULL) return; - - astal_wp_endpoint_update_volume(endpoint); - - if (astal_wp_endpoint_get_id(self->default_speaker) == node_id) - astal_wp_endpoint_update_volume(self->default_speaker); - if (astal_wp_endpoint_get_id(self->default_microphone) == node_id) - astal_wp_endpoint_update_volume(self->default_microphone); - - g_signal_emit_by_name(self, "changed"); -} - static void astal_wp_wp_objm_installed(AstalWpWp *self) { AstalWpWpPrivate *priv = astal_wp_wp_get_instance_private(self); @@ -206,8 +189,8 @@ static void astal_wp_wp_plugin_activated(WpObject *obj, GAsyncResult *result, As priv->defaults = wp_plugin_find(priv->core, "default-nodes-api"); priv->mixer = wp_plugin_find(priv->core, "mixer-api"); - g_signal_connect_swapped(priv->mixer, "changed", (GCallback)astal_wp_wp_mixer_changed, - self); + // g_signal_connect_swapped(priv->mixer, "changed", (GCallback)astal_wp_wp_mixer_changed, + // self); // g_signal_connect_swapped(priv->defaults, "changed", // (GCallback)astal_wp_wp_default_changed, self); |