Skip to content
Snippets Groups Projects
Commit 77e1080b authored by Sean Davis's avatar Sean Davis
Browse files

Wait for the pulseaudio volume sink to be connected to get the current volume...

Wait for the pulseaudio volume sink to be connected to get the current volume state at startup (Bugs #14071, #13677)
parent fc41b1c7
No related branches found
No related tags found
No related merge requests found
......@@ -280,12 +280,30 @@ pulseaudio_button_update_icons (PulseaudioButton *button)
static gboolean
pulseaudio_button_sink_connection_timeout (gpointer userdata)
{
PulseaudioButton *button = PULSEAUDIO_BUTTON (userdata);
gboolean sink_connected = pulseaudio_volume_get_sink_connected (button->volume);
if (sink_connected)
{
pulseaudio_button_update (button, TRUE);
return FALSE;
}
return TRUE;
}
static void
pulseaudio_button_update (PulseaudioButton *button,
gboolean force_update)
{
gdouble volume;
gboolean connected;
gboolean sink_connected;
gboolean muted;
gchar *tip_text;
const gchar *icon_name;
......@@ -296,6 +314,8 @@ pulseaudio_button_update (PulseaudioButton *button,
volume = pulseaudio_volume_get_volume (button->volume);
muted = pulseaudio_volume_get_muted (button->volume);
connected = pulseaudio_volume_get_connected (button->volume);
sink_connected = pulseaudio_volume_get_sink_connected (button->volume);
if (!connected)
icon_name = icons[V_MUTED];
else if (muted)
......@@ -324,6 +344,9 @@ pulseaudio_button_update (PulseaudioButton *button,
gtk_image_set_from_icon_name (GTK_IMAGE (button->image), icon_name, GTK_ICON_SIZE_BUTTON);
gtk_image_set_pixel_size (GTK_IMAGE (button->image), button->icon_size);
}
if (!sink_connected)
g_timeout_add (250, pulseaudio_button_sink_connection_timeout, button);
}
......
......@@ -536,6 +536,26 @@ pulseaudio_volume_get_connected (PulseaudioVolume *volume)
gboolean
pulseaudio_volume_get_sink_connected (PulseaudioVolume *volume)
{
g_return_val_if_fail (IS_PULSEAUDIO_VOLUME (volume), FALSE);
return volume->sink_connected;
}
gboolean
pulseaudio_volume_get_source_connected (PulseaudioVolume *volume)
{
g_return_val_if_fail (IS_PULSEAUDIO_VOLUME (volume), FALSE);
return volume->source_connected;
}
static gdouble
pulseaudio_volume_v2d (PulseaudioVolume *volume,
pa_volume_t pa_volume)
......@@ -737,10 +757,10 @@ pulseaudio_volume_set_volume (PulseaudioVolume *volume,
vol_trim = MIN (MAX (vol, 0.0), vol_max);
if (volume->volume != vol_trim)
{
volume->volume = vol_trim;
pa_context_get_server_info (volume->pa_context, pulseaudio_volume_set_volume_cb1, volume);
}
{
volume->volume = vol_trim;
pa_context_get_server_info (volume->pa_context, pulseaudio_volume_set_volume_cb1, volume);
}
}
......
......@@ -39,6 +39,8 @@ GType pulseaudio_volume_get_type (void) G_GNUC_
PulseaudioVolume *pulseaudio_volume_new (PulseaudioConfig *config);
gboolean pulseaudio_volume_get_connected (PulseaudioVolume *volume);
gboolean pulseaudio_volume_get_sink_connected (PulseaudioVolume *volume);
gboolean pulseaudio_volume_get_source_connected (PulseaudioVolume *volume);
gdouble pulseaudio_volume_get_volume (PulseaudioVolume *volume);
void pulseaudio_volume_set_volume (PulseaudioVolume *volume,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment