[gnome-media] Bug 574198 – don't show virtual streams



commit 72f3fb9394009e396f162ff05ba56ddf6a4a7f90
Author: Bastien Nocera <hadess hadess net>
Date:   Thu May 21 13:51:29 2009 +0100

    Bug 574198 â?? don't show virtual streams
    
    Hide PulseAudio's virtual streams from the volume control.
    
    Based on patch by Marc-Andre Lureau.
---
 gnome-volume-control/src/gvc-mixer-control.c |    1 +
 gnome-volume-control/src/gvc-mixer-dialog.c  |    1 +
 gnome-volume-control/src/gvc-mixer-stream.c  |   45 +++++++++++++++++++++++---
 gnome-volume-control/src/gvc-mixer-stream.h  |    3 ++
 4 files changed, 45 insertions(+), 5 deletions(-)

diff --git a/gnome-volume-control/src/gvc-mixer-control.c b/gnome-volume-control/src/gvc-mixer-control.c
index 5c9f3f1..fc72fb4 100644
--- a/gnome-volume-control/src/gvc-mixer-control.c
+++ b/gnome-volume-control/src/gvc-mixer-control.c
@@ -806,6 +806,7 @@ update_sink_input (GvcMixerControl          *control,
         set_icon_name_from_proplist (stream, info->proplist, "applications-multimedia");
         gvc_mixer_stream_set_volume (stream, (guint)max_volume);
         gvc_mixer_stream_set_is_muted (stream, info->mute);
+        gvc_mixer_stream_set_is_virtual (stream, info->client == PA_INVALID_INDEX);
 
         if (is_new) {
                 g_hash_table_insert (control->priv->sink_inputs,
diff --git a/gnome-volume-control/src/gvc-mixer-dialog.c b/gnome-volume-control/src/gvc-mixer-dialog.c
index a2a4a87..124ac96 100644
--- a/gnome-volume-control/src/gvc-mixer-dialog.c
+++ b/gnome-volume-control/src/gvc-mixer-dialog.c
@@ -741,6 +741,7 @@ add_stream (GvcMixerDialog *dialog,
         } else if (! GVC_IS_MIXER_SOURCE (stream)
                    && !GVC_IS_MIXER_SINK (stream)
                    && !gvc_mixer_stream_is_event_stream (stream)
+                   && !gvc_mixer_stream_is_virtual (stream)
                    && g_strcmp0 (id, "org.gnome.VolumeControl") != 0
                    && g_strcmp0 (id, "org.PulseAudio.pavucontrol") != 0) {
                 bar = create_bar (dialog, dialog->priv->apps_size_group, FALSE);
diff --git a/gnome-volume-control/src/gvc-mixer-stream.c b/gnome-volume-control/src/gvc-mixer-stream.c
index eeb5ade..e5cfb19 100644
--- a/gnome-volume-control/src/gvc-mixer-stream.c
+++ b/gnome-volume-control/src/gvc-mixer-stream.c
@@ -48,6 +48,7 @@ struct GvcMixerStreamPrivate
         gboolean       is_muted;
         gboolean       can_decibel;
         gboolean       is_event_stream;
+        gboolean       is_virtual;
         pa_volume_t    base_volume;
         pa_operation  *change_volume_op;
 };
@@ -68,6 +69,7 @@ enum
         PROP_IS_MUTED,
         PROP_CAN_DECIBEL,
         PROP_IS_EVENT_STREAM,
+        PROP_IS_VIRTUAL,
 };
 
 static void     gvc_mixer_stream_class_init (GvcMixerStreamClass *klass);
@@ -275,6 +277,26 @@ gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
         return TRUE;
 }
 
+gboolean
+gvc_mixer_stream_is_virtual (GvcMixerStream *stream)
+{
+        g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+        return stream->priv->is_virtual;
+}
+
+gboolean
+gvc_mixer_stream_set_is_virtual (GvcMixerStream *stream,
+                                 gboolean is_virtual)
+{
+        g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+        stream->priv->is_virtual = is_virtual;
+        g_object_notify (G_OBJECT (stream), "is-virtual");
+
+        return TRUE;
+}
+
 const char *
 gvc_mixer_stream_get_application_id (GvcMixerStream *stream)
 {
@@ -419,6 +441,9 @@ gvc_mixer_stream_set_property (GObject       *object,
         case PROP_IS_EVENT_STREAM:
                 gvc_mixer_stream_set_is_event_stream (self, g_value_get_boolean (value));
                 break;
+        case PROP_IS_VIRTUAL:
+                gvc_mixer_stream_set_is_virtual (self, g_value_get_boolean (value));
+                break;
         case PROP_CAN_DECIBEL:
                 gvc_mixer_stream_set_can_decibel (self, g_value_get_boolean (value));
                 break;
@@ -475,6 +500,9 @@ gvc_mixer_stream_get_property (GObject     *object,
         case PROP_IS_EVENT_STREAM:
                 g_value_set_boolean (value, self->priv->is_event_stream);
                 break;
+        case PROP_IS_VIRTUAL:
+                g_value_set_boolean (value, self->priv->is_virtual);
+                break;
         case PROP_CAN_DECIBEL:
                 g_value_set_boolean (value, self->priv->can_decibel);
                 break;
@@ -517,15 +545,15 @@ gvc_mixer_stream_real_change_is_muted (GvcMixerStream *stream,
 gboolean
 gvc_mixer_stream_push_volume (GvcMixerStream *stream)
 {
-	pa_operation *op;
+        pa_operation *op;
         gboolean ret;
         g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
         ret = GVC_MIXER_STREAM_GET_CLASS (stream)->push_volume (stream, (gpointer *) &op);
         if (ret) {
-        	if (stream->priv->change_volume_op != NULL)
-        		pa_operation_unref (stream->priv->change_volume_op);
-        	stream->priv->change_volume_op = op;
-	}
+                if (stream->priv->change_volume_op != NULL)
+                        pa_operation_unref (stream->priv->change_volume_op);
+                stream->priv->change_volume_op = op;
+        }
         return ret;
 }
 
@@ -658,6 +686,13 @@ gvc_mixer_stream_class_init (GvcMixerStreamClass *klass)
                                                                "Whether stream's role is to play an event",
                                                                FALSE,
                                                                G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+        g_object_class_install_property (gobject_class,
+                                         PROP_IS_VIRTUAL,
+                                         g_param_spec_boolean ("is-virtual",
+                                                               "is virtual stream",
+                                                               "Whether the stream is virtual",
+                                                               FALSE,
+                                                               G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
         g_type_class_add_private (klass, sizeof (GvcMixerStreamPrivate));
 }
 
diff --git a/gnome-volume-control/src/gvc-mixer-stream.h b/gnome-volume-control/src/gvc-mixer-stream.h
index fb45c6f..4171ca3 100644
--- a/gnome-volume-control/src/gvc-mixer-stream.h
+++ b/gnome-volume-control/src/gvc-mixer-stream.h
@@ -75,6 +75,7 @@ const char *        gvc_mixer_stream_get_icon_name   (GvcMixerStream *stream);
 const char *        gvc_mixer_stream_get_description (GvcMixerStream *stream);
 const char *        gvc_mixer_stream_get_application_id (GvcMixerStream *stream);
 gboolean            gvc_mixer_stream_is_event_stream (GvcMixerStream *stream);
+gboolean            gvc_mixer_stream_is_virtual      (GvcMixerStream *stream);
 
 /* private */
 gboolean            gvc_mixer_stream_set_volume      (GvcMixerStream *stream,
@@ -93,6 +94,8 @@ gboolean            gvc_mixer_stream_set_icon_name   (GvcMixerStream *stream,
                                                       const char     *name);
 gboolean            gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
                                                           gboolean is_event_stream);
+gboolean            gvc_mixer_stream_set_is_virtual  (GvcMixerStream *stream,
+                                                      gboolean is_event_stream);
 gboolean            gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
                                                          const char *application_id);
 gboolean            gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]