[Xfce4-commits] [panel-plugins/xfce4-pulseaudio-plugin] 02/21: Add support for input devices, ignoring sink monitors
noreply at xfce.org
noreply at xfce.org
Sat Sep 23 21:27:28 CEST 2017
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 <smd.seandavis at gmail.com>
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.
More information about the Xfce4-commits
mailing list