Skip to content

Commit 2f2f231

Browse files
committed
wireplumber: improve property handling
1 parent c1bd89a commit 2f2f231

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

lib/wireplumber/src/device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,13 +517,19 @@ static void astal_wp_device_params_changed(AstalWpDevice *self, const gchar *pro
517517
g_object_thaw_notify(G_OBJECT(self));
518518
}
519519

520+
static void astal_wp_device_pw_properties_changed(AstalWpDevice *self) {
521+
astal_wp_device_params_changed(self, "Props");
522+
}
523+
520524
void astal_wp_device_constructed(GObject *object) {
521525
AstalWpDevice *self = ASTAL_WP_DEVICE(object);
522526
AstalWpDevicePrivate *priv = astal_wp_device_get_instance_private(self);
523527

524528
g_signal_connect_swapped(priv->device, "params-changed",
525529
G_CALLBACK(astal_wp_device_params_changed), self);
526530

531+
g_signal_connect_swapped(priv->device, "notify::properties",
532+
G_CALLBACK(astal_wp_device_pw_properties_changed), self);
527533
astal_wp_device_params_changed(self, "Props");
528534
astal_wp_device_params_changed(self, "EnumProfile");
529535
astal_wp_device_params_changed(self, "Profile");

lib/wireplumber/src/node.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ typedef struct {
2020

2121
gulong mixer_signal_handler_id;
2222
gulong params_signal_handler_id;
23+
gulong properties_signal_handler_id;
2324
gulong state_change_handler_id;
2425

2526
guint id;
@@ -70,6 +71,8 @@ static GParamSpec *astal_wp_node_properties[ASTAL_WP_NODE_N_PROPERTIES] = {
7071
NULL,
7172
};
7273

74+
static void astal_wp_node_pw_properties_changed(AstalWpNode *self);
75+
7376
void astal_wp_node_update_volume(AstalWpNode *self) {
7477
AstalWpNodePrivate *priv = astal_wp_node_get_instance_private(self);
7578

@@ -436,12 +439,16 @@ void astal_wp_node_set_node(AstalWpNode *self, WpNode *node) {
436439
if (node != NULL && WP_IS_NODE(node)) {
437440
if (priv->node != NULL) {
438441
g_signal_handler_disconnect(priv->node, priv->params_signal_handler_id);
442+
g_signal_handler_disconnect(priv->node, priv->properties_signal_handler_id);
439443
g_signal_handler_disconnect(priv->node, priv->state_change_handler_id);
440444
}
441445
g_clear_object(&priv->node);
442446
priv->node = g_object_ref(node);
443447
priv->params_signal_handler_id = g_signal_connect_swapped(
444448
priv->node, "params-changed", G_CALLBACK(astal_wp_node_params_changed), self);
449+
priv->properties_signal_handler_id =
450+
g_signal_connect_swapped(priv->node, "notify::properties",
451+
G_CALLBACK(astal_wp_node_pw_properties_changed), self);
445452
priv->state_change_handler_id = g_signal_connect_swapped(
446453
priv->node, "state-changed", G_CALLBACK(astal_wp_node_state_changed), self);
447454
}
@@ -670,6 +677,10 @@ void astal_wp_node_params_changed(AstalWpNode *self, const gchar *id) {
670677
(*klass->params_changed)(self, id);
671678
}
672679

680+
static void astal_wp_node_pw_properties_changed(AstalWpNode *self) {
681+
astal_wp_node_params_changed(self, "Props");
682+
}
683+
673684
static void astal_wp_node_init(AstalWpNode *self) {
674685
AstalWpNodePrivate *priv = astal_wp_node_get_instance_private(self);
675686
priv->node = NULL;

0 commit comments

Comments
 (0)