diff options
author | Charles Kerr <charles.kerr@canonical.com> | 2016-01-12 14:04:16 -0600 |
---|---|---|
committer | Charles Kerr <charles.kerr@canonical.com> | 2016-01-12 14:04:16 -0600 |
commit | 6513c65a7e6a6e5db6e1f44e87e6e7f138b462e8 (patch) | |
tree | e79f76e251f02d90e15c8486baf76368180be41c | |
parent | c20038f396bfed592604bb3ab1ddb812717aa832 (diff) | |
download | ayatana-indicator-sound-6513c65a7e6a6e5db6e1f44e87e6e7f138b462e8.tar.gz ayatana-indicator-sound-6513c65a7e6a6e5db6e1f44e87e6e7f138b462e8.tar.bz2 ayatana-indicator-sound-6513c65a7e6a6e5db6e1f44e87e6e7f138b462e8.zip |
in volume-warning-pulse, get/set the sink input's volume rather than the sink's volume, just as volume-control-pulse does
-rw-r--r-- | src/volume-warning-pulse.vala | 57 |
1 files changed, 7 insertions, 50 deletions
diff --git a/src/volume-warning-pulse.vala b/src/volume-warning-pulse.vala index c0a1b1a..3903b01 100644 --- a/src/volume-warning-pulse.vala +++ b/src/volume-warning-pulse.vala @@ -46,11 +46,11 @@ public class VolumeWarningPulse : VolumeWarning protected override void preshow () { /* showing the dialog can change the sink input index (bug #1484589) * so cache it here for later use in sound_system_set_multimedia_volume() */ - _target_sink_index = _multimedia_sink_index; + _target_sink_input_index = _multimedia_sink_input_index; } protected override void sound_system_set_multimedia_volume (PulseAudio.Volume volume) { - var index = _target_sink_index; + var index = _target_sink_input_index; return_if_fail (_pulse_context != null); return_if_fail (index != PulseAudio.INVALID_INDEX); @@ -58,8 +58,8 @@ public class VolumeWarningPulse : VolumeWarning unowned CVolume cvol = CVolume (); cvol.set (1, volume); - debug ("setting multimedia volume to %s", cvol.to_string ()); - _pulse_context.set_sink_volume_by_index (index, cvol); + debug ("setting multimedia (sink_input index %d) volume to %s", (int)index, cvol.to_string ()); + _pulse_context.set_sink_input_volume (index, cvol); } private unowned PulseAudio.GLibMainLoop _pgloop = null; @@ -71,47 +71,11 @@ public class VolumeWarningPulse : VolumeWarning private uint soon_interval_msec = 500; - private uint32 _target_sink_index = PulseAudio.INVALID_INDEX; - private uint32 _multimedia_sink_index = PulseAudio.INVALID_INDEX; + private uint32 _target_sink_input_index = PulseAudio.INVALID_INDEX; private uint32 _multimedia_sink_input_index = PulseAudio.INVALID_INDEX; /***/ - private void update_multimedia_volume () { - - return_if_fail (_pulse_context != null); - return_if_fail (_multimedia_sink_index != PulseAudio.INVALID_INDEX); - - _pulse_context.get_sink_info_by_index (_multimedia_sink_index, (c,i) => { - if (i != null) - multimedia_volume = i.volume.max (); - }); - } - - private void update_multimedia_volume_soon () { - - if (_update_sink_timer == 0) { - _update_sink_timer = Timeout.add (soon_interval_msec, () => { - _update_sink_timer = 0; - update_multimedia_volume (); - return Source.REMOVE; - }); - } - } - - private void set_multimedia_sink_index (uint32 index) { - - if (_multimedia_sink_index != index) { - _multimedia_sink_index = index; - - multimedia_volume = PulseAudio.Volume.INVALID; - if (index != PulseAudio.INVALID_INDEX) - update_multimedia_volume_soon (); - } - } - - /***/ - private bool is_active_multimedia (SinkInputInfo i) { return (i.corked == 0) && (i.proplist.gets(PulseAudio.Proplist.PROP_MEDIA_ROLE) == "multimedia"); @@ -120,7 +84,7 @@ public class VolumeWarningPulse : VolumeWarning private void clear_multimedia () { _multimedia_sink_input_index = PulseAudio.INVALID_INDEX; - set_multimedia_sink_index (PulseAudio.INVALID_INDEX); + multimedia_volume = PulseAudio.Volume.INVALID; multimedia_active = false; } @@ -132,7 +96,7 @@ public class VolumeWarningPulse : VolumeWarning if (is_active_multimedia (i)) { GLib.message ("on_sink_input_info() setting multimedia sink input index to %d, sink index to %d", (int)i.index, (int)i.sink); _multimedia_sink_input_index = i.index; - set_multimedia_sink_index (i.sink); + multimedia_volume = i.volume.max (); multimedia_active = true; } else if (i.index == _multimedia_sink_input_index) { @@ -164,13 +128,6 @@ public class VolumeWarningPulse : VolumeWarning private void context_events_cb (Context c, Context.SubscriptionEventType t, uint32 index) { switch (t & Context.SubscriptionEventType.FACILITY_MASK) { - case Context.SubscriptionEventType.SINK: - // if something happens to the sink connected to our mm sink input, - // get its updated info to keep our multimedia volume up-to-date - if ((index == _multimedia_sink_index) && (index != PulseAudio.INVALID_INDEX)) - update_multimedia_volume_soon(); - break; - case Context.SubscriptionEventType.SINK_INPUT: switch (t & Context.SubscriptionEventType.TYPE_MASK) { |