Blob Blame History Raw
From 8f75352b50bee9a5ed839eaa0b4fa899bbd540ce Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Tue, 18 Aug 2009 13:59:32 +0100
Subject: [PATCH] Update cut'n'paste from gnome-media

Slightly changed APIs.
---
 plugins/media-keys/cut-n-paste/gvc-mixer-control.c |   68 ++++++++++++++++++--
 plugins/media-keys/cut-n-paste/gvc-mixer-control.h |    2 +-
 plugins/media-keys/cut-n-paste/gvc-mixer-stream.c  |    3 +-
 3 files changed, 66 insertions(+), 7 deletions(-)

diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-control.c b/plugins/media-keys/cut-n-paste/gvc-mixer-control.c
index 6986202..dc2ea2f 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-control.c
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-control.c
@@ -42,6 +42,11 @@
 
 #define GVC_MIXER_CONTROL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControlPrivate))
 
+enum {
+        PROP_0,
+        PROP_NAME
+};
+
 struct GvcMixerControlPrivate
 {
         pa_glib_mainloop *pa_mainloop;
@@ -49,6 +54,7 @@ struct GvcMixerControlPrivate
         pa_context       *pa_context;
         int               n_outstanding;
         guint             reconnect_id;
+        char             *name;
 
         gboolean          default_sink_is_set;
         guint             default_sink_id;
@@ -614,7 +620,7 @@ update_sink (GvcMixerControl    *control,
 
         if (map == NULL)
                 map = gvc_mixer_stream_get_channel_map (stream);
-        gvc_channel_map_volume_changed (map, &info->volume, TRUE);
+        gvc_channel_map_volume_changed (map, &info->volume, FALSE);
 }
 
 static void
@@ -1464,11 +1470,10 @@ gvc_mixer_new_pa_context (GvcMixerControl *self)
         g_return_if_fail (self);
         g_return_if_fail (!self->priv->pa_context);
 
-        /* FIXME: read these from an object property */
         proplist = pa_proplist_new ();
         pa_proplist_sets (proplist,
                           PA_PROP_APPLICATION_NAME,
-                          _("GNOME Volume Control"));
+                          self->priv->name);
         pa_proplist_sets (proplist,
                           PA_PROP_APPLICATION_ID,
                           "org.gnome.VolumeControl");
@@ -1644,6 +1649,45 @@ gvc_mixer_control_dispose (GObject *object)
         G_OBJECT_CLASS (gvc_mixer_control_parent_class)->dispose (object);
 }
 
+static void
+gvc_mixer_control_set_property (GObject       *object,
+                                guint          prop_id,
+                                const GValue  *value,
+                                GParamSpec    *pspec)
+{
+        GvcMixerControl *self = GVC_MIXER_CONTROL (object);
+
+        switch (prop_id) {
+        case PROP_NAME:
+                g_free (self->priv->name);
+                self->priv->name = g_value_dup_string (value);
+                g_object_notify (G_OBJECT (self), "name");
+                break;
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                break;
+        }
+}
+
+static void
+gvc_mixer_control_get_property (GObject     *object,
+                                guint        prop_id,
+                                GValue      *value,
+                                GParamSpec  *pspec)
+{
+        GvcMixerControl *self = GVC_MIXER_CONTROL (object);
+
+        switch (prop_id) {
+        case PROP_NAME:
+                g_value_set_string (value, self->priv->name);
+                break;
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                break;
+        }
+}
+
+
 static GObject *
 gvc_mixer_control_constructor (GType                  type,
                                guint                  n_construct_properties,
@@ -1669,6 +1713,16 @@ gvc_mixer_control_class_init (GvcMixerControlClass *klass)
         object_class->constructor = gvc_mixer_control_constructor;
         object_class->dispose = gvc_mixer_control_dispose;
         object_class->finalize = gvc_mixer_control_finalize;
+        object_class->set_property = gvc_mixer_control_set_property;
+        object_class->get_property = gvc_mixer_control_get_property;
+
+        g_object_class_install_property (object_class,
+                                         PROP_NAME,
+                                         g_param_spec_string ("name",
+                                                              "Name",
+                                                              "Name to display for this mixer control",
+                                                              NULL,
+                                                              G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
 
         signals [CONNECTING] =
                 g_signal_new ("connecting",
@@ -1751,15 +1805,19 @@ gvc_mixer_control_finalize (GObject *object)
         g_return_if_fail (GVC_IS_MIXER_CONTROL (object));
 
         mixer_control = GVC_MIXER_CONTROL (object);
+        g_free (mixer_control->priv->name);
+        mixer_control->priv->name = NULL;
 
         g_return_if_fail (mixer_control->priv != NULL);
         G_OBJECT_CLASS (gvc_mixer_control_parent_class)->finalize (object);
 }
 
 GvcMixerControl *
-gvc_mixer_control_new (void)
+gvc_mixer_control_new (const char *name)
 {
         GObject *control;
-        control = g_object_new (GVC_TYPE_MIXER_CONTROL, NULL);
+        control = g_object_new (GVC_TYPE_MIXER_CONTROL,
+                                "name", name,
+                                NULL);
         return GVC_MIXER_CONTROL (control);
 }
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-control.h b/plugins/media-keys/cut-n-paste/gvc-mixer-control.h
index 3de9e62..cba7c5a 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-control.h
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-control.h
@@ -60,7 +60,7 @@ typedef struct
 
 GType               gvc_mixer_control_get_type            (void);
 
-GvcMixerControl *   gvc_mixer_control_new                 (void);
+GvcMixerControl *   gvc_mixer_control_new                 (const char *name);
 
 gboolean            gvc_mixer_control_open                (GvcMixerControl *control);
 gboolean            gvc_mixer_control_close               (GvcMixerControl *control);
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c
index 0f8bea7..45f64f4 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c
@@ -151,9 +151,10 @@ gvc_mixer_stream_set_volume (GvcMixerStream *stream,
         if (!pa_cvolume_equal(gvc_channel_map_get_cvolume(stream->priv->channel_map), &cv)) {
                 gvc_channel_map_volume_changed(stream->priv->channel_map, &cv, FALSE);
                 g_object_notify (G_OBJECT (stream), "volume");
+                return TRUE;
         }
 
-        return TRUE;
+        return FALSE;
 }
 
 gboolean
-- 
1.6.2.5