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); } }
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); } }
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); }
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)); } }