[gnome-media] Actually stop the source monitor when switching defaults
- From: Bastien Nocera <hadess src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-media] Actually stop the source monitor when switching defaults
- Date: Tue, 2 Feb 2010 17:10:24 +0000 (UTC)
commit 6de46af913bd019cef6e3eb228f98633a1ab9e9d
Author: Bastien Nocera <hadess hadess net>
Date: Tue Feb 2 17:09:20 2010 +0000
Actually stop the source monitor when switching defaults
So we don't consume resources reading from all the sources, and
we don't update the level bar with multiple overlapping
level readings.
gnome-volume-control/src/gvc-mixer-dialog.c | 33 +++++++++++++++++++++++++++
1 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/gnome-volume-control/src/gvc-mixer-dialog.c b/gnome-volume-control/src/gvc-mixer-dialog.c
index f415d32..6b8b0b3 100644
--- a/gnome-volume-control/src/gvc-mixer-dialog.c
+++ b/gnome-volume-control/src/gvc-mixer-dialog.c
@@ -536,10 +536,41 @@ create_monitor_stream_for_source (GvcMixerDialog *dialog,
pa_stream_unref (s);
} else {
g_object_set_data (G_OBJECT (stream), "has-monitor", GINT_TO_POINTER (TRUE));
+ g_object_set_data (G_OBJECT (dialog->priv->input_level_bar), "pa_stream", s);
+ g_object_set_data (G_OBJECT (dialog->priv->input_level_bar), "stream", stream);
}
}
static void
+stop_monitor_stream_for_source (GvcMixerDialog *dialog)
+{
+ pa_stream *s;
+ pa_context *context;
+ int res;
+ GvcMixerStream *stream;
+
+ s = g_object_get_data (G_OBJECT (dialog->priv->input_level_bar), "pa_stream");
+ if (s == NULL)
+ return;
+ stream = g_object_get_data (G_OBJECT (dialog->priv->input_level_bar), "stream");
+ g_assert (stream != NULL);
+
+ g_debug ("Stopping monitor for %u", pa_stream_get_index (s));
+
+ context = gvc_mixer_control_get_pa_context (dialog->priv->mixer_control);
+
+ if (pa_context_get_server_protocol_version (context) < 13) {
+ return;
+ }
+
+ res = pa_stream_disconnect (s);
+ if (res == 0)
+ g_object_set_data (G_OBJECT (stream), "has-monitor", GINT_TO_POINTER (FALSE));
+ g_object_set_data (G_OBJECT (dialog->priv->input_level_bar), "pa_stream", NULL);
+ g_object_set_data (G_OBJECT (dialog->priv->input_level_bar), "stream", NULL);
+}
+
+static void
update_input_settings (GvcMixerDialog *dialog)
{
const GList *ports;
@@ -547,6 +578,8 @@ update_input_settings (GvcMixerDialog *dialog)
g_debug ("Updating input settings");
+ stop_monitor_stream_for_source (dialog);
+
if (dialog->priv->input_port_combo != NULL) {
gtk_container_remove (GTK_CONTAINER (dialog->priv->input_settings_box),
dialog->priv->input_port_combo);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]