diff options
Diffstat (limited to 'backends/pulse/pulse-stream.c')
-rw-r--r-- | backends/pulse/pulse-stream.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/backends/pulse/pulse-stream.c b/backends/pulse/pulse-stream.c index ec3939f..c7ac52a 100644 --- a/backends/pulse/pulse-stream.c +++ b/backends/pulse/pulse-stream.c @@ -56,6 +56,7 @@ struct _PulseStreamPrivate MateMixerPort *port; PulseConnection *connection; PulseMonitor *monitor; + gchar *monitor_name; }; enum { @@ -139,6 +140,8 @@ static gboolean stream_resume (MateMixerStream static gboolean stream_monitor_start (MateMixerStream *stream); static void stream_monitor_stop (MateMixerStream *stream); static gboolean stream_monitor_is_running (MateMixerStream *stream); +static gboolean stream_monitor_set_name (MateMixerStream *stream, + const gchar *name); static void stream_monitor_value (PulseMonitor *monitor, gdouble value, MateMixerStream *stream); @@ -192,6 +195,7 @@ mate_mixer_stream_interface_init (MateMixerStreamInterface *iface) iface->monitor_start = stream_monitor_start; iface->monitor_stop = stream_monitor_stop; iface->monitor_is_running = stream_monitor_is_running; + iface->monitor_set_name = stream_monitor_set_name; iface->list_ports = stream_list_ports; iface->get_active_port = stream_get_active_port; iface->set_active_port = stream_set_active_port; @@ -942,7 +946,6 @@ stream_resume (MateMixerStream *stream) return PULSE_STREAM_GET_CLASS (stream)->resume (stream); } -// XXX allow to provide custom translated monitor name static gboolean stream_monitor_start (MateMixerStream *stream) { @@ -958,11 +961,16 @@ stream_monitor_start (MateMixerStream *stream) if (G_UNLIKELY (pulse->priv->monitor == NULL)) return FALSE; + pulse_monitor_set_name (pulse->priv->monitor, + pulse->priv->monitor_name); + g_signal_connect (G_OBJECT (pulse->priv->monitor), "value", G_CALLBACK (stream_monitor_value), stream); } + g_debug ("Enabling monitor for stream %s", pulse->priv->name); + return pulse_monitor_enable (pulse->priv->monitor); } @@ -975,8 +983,12 @@ stream_monitor_stop (MateMixerStream *stream) pulse = PULSE_STREAM (stream); - if (pulse->priv->monitor) + if (pulse->priv->monitor && + pulse_monitor_is_enabled (pulse->priv->monitor)) { + g_debug ("Disabling monitor for stream %s", pulse->priv->name); + pulse_monitor_disable (pulse->priv->monitor); + } } static gboolean @@ -994,6 +1006,22 @@ stream_monitor_is_running (MateMixerStream *stream) return FALSE; } +static gboolean +stream_monitor_set_name (MateMixerStream *stream, const gchar *name) +{ + PulseStream *pulse; + + g_return_val_if_fail (PULSE_IS_STREAM (stream), FALSE); + + pulse = PULSE_STREAM (stream); + + if (pulse->priv->monitor) + pulse_monitor_set_name (pulse->priv->monitor, name); + + pulse->priv->monitor_name = g_strdup (name); + return TRUE; +} + static void stream_monitor_value (PulseMonitor *monitor, gdouble value, MateMixerStream *stream) { |