Index: mixertrack.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/interfaces/mixertrack.c,v
retrieving revision 1.8
diff -u -p -r1.8 mixertrack.c
--- mixertrack.c	8 Apr 2006 21:02:50 -0000	1.8
+++ mixertrack.c	4 Mar 2007 18:03:23 -0000
@@ -38,6 +38,7 @@ enum
 {
   ARG_0,
   ARG_LABEL,
+  ARG_UNTRANSLATED_LABEL,
   ARG_MIN_VOLUME,
   ARG_MAX_VOLUME,
   ARG_FLAGS,
@@ -50,6 +51,8 @@ static void gst_mixer_track_dispose (GOb
 
 static void gst_mixer_track_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
+static void gst_mixer_track_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
 
 static GObjectClass *parent_class = NULL;
 static guint signals[LAST_SIGNAL] = { 0 };
@@ -89,10 +92,28 @@ gst_mixer_track_class_init (GstMixerTrac
   parent_class = g_type_class_peek_parent (klass);
 
   object_klass->get_property = gst_mixer_track_get_property;
+  object_klass->set_property = gst_mixer_track_set_property;
 
   g_object_class_install_property (object_klass, ARG_LABEL,
       g_param_spec_string ("label", "Track label",
-          "The label assigned to the track", NULL, G_PARAM_READABLE));
+          "The label assigned to the track (may be translated)", NULL,
+          G_PARAM_READABLE));
+
+  /**
+   * GstMixerTrack:untranslated-label
+   *
+   * The untranslated label of the mixer track, if available. Mixer track
+   * implementations must set this at construct time. Applications may find
+   * this useful to determine icons for various kind of tracks. However,
+   * applications mustn't make any assumptions about the naming of tracks,
+   * the untranslated labels are purely informational and may change.
+   *
+   * Since: 0.10.12
+   **/
+  g_object_class_install_property (object_klass, ARG_UNTRANSLATED_LABEL,
+      g_param_spec_string ("untranslated-label", "Untranslated track label",
+          "The untranslated label assigned to the track (since 0.10.12)",
+          NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
   g_object_class_install_property (object_klass, ARG_MIN_VOLUME,
       g_param_spec_int ("min_volume", "Minimum volume level",
@@ -148,6 +169,9 @@ gst_mixer_track_init (GstMixerTrack * mi
   mixer_track->num_channels = 0;
 }
 
+/* FIXME 0.11: move this as a member into the mixer track structure */
+#define MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL "gst-mixer-track-ulabel"
+
 static void
 gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value,
     GParamSpec * pspec)
@@ -160,6 +184,11 @@ gst_mixer_track_get_property (GObject * 
     case ARG_LABEL:
       g_value_set_string (value, mixer_track->label);
       break;
+    case ARG_UNTRANSLATED_LABEL:
+      g_value_set_string (value,
+          (const gchar * ) g_object_get_data (G_OBJECT (mixer_track),
+          MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL));
+      break;
     case ARG_MIN_VOLUME:
       g_value_set_int (value, mixer_track->min_volume);
       break;
@@ -179,6 +208,26 @@ gst_mixer_track_get_property (GObject * 
 }
 
 static void
+gst_mixer_track_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstMixerTrack *mixer_track;
+
+  mixer_track = GST_MIXER_TRACK (object);
+
+  switch (prop_id) {
+    case ARG_UNTRANSLATED_LABEL:
+      g_object_set_data_full (G_OBJECT (mixer_track),
+          MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL,
+          g_value_dup_string (value), (GDestroyNotify) g_free);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
 gst_mixer_track_dispose (GObject * object)
 {
   GstMixerTrack *channel = GST_MIXER_TRACK (object);
