[Xfce4-commits] <xfce4-mixer:master> Handle identically named tracks by making use of the track index property

Guido Berhoerster noreply at xfce.org
Thu Sep 27 16:46:28 CEST 2012


Updating branch refs/heads/master
         to 444b8b826fd6b2c3d27f5d57309c7e5d40e08ed2 (commit)
       from f270a407b2400ae7bc0ea0ca463af18e8273d6b7 (commit)

commit 444b8b826fd6b2c3d27f5d57309c7e5d40e08ed2
Author: Guido Berhoerster <guido+xfce at berhoerster.name>
Date:   Thu Sep 27 16:31:09 2012 +0200

    Handle identically named tracks by making use of the track index property
    
    Handle identically named tracks by using an custom track label which sonsists
    of the GstMixerTrack label property and the index value if it is greater than
    0.

 NEWS                                     |    1 +
 libxfce4mixer/libxfce4mixer.c            |   62 ++++++++++++++++++++++++++----
 libxfce4mixer/libxfce4mixer.h            |    1 +
 libxfce4mixer/xfce-mixer-preferences.c   |   16 ++++----
 libxfce4mixer/xfce-mixer-track-combo.c   |    7 +---
 panel-plugin/xfce-mixer-plugin.c         |   15 +++----
 panel-plugin/xfce-plugin-dialog.c        |   13 ++----
 xfce4-mixer/xfce-mixer-controls-dialog.c |   17 +++-----
 xfce4-mixer/xfce-mixer-option.c          |    5 +-
 xfce4-mixer/xfce-mixer-switch.c          |    5 +-
 xfce4-mixer/xfce-mixer-track.c           |    6 +--
 xfce4-mixer/xfce-mixer.c                 |   27 ++++---------
 12 files changed, 97 insertions(+), 78 deletions(-)

diff --git a/NEWS b/NEWS
index 72651a7..10f1d89 100644
--- a/NEWS
+++ b/NEWS
@@ -40,6 +40,7 @@
 - Add tooltips to scale widgets in the mixer.
 - Add runtime debugging mode to both the mixer and the panel plugin.
 - Add man page for xfce4-mixer.
+- Handle identically named tracks by making use of the track index property.
 
 
 4.8.0
diff --git a/libxfce4mixer/libxfce4mixer.c b/libxfce4mixer/libxfce4mixer.c
index da0bfe4..c14ee27 100644
--- a/libxfce4mixer/libxfce4mixer.c
+++ b/libxfce4mixer/libxfce4mixer.c
@@ -40,9 +40,11 @@
 
 
 
-static gboolean _xfce_mixer_filter_mixer  (GstMixer *mixer,
-                                           gpointer  user_data);
-static void     _xfce_mixer_destroy_mixer (GstMixer *mixer);
+static gboolean _xfce_mixer_filter_mixer     (GstMixer *mixer,
+                                              gpointer  user_data);
+static void     _xfce_mixer_add_track_labels (gpointer  data,
+                                              gpointer  user_data);
+static void     _xfce_mixer_destroy_mixer    (GstMixer *mixer);
 
 
 
@@ -83,6 +85,9 @@ xfce_mixer_init (void)
       /* Get list of all available mixer devices */
       mixers = gst_audio_default_registry_mixer_filter (_xfce_mixer_filter_mixer, FALSE, &counter);
 
+      /* Add custom labels to all tracks of all mixers */
+      g_list_foreach (mixers, (GFunc) _xfce_mixer_add_track_labels, NULL);
+
       /* Create a GstBus for notifications */
       bus = gst_bus_new ();
       gst_bus_add_signal_watch (bus);
@@ -195,23 +200,20 @@ xfce_mixer_get_track (GstElement  *card,
 {
   GstMixerTrack *track = NULL;
   const GList   *iter;
-  gchar         *label;
+  const gchar   *label;
 
   g_return_val_if_fail (GST_IS_MIXER (card), NULL);
   g_return_val_if_fail (track_name != NULL, NULL);
 
   for (iter = gst_mixer_list_tracks (GST_MIXER (card)); iter != NULL; iter = g_list_next (iter))
     {
-      g_object_get (GST_MIXER_TRACK (iter->data), "label", &label, NULL);
+      label = xfce_mixer_get_track_label (GST_MIXER_TRACK (iter->data));
 
       if (g_utf8_collate (label, track_name) == 0)
         {
           track = iter->data;
-          g_free (label);
           break;
         }
-      
-      g_free (label);
     }
 
   return track;
@@ -311,6 +313,15 @@ xfce_mixer_get_default_track_list (GstElement *card)
 
 
 
+const gchar *
+xfce_mixer_get_track_label (GstMixerTrack *track)
+{
+  g_return_val_if_fail (GST_IS_MIXER_TRACK (track), NULL);
+  return g_object_get_data (G_OBJECT (track), "xfce-mixer-track-label");
+}
+
+
+
 guint
 xfce_mixer_bus_connect (GCallback callback,
                         gpointer  user_data)
@@ -407,6 +418,41 @@ _xfce_mixer_filter_mixer (GstMixer *mixer,
 
 
 static void
+_xfce_mixer_add_track_labels (gpointer data,
+                              gpointer user_data)
+{
+  GstMixer      *mixer = GST_MIXER (data);
+  const GList   *iter;
+  GstMixerTrack *track;
+  gchar         *label;
+  gchar         *xfce_mixer_label;
+  guint          index;
+
+  for (iter = gst_mixer_list_tracks (mixer); iter != NULL; iter = g_list_next (iter))
+    {
+      track = GST_MIXER_TRACK (iter->data);
+
+      g_object_get (track, "label", &label, "index", &index, NULL);
+
+      /*
+       * Build display label including the index if there are mutiple tracks of
+       * the same name
+       */
+      if (index > 0)
+        xfce_mixer_label = g_strdup_printf ("%s (%d)", label, index);
+      else
+        xfce_mixer_label = g_strdup (label);
+
+      /* Set label to be used by xfce4-mixer */
+      g_object_set_data_full (G_OBJECT (track), "xfce-mixer-track-label", xfce_mixer_label, (GDestroyNotify) g_free);
+
+      g_free (label);
+    }
+}
+
+
+
+static void
 _xfce_mixer_destroy_mixer (GstMixer *mixer)
 {
   gst_element_set_state (GST_ELEMENT (mixer), GST_STATE_NULL);
diff --git a/libxfce4mixer/libxfce4mixer.h b/libxfce4mixer/libxfce4mixer.h
index 8628df9..59b7a1e 100644
--- a/libxfce4mixer/libxfce4mixer.h
+++ b/libxfce4mixer/libxfce4mixer.h
@@ -51,6 +51,7 @@ GstMixerTrack *xfce_mixer_get_track              (GstElement    *card,
                                                   const gchar   *track_name);
 GstMixerTrack *xfce_mixer_get_default_track      (GstElement    *card);
 GList         *xfce_mixer_get_default_track_list (GstElement    *card);
+const gchar   *xfce_mixer_get_track_label        (GstMixerTrack *track);
 guint          xfce_mixer_bus_connect            (GCallback      callback,
                                                   gpointer       user_data);
 void           xfce_mixer_bus_disconnect         (guint          signal_handler_id);
diff --git a/libxfce4mixer/xfce-mixer-preferences.c b/libxfce4mixer/xfce-mixer-preferences.c
index 21faefc..7f939b2 100644
--- a/libxfce4mixer/xfce-mixer-preferences.c
+++ b/libxfce4mixer/xfce-mixer-preferences.c
@@ -387,12 +387,12 @@ xfce_mixer_preferences_get_control_visible (XfceMixerPreferences *preferences,
 static GPtrArray *
 xfce_mixer_preferences_get_default_tracks (XfceMixerPreferences *preferences)
 {
-  GList      *track_list;
-  GList      *iter;
-  GPtrArray  *tracks;
-  GstElement *card;
-  gchar      *track_label;
-  GValue     *value;
+  GList       *track_list;
+  GList       *iter;
+  GPtrArray   *tracks;
+  GstElement  *card;
+  const gchar *track_label;
+  GValue      *value;
 
   tracks = g_ptr_array_new ();
 
@@ -406,8 +406,8 @@ xfce_mixer_preferences_get_default_tracks (XfceMixerPreferences *preferences)
           for (iter = track_list; iter != NULL; iter = g_list_next (iter))
             {
               value = g_value_init (g_new0 (GValue, 1), G_TYPE_STRING);
-              g_object_get (G_OBJECT (iter->data), "label", &track_label, NULL);
-              g_value_take_string (value, track_label);
+              track_label = xfce_mixer_get_track_label (GST_MIXER_TRACK (iter->data));
+              g_value_set_string (value, track_label);
               g_ptr_array_add (tracks, value);
             }
         }
diff --git a/libxfce4mixer/xfce-mixer-track-combo.c b/libxfce4mixer/xfce-mixer-track-combo.c
index 4c19acf..a5e40f9 100644
--- a/libxfce4mixer/xfce-mixer-track-combo.c
+++ b/libxfce4mixer/xfce-mixer-track-combo.c
@@ -192,7 +192,6 @@ xfce_mixer_track_combo_set_soundcard (XfceMixerTrackCombo *combo,
   XfceMixerTrackType type;
   GtkTreeIter        tree_iter;
   const GList       *iter;
-  gchar             *label;
   gint               counter;
   gint               active_index = 0;
   GstMixerTrack     *track;
@@ -222,15 +221,11 @@ xfce_mixer_track_combo_set_soundcard (XfceMixerTrackCombo *combo,
 
       if (type == XFCE_MIXER_TRACK_TYPE_PLAYBACK || type == XFCE_MIXER_TRACK_TYPE_CAPTURE)
         {
-          g_object_get (GST_MIXER_TRACK (iter->data), "label", &label, NULL);
-
           gtk_list_store_append (combo->list_store, &tree_iter);
           gtk_list_store_set (combo->list_store, &tree_iter, 
-                              NAME_COLUMN, label, 
+                              NAME_COLUMN, xfce_mixer_get_track_label (GST_MIXER_TRACK (iter->data)), 
                               TRACK_COLUMN, GST_MIXER_TRACK (iter->data), -1);
 
-          g_free (label);
-
           if (G_UNLIKELY (track != NULL && track == GST_MIXER_TRACK (iter->data)))
             active_index = counter;
 
diff --git a/panel-plugin/xfce-mixer-plugin.c b/panel-plugin/xfce-mixer-plugin.c
index 921f40e..9029c29 100644
--- a/panel-plugin/xfce-mixer-plugin.c
+++ b/panel-plugin/xfce-mixer-plugin.c
@@ -414,7 +414,7 @@ xfce_mixer_plugin_set_property (GObject      *object,
                 g_free (track_label);
                 track = xfce_mixer_get_default_track (mixer_plugin->card);
                 if (GST_IS_MIXER_TRACK (track))
-                  g_object_get (track, "label", &track_label, NULL);
+                  track_label = g_strdup (xfce_mixer_get_track_label (track));
                 else
                   track_label = NULL;
               }
@@ -799,7 +799,7 @@ xfce_mixer_plugin_update_track (XfceMixerPlugin *mixer_plugin)
   xfce_volume_button_set_is_configured (XFCE_VOLUME_BUTTON (mixer_plugin->button), TRUE);
   xfce_volume_button_set_volume (XFCE_VOLUME_BUTTON (mixer_plugin->button), volume);
   xfce_volume_button_set_muted (XFCE_VOLUME_BUTTON (mixer_plugin->button), muted);
-  xfce_volume_button_set_track_label (XFCE_VOLUME_BUTTON (mixer_plugin->button), mixer_plugin->track_label);
+  xfce_volume_button_set_track_label (XFCE_VOLUME_BUTTON (mixer_plugin->button), xfce_mixer_get_track_label (mixer_plugin->track));
 
   /* Update mute menu item */
   gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mixer_plugin->mute_menu_item), muted);
@@ -818,7 +818,7 @@ xfce_mixer_plugin_bus_message (GstBus          *bus,
   GstMixerTrack      *track = NULL;
   gboolean            mute;
   gboolean            record;
-  gchar              *label;
+  const gchar        *label;
 
   /* Don't do anything if GstBus messages are to be ignored */
   if (G_UNLIKELY (mixer_plugin->ignore_bus_messages))
@@ -835,18 +835,17 @@ xfce_mixer_plugin_bus_message (GstBus          *bus,
       case GST_MIXER_MESSAGE_VOLUME_CHANGED:
         /* Get the track of the volume changed message */
         gst_mixer_message_parse_volume_changed (message, &track, NULL, NULL);
-        g_object_get (track, "label", &label, NULL);
+        label = xfce_mixer_get_track_label (track);
 
         /* Update the volume button if the message belongs to the current mixer track */
         if (G_UNLIKELY (g_utf8_collate (label, mixer_plugin->track_label) == 0))
           xfce_mixer_plugin_update_track (mixer_plugin);
 
-        g_free (label);
         break;
       case GST_MIXER_MESSAGE_MUTE_TOGGLED:
         /* Parse the mute message */
         gst_mixer_message_parse_mute_toggled (message, &track, &mute);
-        g_object_get (track, "label", &label, NULL);
+        label = xfce_mixer_get_track_label (track);
 
         /* Update the volume button and mute menu item if the message belongs to the current mixer track */
         if (G_UNLIKELY (g_utf8_collate (label, mixer_plugin->track_label) == 0))
@@ -855,12 +854,11 @@ xfce_mixer_plugin_bus_message (GstBus          *bus,
             gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mixer_plugin->mute_menu_item), mute);
           }
 
-        g_free (label);
         break;
       case GST_MIXER_MESSAGE_RECORD_TOGGLED:
         /* Parse the record message */
         gst_mixer_message_parse_record_toggled (message, &track, &record);
-        g_object_get (track, "label", &label, NULL);
+        label = xfce_mixer_get_track_label (track);
 
         /* Update the volume button and mute menu item if the message belongs to the current mixer track */
         if (G_UNLIKELY (g_utf8_collate (label, mixer_plugin->track_label) == 0))
@@ -869,7 +867,6 @@ xfce_mixer_plugin_bus_message (GstBus          *bus,
             gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mixer_plugin->mute_menu_item), !record);
           }
 
-        g_free (label);
         break;
       default:
         break;
diff --git a/panel-plugin/xfce-plugin-dialog.c b/panel-plugin/xfce-plugin-dialog.c
index 86f584e..a8845f0 100644
--- a/panel-plugin/xfce-plugin-dialog.c
+++ b/panel-plugin/xfce-plugin-dialog.c
@@ -268,15 +268,13 @@ xfce_plugin_dialog_track_changed (XfcePluginDialog    *dialog,
                                   GstMixerTrack       *track,
                                   XfceMixerTrackCombo *combo)
 {
-  gchar *track_label;
+  const gchar *track_label;
 
-  g_object_get (G_OBJECT (track), "label", &track_label, NULL);
+  track_label = xfce_mixer_get_track_label (track);
 
   g_signal_handlers_block_by_func (G_OBJECT (dialog->plugin), xfce_plugin_dialog_track_property_changed, dialog);
   g_object_set (G_OBJECT (dialog->plugin), "track", track_label, NULL);
   g_signal_handlers_unblock_by_func (G_OBJECT (dialog->plugin), xfce_plugin_dialog_track_property_changed, dialog);
-
-  g_free (track_label);
 }
 
 
@@ -328,8 +326,8 @@ xfce_plugin_dialog_track_property_changed (XfcePluginDialog *dialog,
   GstElement    *card;
   GstMixerTrack *old_track;
   GstMixerTrack *new_track = NULL;
-  gchar         *old_track_label = NULL;
-  gchar         *new_track_label = NULL;
+  const gchar   *old_track_label = NULL;
+  gchar         *new_track_label;
 
   g_return_if_fail (IS_XFCE_PLUGIN_DIALOG (dialog));
   g_return_if_fail (G_IS_OBJECT (object));
@@ -344,7 +342,7 @@ xfce_plugin_dialog_track_property_changed (XfcePluginDialog *dialog,
 
   old_track = xfce_mixer_track_combo_get_active_track (XFCE_MIXER_TRACK_COMBO (dialog->track_combo));
   if (GST_IS_MIXER_TRACK (old_track))
-    g_object_get (G_OBJECT (old_track), "label", &old_track_label, NULL);
+    old_track_label = xfce_mixer_get_track_label (old_track);
 
   if (xfce_mixer_utf8_cmp (old_track_label, new_track_label) != 0)
     {
@@ -355,6 +353,5 @@ xfce_plugin_dialog_track_property_changed (XfcePluginDialog *dialog,
     }
 
   g_free (new_track_label);
-  g_free (old_track_label);
 }
 
diff --git a/xfce4-mixer/xfce-mixer-controls-dialog.c b/xfce4-mixer/xfce-mixer-controls-dialog.c
index baa5c38..9b2fbff 100644
--- a/xfce4-mixer/xfce-mixer-controls-dialog.c
+++ b/xfce4-mixer/xfce-mixer-controls-dialog.c
@@ -37,8 +37,8 @@
 
 
 
-#define VISIBLE_COLUMN 0
-#define NAME_COLUMN    1
+#define VISIBLE_COLUMN       0
+#define NAME_COLUMN          1
 
 
 
@@ -246,7 +246,8 @@ xfce_mixer_controls_dialog_update_dialog (XfceMixerControlsDialog *dialog)
 {
   XfceMixerPreferences *preferences;
   const GList          *iter;
-  gchar                *track_label;
+  GstMixerTrack        *track;
+  const gchar          *track_label;
   gboolean              visible;
   GtkTreeIter           tree_iter;
 
@@ -262,7 +263,8 @@ xfce_mixer_controls_dialog_update_dialog (XfceMixerControlsDialog *dialog)
        iter != NULL;
        iter = g_list_next (iter))
     {
-      g_object_get (GST_MIXER_TRACK (iter->data), "label", &track_label, NULL);
+      track = GST_MIXER_TRACK (iter->data);
+      track_label = xfce_mixer_get_track_label (track);
 
       visible = xfce_mixer_preferences_get_control_visible (preferences, track_label);
 
@@ -271,8 +273,6 @@ xfce_mixer_controls_dialog_update_dialog (XfceMixerControlsDialog *dialog)
                         VISIBLE_COLUMN, visible,
                         NAME_COLUMN, track_label,
                         -1);
-
-      g_free (track_label);
     }
 
   g_object_unref (preferences);
@@ -326,21 +326,16 @@ xfce_mixer_controls_dialog_control_toggled (GtkCellRendererToggle   *renderer,
                                             XfceMixerControlsDialog *dialog)
 {
   GtkTreeIter  iter;
-  gchar       *name;
 
   if (G_UNLIKELY (!gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (dialog->store), &iter, path)))
     return;
 
-  gtk_tree_model_get (GTK_TREE_MODEL (dialog->store), &iter, NAME_COLUMN, &name, -1);
-
   if (!gtk_cell_renderer_toggle_get_active (renderer))
     gtk_list_store_set (dialog->store, &iter, VISIBLE_COLUMN, TRUE, -1);
   else
     gtk_list_store_set (dialog->store, &iter, VISIBLE_COLUMN, FALSE, -1);
 
   xfce_mixer_controls_dialog_update_preferences (dialog);
-
-  g_free (name);
 }
 
 
diff --git a/xfce4-mixer/xfce-mixer-option.c b/xfce4-mixer/xfce-mixer-option.c
index aba21dd..5f1c946 100644
--- a/xfce4-mixer/xfce-mixer-option.c
+++ b/xfce4-mixer/xfce-mixer-option.c
@@ -161,16 +161,15 @@ xfce_mixer_option_create_contents (XfceMixerOption *option)
   GtkWidget       *label;
   const GList     *iter;
   const gchar     *active_option;
-  gchar           *track_label;
+  const gchar     *track_label;
   gchar           *title;
   gint             i;
 
   gtk_box_set_homogeneous (GTK_BOX (option), FALSE);
   gtk_box_set_spacing (GTK_BOX (option), 12);
 
-  g_object_get (option->track, "label", &track_label, NULL);
+  track_label = xfce_mixer_get_track_label (option->track);
   title = g_strdup_printf ("%s:", track_label);
-  g_free (track_label);
 
   label = gtk_label_new (title);
   gtk_box_pack_start (GTK_BOX (option), label, FALSE, FALSE, 0);
diff --git a/xfce4-mixer/xfce-mixer-switch.c b/xfce4-mixer/xfce-mixer-switch.c
index 38e576f..8e4bd79 100644
--- a/xfce4-mixer/xfce-mixer-switch.c
+++ b/xfce4-mixer/xfce-mixer-switch.c
@@ -158,14 +158,13 @@ xfce_mixer_switch_new (GstElement    *card,
 static void
 xfce_mixer_switch_create_contents (XfceMixerSwitch *mixer_switch)
 {
-  gchar *label;
+  const gchar *label;
 
   gtk_box_set_homogeneous (GTK_BOX (mixer_switch), FALSE);
   gtk_box_set_spacing (GTK_BOX (mixer_switch), 12);
 
-  g_object_get (mixer_switch->track, "label", &label, NULL);
+  label = xfce_mixer_get_track_label (mixer_switch->track);
   mixer_switch->check_button = gtk_check_button_new_with_mnemonic (label);
-  g_free (label);
   gtk_box_pack_start (GTK_BOX (mixer_switch), mixer_switch->check_button, FALSE, FALSE, 0);
   gtk_widget_show (mixer_switch->check_button);
 
diff --git a/xfce4-mixer/xfce-mixer-track.c b/xfce4-mixer/xfce-mixer-track.c
index 366a557..7143a4a 100644
--- a/xfce4-mixer/xfce-mixer-track.c
+++ b/xfce4-mixer/xfce-mixer-track.c
@@ -184,7 +184,7 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track)
   GtkWidget   *button_box;
   GtkWidget   *fader;
   gdouble      step;
-  gchar       *track_label;
+  const gchar *track_label;
   gchar       *tooltip_text;
   gint         channel;
   gint         columns;
@@ -202,7 +202,7 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track)
   gtk_table_set_row_spacings (GTK_TABLE (track), 6);
 
   /* Put the name of the track on top of the other elements */
-  g_object_get (track->gst_track, "label", &track_label, NULL);
+  track_label = xfce_mixer_get_track_label (track->gst_track);
   label = gtk_label_new (track_label);
   gtk_misc_set_alignment (GTK_MISC (label), 0.5f, 0.5f);
   gtk_table_attach (GTK_TABLE (track), label, 0, columns, 0, 1, GTK_FILL, GTK_SHRINK, 0, 0);
@@ -288,8 +288,6 @@ xfce_mixer_track_create_contents (XfceMixerTrack *track)
 
   /* Free volume array */
   g_free (volumes);
-
-  g_free (track_label);
 }
 
 
diff --git a/xfce4-mixer/xfce-mixer.c b/xfce4-mixer/xfce-mixer.c
index 159a610..773f27b 100644
--- a/xfce4-mixer/xfce-mixer.c
+++ b/xfce4-mixer/xfce-mixer.c
@@ -166,7 +166,7 @@ xfce_mixer_constructed (GObject *object)
   GtkWidget            *last_separator[4] = { NULL, NULL, NULL, NULL };
   GtkWidget            *label1;
   GtkWidget            *label2;
-  gchar                *track_label;
+  const gchar          *track_label;
   guint                 num_children[4] = { 0, 0, 0, 0 };
   gint                  i;
 
@@ -202,15 +202,12 @@ xfce_mixer_constructed (GObject *object)
   /* Create controls for all mixer tracks */
   for (iter = gst_mixer_list_tracks (GST_MIXER (mixer->card)); iter != NULL; iter = g_list_next (iter))
     {
-      track = iter->data;
+      track = GST_MIXER_TRACK (iter->data);
 
-      g_object_get (GST_MIXER_TRACK (track), "label", &track_label, NULL);
+      track_label = xfce_mixer_get_track_label (track);
 
       if (!xfce_mixer_preferences_get_control_visible (preferences, track_label))
-        {
-          g_free (track_label);
-          continue;
-        }
+        continue;
 
       /* Determine the type of the mixer track */
       type = xfce_mixer_track_type_new (track);
@@ -275,8 +272,6 @@ xfce_mixer_constructed (GObject *object)
           g_hash_table_insert (mixer->widgets, g_strdup (track_label), track_widget);
           break;
         }
-
-      g_free (track_label);
     }
 
   /* Append tab or destroy all its widgets - depending on the contents of each tab */
@@ -403,7 +398,7 @@ xfce_mixer_bus_message (GstBus     *bus,
   gboolean            muted;
   gboolean            record;
   const gchar        *option;
-  gchar              *label;
+  const gchar        *label;
   gint               *volumes;
   gint                num_channels;
 
@@ -417,10 +412,9 @@ xfce_mixer_bus_message (GstBus     *bus,
   if (type == GST_MIXER_MESSAGE_MUTE_TOGGLED)
     {
       gst_mixer_message_parse_mute_toggled (message, &track, &muted);
-      g_object_get (track, "label", &label, NULL);
+      label = xfce_mixer_get_track_label (track);
       xfce_mixer_debug ("Track '%s' was %s", label, muted ? "muted" : "unmuted");
       widget = g_hash_table_lookup (mixer->widgets, label);
-      g_free (label);
 
       if (IS_XFCE_MIXER_TRACK (widget))
         xfce_mixer_track_update_mute (XFCE_MIXER_TRACK (widget));
@@ -430,10 +424,9 @@ xfce_mixer_bus_message (GstBus     *bus,
   else if (type == GST_MIXER_MESSAGE_RECORD_TOGGLED)
     {
       gst_mixer_message_parse_record_toggled (message, &track, &record);
-      g_object_get (track, "label", &label, NULL);
+      label = xfce_mixer_get_track_label (track);
       xfce_mixer_debug ("Recording on track '%s' was %s", label, record ? "turned on" : "turned off");
       widget = g_hash_table_lookup (mixer->widgets, label);
-      g_free (label);
 
       if (IS_XFCE_MIXER_TRACK (widget))
         xfce_mixer_track_update_record (XFCE_MIXER_TRACK (widget));
@@ -443,10 +436,9 @@ xfce_mixer_bus_message (GstBus     *bus,
   else if (type == GST_MIXER_MESSAGE_VOLUME_CHANGED)
     {
       gst_mixer_message_parse_volume_changed (message, &track, &volumes, &num_channels);
-      g_object_get (track, "label", &label, NULL);
+      label = xfce_mixer_get_track_label (track);
       xfce_mixer_debug ("Volume on track '%s' changed to %i", label, volumes[0]);
       widget = g_hash_table_lookup (mixer->widgets, label);
-      g_free (label);
 
       if (IS_XFCE_MIXER_TRACK (widget))
         xfce_mixer_track_update_volume (XFCE_MIXER_TRACK (widget));
@@ -454,10 +446,9 @@ xfce_mixer_bus_message (GstBus     *bus,
   else if (type == GST_MIXER_MESSAGE_OPTION_CHANGED)
     {
       gst_mixer_message_parse_option_changed (message, &options, &option);
-      g_object_get (GST_MIXER_TRACK (options), "label", &label, NULL);
+      label = xfce_mixer_get_track_label (GST_MIXER_TRACK (options));
       xfce_mixer_debug ("Option '%s' was set to '%s'", label, option);
       widget = g_hash_table_lookup (mixer->widgets, label);
-      g_free (label);
 
       if (IS_XFCE_MIXER_OPTION (widget))
         xfce_mixer_option_update (XFCE_MIXER_OPTION (widget));


More information about the Xfce4-commits mailing list