mirror of
https://github.com/zoriya/astal.git
synced 2026-06-04 18:46:01 +00:00
move mixer handler to endpoints
This commit is contained in:
+15
-4
@@ -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);
|
||||
|
||||
|
||||
+2
-19
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user