This is an automated email from the git hooks/post-receive script. b l u e s a b r e p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository panel-plugins/xfce4-pulseaudio-plugin.
commit d3f05f2058993d7b3b715c2e32952ab45d5cd336 Author: Sean Davis <[email protected]> Date: Sat Sep 9 07:56:03 2017 -0400 Add support for input devices, ignoring sink monitors --- panel-plugin/pulseaudio-menu.c | 160 +++++++++++++++++++++++++-------------- panel-plugin/pulseaudio-volume.c | 51 ++++++++++++- panel-plugin/pulseaudio-volume.h | 2 + 3 files changed, 155 insertions(+), 58 deletions(-) diff --git a/panel-plugin/pulseaudio-menu.c b/panel-plugin/pulseaudio-menu.c index 395e2fd..f10650b 100644 --- a/panel-plugin/pulseaudio-menu.c +++ b/panel-plugin/pulseaudio-menu.c @@ -186,6 +186,20 @@ pulseaudio_menu_default_output_item_toggled (PulseaudioMenu *menu, static void +pulseaudio_menu_default_input_item_toggled (PulseaudioMenu *menu, + GtkCheckMenuItem *menu_item) +{ + g_return_if_fail (IS_PULSEAUDIO_MENU (menu)); + + if (gtk_check_menu_item_get_active (menu_item)) + { + pulseaudio_volume_set_default_input (menu->volume, (gchar *)g_object_get_data (G_OBJECT(menu_item), "name")); + } +} + + + +static void pulseaudio_menu_input_range_scroll (GtkWidget *widget, GdkEvent *event, PulseaudioMenu *menu) @@ -435,84 +449,120 @@ pulseaudio_menu_new (PulseaudioVolume *volume, volume_max = pulseaudio_config_get_volume_max (menu->config); - /* output volume slider */ - mi = scale_menu_item_new_with_range (0.0, volume_max, 1.0); - scale_menu_item_set_image_from_icon_name (SCALE_MENU_ITEM (mi), "audio-volume-high-symbolic"); - scale_menu_item_set_description_label (SCALE_MENU_ITEM (mi), _("<b>Audio output volume</b>")); + /* Output Devices */ + sources = pulseaudio_volume_get_output_list (menu->volume); + if (g_list_length (sources) > 0) { + /* output volume slider */ + mi = scale_menu_item_new_with_range (0.0, volume_max, 1.0); + scale_menu_item_set_image_from_icon_name (SCALE_MENU_ITEM (mi), "audio-volume-high-symbolic"); + scale_menu_item_set_description_label (SCALE_MENU_ITEM (mi), _("<b>Audio output volume</b>")); - /* range slider */ - menu->range_output = scale_menu_item_get_scale (SCALE_MENU_ITEM (mi)); + /* range slider */ + menu->range_output = scale_menu_item_get_scale (SCALE_MENU_ITEM (mi)); - g_signal_connect_swapped (mi, "value-changed", G_CALLBACK (pulseaudio_menu_output_range_value_changed), menu); - g_signal_connect (mi, "scroll-event", G_CALLBACK (pulseaudio_menu_output_range_scroll), menu); + g_signal_connect_swapped (mi, "value-changed", G_CALLBACK (pulseaudio_menu_output_range_value_changed), menu); + g_signal_connect (mi, "scroll-event", G_CALLBACK (pulseaudio_menu_output_range_scroll), menu); - gtk_widget_show_all (mi); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); + gtk_widget_show_all (mi); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - menu->mute_output_item = gtk_check_menu_item_new_with_mnemonic (_("_Mute audio output")); - gtk_widget_show_all (menu->mute_output_item); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu->mute_output_item); - g_signal_connect_swapped (G_OBJECT (menu->mute_output_item), "toggled", G_CALLBACK (pulseaudio_menu_mute_output_item_toggled), menu); + menu->mute_output_item = gtk_check_menu_item_new_with_mnemonic (_("_Mute audio output")); + gtk_widget_show_all (menu->mute_output_item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu->mute_output_item); + g_signal_connect_swapped (G_OBJECT (menu->mute_output_item), "toggled", G_CALLBACK (pulseaudio_menu_mute_output_item_toggled), menu); - sources = pulseaudio_volume_get_output_list (menu->volume); - if (g_list_length (sources) > 1) { - submenu = gtk_menu_new (); + if (g_list_length (sources) > 1) { + submenu = gtk_menu_new (); - for (GList *list = sources; list != NULL; list = g_list_next (list)) { - mi = gtk_radio_menu_item_new_with_label (group, pulseaudio_volume_get_output_by_name (menu->volume, list->data)); - g_object_set_data (G_OBJECT (mi), "name", g_strdup ((gchar *)list->data)); + for (GList *list = sources; list != NULL; list = g_list_next (list)) { + mi = gtk_radio_menu_item_new_with_label (group, pulseaudio_volume_get_output_by_name (menu->volume, list->data)); + g_object_set_data (G_OBJECT (mi), "name", g_strdup ((gchar *)list->data)); - group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (mi)); - if (g_strcmp0 (list->data, pulseaudio_volume_get_default_output (menu->volume)) == 0) - { - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), TRUE); - } - else - { - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), FALSE); + group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (mi)); + if (g_strcmp0 (list->data, pulseaudio_volume_get_default_output (menu->volume)) == 0) + { + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), TRUE); + } + else + { + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), FALSE); + } + gtk_widget_show (mi); + gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mi); + + g_signal_connect_swapped (G_OBJECT (mi), "toggled", G_CALLBACK (pulseaudio_menu_default_output_item_toggled), menu); } + + mi = gtk_menu_item_new_with_label ("Output Device"); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), submenu); gtk_widget_show (mi); - gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mi); - g_signal_connect_swapped (G_OBJECT (mi), "toggled", G_CALLBACK (pulseaudio_menu_default_output_item_toggled), menu); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); } - mi = gtk_menu_item_new_with_label ("Output Device"); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), submenu); + /* separator */ + mi = gtk_separator_menu_item_new (); gtk_widget_show (mi); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); } g_list_free (sources); - /* separator */ - mi = gtk_separator_menu_item_new (); - gtk_widget_show (mi); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + /* Input Devices */ + sources = pulseaudio_volume_get_input_list (menu->volume); + if (g_list_length (sources) > 0) { + /* input volume slider */ + mi = scale_menu_item_new_with_range (0.0, volume_max, 1.0); + scale_menu_item_set_image_from_icon_name (SCALE_MENU_ITEM (mi), "microphone-sensitivity-high-symbolic"); + scale_menu_item_set_description_label (SCALE_MENU_ITEM (mi), _("<b>Audio input volume</b>")); - /* input volume slider */ - mi = scale_menu_item_new_with_range (0.0, volume_max, 1.0); - scale_menu_item_set_image_from_icon_name (SCALE_MENU_ITEM (mi), "microphone-sensitivity-high-symbolic"); - scale_menu_item_set_description_label (SCALE_MENU_ITEM (mi), _("<b>Audio input volume</b>")); + /* range slider */ + menu->range_input = scale_menu_item_get_scale (SCALE_MENU_ITEM (mi)); - /* range slider */ - menu->range_input = scale_menu_item_get_scale (SCALE_MENU_ITEM (mi)); + g_signal_connect_swapped (mi, "value-changed", G_CALLBACK (pulseaudio_menu_input_range_value_changed), menu); + g_signal_connect (mi, "scroll-event", G_CALLBACK (pulseaudio_menu_input_range_scroll), menu); - g_signal_connect_swapped (mi, "value-changed", G_CALLBACK (pulseaudio_menu_input_range_value_changed), menu); - g_signal_connect (mi, "scroll-event", G_CALLBACK (pulseaudio_menu_input_range_scroll), menu); + gtk_widget_show_all (mi); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); - gtk_widget_show_all (mi); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); + menu->mute_input_item = gtk_check_menu_item_new_with_mnemonic (_("_Mute audio input")); + gtk_widget_show_all (menu->mute_input_item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu->mute_input_item); + g_signal_connect_swapped (G_OBJECT (menu->mute_input_item), "toggled", G_CALLBACK (pulseaudio_menu_mute_input_item_toggled), menu); - menu->mute_input_item = gtk_check_menu_item_new_with_mnemonic (_("_Mute audio input")); - gtk_widget_show_all (menu->mute_input_item); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu->mute_input_item); - g_signal_connect_swapped (G_OBJECT (menu->mute_input_item), "toggled", G_CALLBACK (pulseaudio_menu_mute_input_item_toggled), menu); + if (g_list_length (sources) > 1) { + submenu = gtk_menu_new (); - /* separator */ - mi = gtk_separator_menu_item_new (); - gtk_widget_show (mi); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + for (GList *list = sources; list != NULL; list = g_list_next (list)) { + mi = gtk_radio_menu_item_new_with_label (group, pulseaudio_volume_get_input_by_name (menu->volume, list->data)); + g_object_set_data (G_OBJECT (mi), "name", g_strdup ((gchar *)list->data)); + + group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (mi)); + if (g_strcmp0 (list->data, pulseaudio_volume_get_default_input (menu->volume)) == 0) + { + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), TRUE); + } + else + { + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), FALSE); + } + gtk_widget_show (mi); + gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mi); + + g_signal_connect_swapped (G_OBJECT (mi), "toggled", G_CALLBACK (pulseaudio_menu_default_input_item_toggled), menu); + } + + mi = gtk_menu_item_new_with_label ("Input Device"); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), submenu); + gtk_widget_show (mi); + + gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + } + + /* separator */ + mi = gtk_separator_menu_item_new (); + gtk_widget_show (mi); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); + } /* MPRIS2 */ #ifdef HAVE_MPRIS2 diff --git a/panel-plugin/pulseaudio-volume.c b/panel-plugin/pulseaudio-volume.c index aae6955..ce73b0c 100644 --- a/panel-plugin/pulseaudio-volume.c +++ b/panel-plugin/pulseaudio-volume.c @@ -223,6 +223,8 @@ pulseaudio_volume_source_info_cb (pa_context *context, if (i == NULL) return; pulseaudio_debug ("source info: %s, %s", i->name, i->description); + volume->source_index = (guint)i->index; + muted_mic = !!(i->mute); vol_mic = pulseaudio_volume_v2d (volume, i->volume.values[0]); @@ -348,6 +350,9 @@ pulseaudio_volume_get_source_list_cb (pa_context *context, if (eol > 0) return; + /* Ignore sink monitors, not relevant for users */ + if (i->monitor_of_sink != PA_INVALID_INDEX) return; + name = g_strdup (i->name); description = g_strdup (i->description); @@ -846,6 +851,14 @@ pulseaudio_volume_get_default_output (PulseaudioVolume *volume) +const gchar * +pulseaudio_volume_get_default_input (PulseaudioVolume *volume) +{ + return volume->default_source_name; +} + + + static void pulseaudio_volume_default_sink_changed_info_cb (pa_context *context, const pa_sink_info *i, @@ -886,10 +899,42 @@ pulseaudio_volume_set_default_output (PulseaudioVolume *volume, -const gchar * -pulseaudio_volume_get_default_input (PulseaudioVolume *volume) +static void +pulseaudio_volume_default_source_changed_info_cb (pa_context *context, + const pa_source_info *i, + int eol, + void *userdata) { - return volume->default_source_name; + PulseaudioVolume *volume = PULSEAUDIO_VOLUME (userdata); + if (i == NULL) return; + + pa_context_move_source_output_by_index (context, volume->source_index, i->index, NULL, NULL); + volume->source_index = (guint)i->index; +} + + + +static void +pulseaudio_volume_default_source_changed (pa_context *context, + int success, + void *userdata) +{ + PulseaudioVolume *volume = PULSEAUDIO_VOLUME (userdata); + + if (success) + pa_context_get_source_info_by_name (volume->pa_context, volume->default_source_name, pulseaudio_volume_default_source_changed_info_cb, volume); +} + + + +void +pulseaudio_volume_set_default_input (PulseaudioVolume *volume, + gchar *name) +{ + g_free (volume->default_source_name); + volume->default_source_name = g_strdup (name); + + pa_context_set_default_source (volume->pa_context, name, pulseaudio_volume_default_source_changed, volume); } diff --git a/panel-plugin/pulseaudio-volume.h b/panel-plugin/pulseaudio-volume.h index 7acaa79..2bef77f 100644 --- a/panel-plugin/pulseaudio-volume.h +++ b/panel-plugin/pulseaudio-volume.h @@ -69,6 +69,8 @@ GList *pulseaudio_volume_get_input_list (PulseaudioVol gchar *pulseaudio_volume_get_input_by_name (PulseaudioVolume *volume, gchar *name); const gchar *pulseaudio_volume_get_default_input (PulseaudioVolume *volume); +void pulseaudio_volume_set_default_input (PulseaudioVolume *volume, + gchar *name); G_END_DECLS -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
