示例#1
0
static void
gst_alsa_mixer_update_option (GstAlsaMixer * mixer,
    GstAlsaMixerOptions * alsa_opts)
{
  gint ret;
  guint idx;
  /* const */ gchar *option;

  if (mixer->interface == NULL) {
    GST_WARNING ("Cannot send update notifications, no GstMixer * given");
    return;
  }

  ret = snd_mixer_selem_get_enum_item (alsa_opts->element, 0, &idx);
  if (ret == 0) {
    option = g_list_nth_data (GST_MIXER_OPTIONS (alsa_opts)->values, idx);
    gst_mixer_option_changed (mixer->interface, GST_MIXER_OPTIONS (alsa_opts),
        option);
  }
}
示例#2
0
static void 
xfce_mixer_option_changed (GtkComboBox     *combo,
                           XfceMixerOption *option)
{
  gchar *active_option;

  if (G_UNLIKELY (option->ignore_signals))
    return;

  active_option = gtk_combo_box_get_active_text (combo);

  if (G_LIKELY (active_option != NULL))
    {
      gst_mixer_set_option (GST_MIXER (option->card), GST_MIXER_OPTIONS (option->track), 
                            active_option);
      g_free (active_option);
    }
}
示例#3
0
static void
xfce_mixer_option_create_contents (XfceMixerOption *option)
{
  GstMixerOptions *options;
  GtkWidget       *label;
  const GList     *iter;
  const gchar     *active_option;
  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);
  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);
  gtk_widget_show (label);

  options = GST_MIXER_OPTIONS (option->track);
  active_option = gst_mixer_get_option (GST_MIXER (option->card), options);

  option->combo = gtk_combo_box_new_text ();

  for (iter = options->values, i = 0; iter != NULL; iter = g_list_next (iter), ++i)
    {
      gtk_combo_box_append_text (GTK_COMBO_BOX (option->combo), iter->data);

      if (G_UNLIKELY (g_utf8_collate (active_option, iter->data) == 0))
        gtk_combo_box_set_active (GTK_COMBO_BOX (option->combo), i);
    }
  
  gtk_box_pack_start (GTK_BOX (option), option->combo, FALSE, FALSE, 0);
  gtk_widget_show (option->combo);

  g_signal_connect (option->combo, "changed", G_CALLBACK (xfce_mixer_option_changed), option);

  g_free (title);
}
示例#4
0
void
xfce_mixer_option_update (XfceMixerOption *option)
{
  GstMixerOptions *options;
  GtkTreeModel    *model;
  GtkTreeIter      iter;
  const gchar     *active_option;
  gchar           *str;

  g_return_if_fail (IS_XFCE_MIXER_OPTION (option));

  options = GST_MIXER_OPTIONS (option->track);
  active_option = gst_mixer_get_option (GST_MIXER (option->card), options);

  model = gtk_combo_box_get_model (GTK_COMBO_BOX (option->combo));

  if (gtk_tree_model_get_iter_first (model, &iter))
    {
      do 
        {
          gtk_tree_model_get (model, &iter, 0, &str, -1);

          if (G_UNLIKELY (g_utf8_collate (str, active_option) == 0))
            {
              option->ignore_signals = TRUE;
              gtk_combo_box_set_active_iter (GTK_COMBO_BOX (option->combo), &iter);
              option->ignore_signals = FALSE;

              g_free (str);
              
              break;
            }

          g_free (str);
        }
      while (gtk_tree_model_iter_next (model, &iter));
    }
}