summaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authorMichal Ratajsky <[email protected]>2014-06-20 16:35:33 +0200
committerMichal Ratajsky <[email protected]>2014-06-20 16:35:33 +0200
commit02e93868a222a16b9a95a2a51e6b88fe733c5d97 (patch)
tree6e477588e09112db8139dd4a5b12e7810f1c0347 /backends
parent6be9a89195e0d3bf8408cea661f22cb97b638f24 (diff)
downloadlibmatemixer-02e93868a222a16b9a95a2a51e6b88fe733c5d97.tar.bz2
libmatemixer-02e93868a222a16b9a95a2a51e6b88fe733c5d97.tar.xz
Fix volume and mute notifications
Diffstat (limited to 'backends')
-rw-r--r--backends/pulse/pulse-stream.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/backends/pulse/pulse-stream.c b/backends/pulse/pulse-stream.c
index bb50c50..80b281b 100644
--- a/backends/pulse/pulse-stream.c
+++ b/backends/pulse/pulse-stream.c
@@ -459,8 +459,14 @@ pulse_stream_update_volume (PulseStream *stream,
const pa_cvolume *volume,
const pa_channel_map *map)
{
+ gdouble fade;
+ gdouble balance;
+
g_return_val_if_fail (PULSE_IS_STREAM (stream), FALSE);
+ fade = stream_get_fade (MATE_MIXER_STREAM (stream));
+ balance = stream_get_balance (MATE_MIXER_STREAM (stream));
+
/* The channel_map argument is always present, but volume is not always
* supported and might be NULL */
if (!pa_channel_map_equal (&stream->priv->channel_map, map))
@@ -472,7 +478,13 @@ pulse_stream_update_volume (PulseStream *stream,
g_object_notify (G_OBJECT (stream), "volume");
- // XXX notify fade, balance if changed
+ // XXX update flags using pa_cvolume_can_fade, pa_cvolume_can_balance
+
+ if (pa_cvolume_get_fade (volume, map) != fade)
+ g_object_notify (G_OBJECT (stream), "fade");
+
+ if (pa_cvolume_get_balance (volume, map) != balance)
+ g_object_notify (G_OBJECT (stream), "balance");
}
}
return TRUE;
@@ -591,18 +603,19 @@ static gboolean
stream_set_mute (MateMixerStream *stream, gboolean mute)
{
PulseStream *pulse;
- gboolean ret = TRUE;
g_return_val_if_fail (PULSE_IS_STREAM (stream), FALSE);
pulse = PULSE_STREAM (stream);
if (pulse->priv->mute != mute) {
- ret = PULSE_STREAM_GET_CLASS (stream)->set_mute (stream, mute);
- if (ret)
- pulse->priv->mute = mute;
+ if (PULSE_STREAM_GET_CLASS (stream)->set_mute (stream, mute) == FALSE)
+ return FALSE;
+
+ pulse->priv->mute = mute;
+ g_object_notify (G_OBJECT (stream), "mute");
}
- return ret;
+ return TRUE;
}
static guint
@@ -996,6 +1009,7 @@ stream_set_active_port (MateMixerStream *stream, const gchar *port)
g_return_val_if_fail (PULSE_IS_STREAM (stream), FALSE);
g_return_val_if_fail (port != NULL, FALSE);
+ // XXX save and notify
return PULSE_STREAM_GET_CLASS (stream)->set_active_port (stream, port);
}
@@ -1021,7 +1035,6 @@ static gboolean
stream_set_cvolume (MateMixerStream *stream, pa_cvolume *volume)
{
PulseStream *pulse;
- gboolean ret = TRUE;
if (!pa_cvolume_valid (volume))
return FALSE;
@@ -1029,9 +1042,13 @@ stream_set_cvolume (MateMixerStream *stream, pa_cvolume *volume)
pulse = PULSE_STREAM (stream);
if (!pa_cvolume_equal (volume, &pulse->priv->volume)) {
- ret = PULSE_STREAM_GET_CLASS (stream)->set_volume (stream, volume);
- if (ret)
- pulse->priv->volume = *volume;
+ if (PULSE_STREAM_GET_CLASS (stream)->set_volume (stream, volume) == FALSE)
+ return FALSE;
+
+ pulse->priv->volume = *volume;
+ g_object_notify (G_OBJECT (stream), "volume");
+
+ // XXX notify fade and balance
}
- return ret;
+ return TRUE;
}