[gnome-settings-daemon] media-keys: Update from gnome-control-center



commit 07f8bfe829cab0b200f75cec18ddccb70a5d1002
Author: Bastien Nocera <hadess hadess net>
Date:   Fri Oct 28 17:03:26 2011 +0100

    media-keys: Update from gnome-control-center
    
    Update cut-n-paste from gnome-control-center

 plugins/media-keys/cut-n-paste/gvc-mixer-card.c    |    9 +++
 plugins/media-keys/cut-n-paste/gvc-mixer-control.c |   61 +++++++++-----------
 plugins/media-keys/cut-n-paste/gvc-mixer-control.h |   15 ++++-
 plugins/media-keys/cut-n-paste/gvc-mixer-sink.c    |    4 -
 plugins/media-keys/cut-n-paste/gvc-mixer-source.c  |    4 -
 plugins/media-keys/cut-n-paste/gvc-mixer-stream.c  |   47 +++++++++++++++
 plugins/media-keys/cut-n-paste/gvc-mixer-stream.h  |    3 +
 7 files changed, 99 insertions(+), 44 deletions(-)
---
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-card.c b/plugins/media-keys/cut-n-paste/gvc-mixer-card.c
index 56502e3..168bc79 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-card.c
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-card.c
@@ -263,6 +263,11 @@ gvc_mixer_card_change_profile (GvcMixerCard *card,
         return TRUE;
 }
 
+/**
+ * gvc_mixer_card_get_profiles:
+ *
+ * Return value: (transfer none) (element-type GvcMixerCardProfile):
+ */
 const GList *
 gvc_mixer_card_get_profiles (GvcMixerCard *card)
 {
@@ -281,6 +286,10 @@ sort_profiles (GvcMixerCardProfile *a,
         return -1;
 }
 
+/**
+ * gvc_mixer_card_set_profiles:
+ * @profiles: (transfer full) (element-type GvcMixerCardProfile):
+ */
 gboolean
 gvc_mixer_card_set_profiles (GvcMixerCard *card,
                              GList        *profiles)
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 0e64165..3568386 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-control.c
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-control.c
@@ -81,11 +81,12 @@ struct GvcMixerControlPrivate
         GHashTable       *cards;
 
         GvcMixerStream   *new_default_stream; /* new default stream, used in gvc_mixer_control_set_default_sink () */
+
+        GvcMixerControlState state;
 };
 
 enum {
-        CONNECTING,
-        READY,
+        STATE_CHANGED,
         STREAM_ADDED,
         STREAM_REMOVED,
         CARD_ADDED,
@@ -508,16 +509,17 @@ dec_outstanding (GvcMixerControl *control)
         }
 
         if (--control->priv->n_outstanding <= 0) {
-                g_signal_emit (G_OBJECT (control), signals[READY], 0);
+                control->priv->state = GVC_STATE_READY;
+                g_signal_emit (G_OBJECT (control), signals[STATE_CHANGED], 0, GVC_STATE_READY);
         }
 }
 
-gboolean
-gvc_mixer_control_is_ready (GvcMixerControl *control)
+GvcMixerControlState
+gvc_mixer_control_get_state (GvcMixerControl *control)
 {
         g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
 
-        return (control->priv->n_outstanding == 0);
+        return control->priv->state;
 }
 
 
@@ -786,16 +788,14 @@ update_sink (GvcMixerControl    *control,
         stream = g_hash_table_lookup (control->priv->sinks,
                                       GUINT_TO_POINTER (info->index));
         if (stream == NULL) {
-#if PA_MICRO > 15
                 GList *list = NULL;
                 guint i;
-#endif /* PA_MICRO > 15 */
 
                 map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
                 stream = gvc_mixer_sink_new (control->priv->pa_context,
                                              info->index,
                                              map);
-#if PA_MICRO > 15
+
                 for (i = 0; i < info->n_ports; i++) {
                         GvcMixerStreamPort *port;
 
@@ -806,7 +806,7 @@ update_sink (GvcMixerControl    *control,
                         list = g_list_prepend (list, port);
                 }
                 gvc_mixer_stream_set_ports (stream, list);
-#endif /* PA_MICRO > 15 */
+
                 g_object_unref (map);
                 is_new = TRUE;
         } else if (gvc_mixer_stream_is_running (stream)) {
@@ -820,14 +820,14 @@ update_sink (GvcMixerControl    *control,
         gvc_mixer_stream_set_card_index (stream, info->card);
         gvc_mixer_stream_set_description (stream, info->description);
         set_icon_name_from_proplist (stream, info->proplist, "audio-card");
+        gvc_mixer_stream_set_sysfs_path (stream, pa_proplist_gets (info->proplist, "sysfs.path"));
         gvc_mixer_stream_set_volume (stream, (guint)max_volume);
         gvc_mixer_stream_set_is_muted (stream, info->mute);
         gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SINK_DECIBEL_VOLUME));
         gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume);
-#if PA_MICRO > 15
+
         if (info->active_port != NULL)
                 gvc_mixer_stream_set_port (stream, info->active_port->name);
-#endif /* PA_MICRO > 15 */
 
         if (is_new) {
                 g_hash_table_insert (control->priv->sinks,
@@ -872,17 +872,15 @@ update_source (GvcMixerControl      *control,
         stream = g_hash_table_lookup (control->priv->sources,
                                       GUINT_TO_POINTER (info->index));
         if (stream == NULL) {
-#if PA_MICRO > 15
                 GList *list = NULL;
                 guint i;
-#endif /* PA_MICRO > 15 */
                 GvcChannelMap *map;
 
                 map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
                 stream = gvc_mixer_source_new (control->priv->pa_context,
                                                info->index,
                                                map);
-#if PA_MICRO > 15
+
                 for (i = 0; i < info->n_ports; i++) {
                         GvcMixerStreamPort *port;
 
@@ -893,7 +891,6 @@ update_source (GvcMixerControl      *control,
                         list = g_list_prepend (list, port);
                 }
                 gvc_mixer_stream_set_ports (stream, list);
-#endif /* PA_MICRO > 15 */
 
                 g_object_unref (map);
                 is_new = TRUE;
@@ -913,10 +910,9 @@ update_source (GvcMixerControl      *control,
         gvc_mixer_stream_set_is_muted (stream, info->mute);
         gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SOURCE_DECIBEL_VOLUME));
         gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume);
-#if PA_MICRO > 15
+
         if (info->active_port != NULL)
                 gvc_mixer_stream_set_port (stream, info->active_port->name);
-#endif /* PA_MICRO > 15 */
 
         if (is_new) {
                 g_hash_table_insert (control->priv->sources,
@@ -1943,7 +1939,8 @@ _pa_context_state_cb (pa_context *context,
                 break;
 
         case PA_CONTEXT_FAILED:
-                g_warning ("Connection failed, reconnecting...");
+                control->priv->state = GVC_STATE_FAILED;
+                g_signal_emit (control, signals[STATE_CHANGED], 0, GVC_STATE_FAILED);
                 if (control->priv->reconnect_id == 0)
                         control->priv->reconnect_id = g_timeout_add_seconds (RECONNECT_DELAY, idle_reconnect, control);
                 break;
@@ -1968,7 +1965,8 @@ gvc_mixer_control_open (GvcMixerControl *control)
                                        _pa_context_state_cb,
                                        control);
 
-        g_signal_emit (G_OBJECT (control), signals[CONNECTING], 0);
+        control->priv->state = GVC_STATE_CONNECTING;
+        g_signal_emit (G_OBJECT (control), signals[STATE_CHANGED], 0, GVC_STATE_CONNECTING);
         res = pa_context_connect (control->priv->pa_context, NULL, (pa_context_flags_t) PA_CONTEXT_NOFAIL, NULL);
         if (res < 0) {
                 g_warning ("Failed to connect context: %s",
@@ -1985,6 +1983,9 @@ gvc_mixer_control_close (GvcMixerControl *control)
         g_return_val_if_fail (control->priv->pa_context != NULL, FALSE);
 
         pa_context_disconnect (control->priv->pa_context);
+
+        control->priv->state = GVC_STATE_CLOSED;
+        g_signal_emit (G_OBJECT (control), signals[STATE_CHANGED], 0, GVC_STATE_CLOSED);
         return TRUE;
 }
 
@@ -2125,22 +2126,14 @@ gvc_mixer_control_class_init (GvcMixerControlClass *klass)
                                                               NULL,
                                                               G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
 
-        signals [CONNECTING] =
-                g_signal_new ("connecting",
-                              G_TYPE_FROM_CLASS (klass),
-                              G_SIGNAL_RUN_LAST,
-                              G_STRUCT_OFFSET (GvcMixerControlClass, connecting),
-                              NULL, NULL,
-                              g_cclosure_marshal_VOID__VOID,
-                              G_TYPE_NONE, 0);
-        signals [READY] =
-                g_signal_new ("ready",
+        signals [STATE_CHANGED] =
+                g_signal_new ("state-changed",
                               G_TYPE_FROM_CLASS (klass),
                               G_SIGNAL_RUN_LAST,
-                              G_STRUCT_OFFSET (GvcMixerControlClass, ready),
+                              G_STRUCT_OFFSET (GvcMixerControlClass, state_changed),
                               NULL, NULL,
-                              g_cclosure_marshal_VOID__VOID,
-                              G_TYPE_NONE, 0);
+                              g_cclosure_marshal_VOID__UINT,
+                              G_TYPE_NONE, 1, G_TYPE_UINT);
         signals [STREAM_ADDED] =
                 g_signal_new ("stream-added",
                               G_TYPE_FROM_CLASS (klass),
@@ -2212,6 +2205,8 @@ gvc_mixer_control_init (GvcMixerControl *control)
         control->priv->cards = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
 
         control->priv->clients = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_free);
+
+        control->priv->state = GVC_STATE_CLOSED;
 }
 
 static void
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 3aa2c94..598ca01 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-control.h
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-control.h
@@ -27,6 +27,14 @@
 
 G_BEGIN_DECLS
 
+typedef enum
+{
+        GVC_STATE_CLOSED,
+        GVC_STATE_READY,
+        GVC_STATE_CONNECTING,
+        GVC_STATE_FAILED
+} GvcMixerControlState;
+
 #define GVC_TYPE_MIXER_CONTROL         (gvc_mixer_control_get_type ())
 #define GVC_MIXER_CONTROL(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControl))
 #define GVC_MIXER_CONTROL_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_CONTROL, GvcMixerControlClass))
@@ -46,8 +54,8 @@ typedef struct
 {
         GObjectClass            parent_class;
 
-        void (*connecting)             (GvcMixerControl *control);
-        void (*ready)                  (GvcMixerControl *control);
+        void (*state_changed)          (GvcMixerControl      *control,
+                                        GvcMixerControlState  new_state);
         void (*stream_added)           (GvcMixerControl *control,
                                         guint            id);
         void (*stream_removed)         (GvcMixerControl *control,
@@ -68,7 +76,6 @@ GvcMixerControl *   gvc_mixer_control_new                 (const char *name);
 
 gboolean            gvc_mixer_control_open                (GvcMixerControl *control);
 gboolean            gvc_mixer_control_close               (GvcMixerControl *control);
-gboolean            gvc_mixer_control_is_ready            (GvcMixerControl *control);
 
 GSList *            gvc_mixer_control_get_cards           (GvcMixerControl *control);
 GSList *            gvc_mixer_control_get_streams         (GvcMixerControl *control);
@@ -94,6 +101,8 @@ gboolean            gvc_mixer_control_set_default_source   (GvcMixerControl *con
 gdouble             gvc_mixer_control_get_vol_max_norm      (GvcMixerControl *control);
 gdouble             gvc_mixer_control_get_vol_max_amplified (GvcMixerControl *control);
 
+GvcMixerControlState gvc_mixer_control_get_state            (GvcMixerControl *control);
+
 G_END_DECLS
 
 #endif /* __GVC_MIXER_CONTROL_H */
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c b/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c
index a6f1493..78c3c68 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c
@@ -111,7 +111,6 @@ static gboolean
 gvc_mixer_sink_change_port (GvcMixerStream *stream,
                             const char     *port)
 {
-#if PA_MICRO > 15
         pa_operation *o;
         guint         index;
         pa_context   *context;
@@ -133,9 +132,6 @@ gvc_mixer_sink_change_port (GvcMixerStream *stream,
         pa_operation_unref(o);
 
         return TRUE;
-#else
-        return FALSE;
-#endif /* PA_MICRO > 15 */
 }
 
 static void
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-source.c b/plugins/media-keys/cut-n-paste/gvc-mixer-source.c
index ebb05a6..dd2d0b4 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-source.c
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-source.c
@@ -111,7 +111,6 @@ static gboolean
 gvc_mixer_source_change_port (GvcMixerStream *stream,
                               const char     *port)
 {
-#if PA_MICRO > 15
         pa_operation *o;
         guint         index;
         pa_context   *context;
@@ -133,9 +132,6 @@ gvc_mixer_source_change_port (GvcMixerStream *stream,
         pa_operation_unref(o);
 
         return TRUE;
-#else
-        return FALSE;
-#endif /* PA_MICRO > 15 */
 }
 
 static void
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 78de6b3..0a5663e 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c
@@ -48,6 +48,7 @@ struct GvcMixerStreamPrivate
         char          *description;
         char          *application_id;
         char          *icon_name;
+        char          *sysfs_path;
         gboolean       is_muted;
         gboolean       can_decibel;
         gboolean       is_event_stream;
@@ -70,6 +71,7 @@ enum
         PROP_DESCRIPTION,
         PROP_APPLICATION_ID,
         PROP_ICON_NAME,
+        PROP_SYSFS_PATH,
         PROP_VOLUME,
         PROP_DECIBEL,
         PROP_IS_MUTED,
@@ -390,6 +392,13 @@ gvc_mixer_stream_get_icon_name (GvcMixerStream *stream)
         return stream->priv->icon_name;
 }
 
+const char *
+gvc_mixer_stream_get_sysfs_path (GvcMixerStream *stream)
+{
+        g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
+        return stream->priv->sysfs_path;
+}
+
 /**
  * gvc_mixer_stream_get_gicon:
  * @stream: a #GvcMixerStream
@@ -418,6 +427,19 @@ gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
         return TRUE;
 }
 
+gboolean
+gvc_mixer_stream_set_sysfs_path (GvcMixerStream *stream,
+                                 const char     *sysfs_path)
+{
+        g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+        g_free (stream->priv->sysfs_path);
+        stream->priv->sysfs_path = g_strdup (sysfs_path);
+        g_object_notify (G_OBJECT (stream), "sysfs-path");
+
+        return TRUE;
+}
+
 /**
  * gvc_mixer_stream_get_base_volume:
  *
@@ -508,6 +530,11 @@ gvc_mixer_stream_change_port (GvcMixerStream *stream,
         return GVC_MIXER_STREAM_GET_CLASS (stream)->change_port (stream, port);
 }
 
+/**
+ * gvc_mixer_stream_get_ports:
+ *
+ * Return value: (transfer none) (element-type GvcMixerStreamPort):
+ */
 const GList *
 gvc_mixer_stream_get_ports (GvcMixerStream *stream)
 {
@@ -526,6 +553,10 @@ sort_ports (GvcMixerStreamPort *a,
         return -1;
 }
 
+/**
+ * gvc_mixer_stream_set_ports:
+ * @ports: (transfer full) (element-type GvcMixerStreamPort):
+ */
 gboolean
 gvc_mixer_stream_set_ports (GvcMixerStream *stream,
                             GList          *ports)
@@ -590,6 +621,9 @@ gvc_mixer_stream_set_property (GObject       *object,
         case PROP_ICON_NAME:
                 gvc_mixer_stream_set_icon_name (self, g_value_get_string (value));
                 break;
+	case PROP_SYSFS_PATH:
+		gvc_mixer_stream_set_sysfs_path (self, g_value_get_string (value));
+		break;
         case PROP_VOLUME:
                 gvc_mixer_stream_set_volume (self, g_value_get_ulong (value));
                 break;
@@ -653,6 +687,9 @@ gvc_mixer_stream_get_property (GObject     *object,
         case PROP_ICON_NAME:
                 g_value_set_string (value, self->priv->icon_name);
                 break;
+	case PROP_SYSFS_PATH:
+		g_value_set_string (value, self->priv->sysfs_path);
+		break;
         case PROP_VOLUME:
                 g_value_set_ulong (value,
                                    pa_cvolume_max(gvc_channel_map_get_cvolume(self->priv->channel_map)));
@@ -855,6 +892,13 @@ gvc_mixer_stream_class_init (GvcMixerStreamClass *klass)
                                                               NULL,
                                                               G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
         g_object_class_install_property (gobject_class,
+                                         PROP_SYSFS_PATH,
+                                         g_param_spec_string ("sysfs-path",
+                                                              "Sysfs path",
+                                                              "Sysfs path for the device associated with this stream",
+                                                              NULL,
+                                                              G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+        g_object_class_install_property (gobject_class,
                                          PROP_IS_MUTED,
                                          g_param_spec_boolean ("is-muted",
                                                                "is muted",
@@ -940,6 +984,9 @@ gvc_mixer_stream_finalize (GObject *object)
         g_free (mixer_stream->priv->icon_name);
         mixer_stream->priv->icon_name = NULL;
 
+        g_free (mixer_stream->priv->sysfs_path);
+        mixer_stream->priv->sysfs_path = NULL;
+
         g_free (mixer_stream->priv->port);
         mixer_stream->priv->port = NULL;
 
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h
index 1c38e6b..ad79024 100644
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h
+++ b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h
@@ -85,6 +85,7 @@ gboolean            gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
 gboolean            gvc_mixer_stream_is_running      (GvcMixerStream *stream);
 const char *        gvc_mixer_stream_get_name        (GvcMixerStream *stream);
 const char *        gvc_mixer_stream_get_icon_name   (GvcMixerStream *stream);
+const char *        gvc_mixer_stream_get_sysfs_path  (GvcMixerStream *stream);
 GIcon *             gvc_mixer_stream_get_gicon       (GvcMixerStream *stream);
 const char *        gvc_mixer_stream_get_description (GvcMixerStream *stream);
 const char *        gvc_mixer_stream_get_application_id (GvcMixerStream *stream);
@@ -107,6 +108,8 @@ gboolean            gvc_mixer_stream_set_description (GvcMixerStream *stream,
                                                       const char     *description);
 gboolean            gvc_mixer_stream_set_icon_name   (GvcMixerStream *stream,
                                                       const char     *name);
+gboolean            gvc_mixer_stream_set_sysfs_path  (GvcMixerStream *stream,
+                                                      const char     *sysfs_path);
 gboolean            gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
                                                           gboolean is_event_stream);
 gboolean            gvc_mixer_stream_set_is_virtual  (GvcMixerStream *stream,



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